iT邦幫忙

2026 iThome 鐵人賽

DAY 24
0

來講講一個(在台灣)近期(至少 CTF 領域)比較少人討論的 Pwn 吧 xD

Web 漏洞到底關 PWN 啥啦!

萬變不離其宗 就跟如果你能肉眼輕鬆讀 assembly 那全世界的程式都是開源的一個概念(x
其他大概就這兩點ㄅ

  • PHP 本質上就是一個巨大的 C/C++ 專案
    你在 PHP 寫下的一行 $a = "whale";,在底層都不是魔法,而是 Zend Engine 用 C 語言刻出來的 zend_string、zval 與記憶體指針。只要是 C 語言寫的 runtime,就逃不掉記憶體破壞漏洞(Memory Corruption)。

  • 自成一格的記憶體生態:Zend Memory Manager (Zend MM)
    打傳統 Linux Heap Pwn 的人,腦袋裡裝的是 glibc 的 tcache、fastbin、unsorted bin;但 PHP 為了效能,在 glibc 之上自己實作了一套 Zend MM(Chunk / Large / Small / Free List 分配體系)。它有自己的 metadata、自己的 free chunk 鏈結方式(例如利用前 8 bytes 串接下一個 chunk)。這意味著打 PHP Heap 是一套新的機制。(但是不難,沒 libc heap 那麼複雜 甚至可以說很適合第一次打 Heap 的人入門

那現實世界到底在打什麼?  

在純 Pwn 題目裡,你通常有清晰的 read/write/free 選單;但在真實世界中,PHP Pwn 往往是透過 Web 端漏洞造成的,畢竟 PHP 本身不是一套完整 Web Server 當然是不會好端端發個任意請求 Buffer Overflow 就 RCE。(對這類有興趣可能可以去看看 NGINX/Apache Server 相關研究)

那事實上 PHP Pwn 主要分為這兩類在討論:

  • 基於錯誤的函數調用,直接 Input 就 RCE:像是 PHP Filter Chain 從任意讀檔,透過一個在 iconv 上的 Buffer Overflow 結合 PHP filter:// Interface 轉向 RCE 的 CVE-2024-2961;很有名,透過 Unserialize 函數內部解析中的 Heap 漏洞達成 RCE : How we broke PHP, hacked P**nhub and earned $20,000

  • 為了防堵如任意檔案上傳這類會直接/間接執行 PHP 程式碼,PHP 有提供一個 disable_functions 清單可以禁止不想被執行的程式碼被跑,這時候如果有個記憶體漏洞就可以達成 sandbox bypass !


上一篇
Day 23. 沒打過的瀏覽器嗎?有意思!
下一篇
Day 25. 鯨魚的 PHP Heap Exploitation 小筆記
系列文
Agentic Era,一年來 LLM 到底都挖了些什麼洞! 共 28 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言