乾貨 | 利用netsh實現的後門
About:
1. Common commands of netshn2. Matthew Demaske』s way of using netshell to execute evil dlls andpersist on a host n3. Write a dll with the InitHelperDll functionn4. How to usen5. Detection n
目錄:
1. 介紹netsh的常用命令
測試Matthew Demaske分享的方法——using netshell toexecute evil dlls and persist on a host
2. 如何使用c++編寫導出函數為InitHelperDll的helper dll
3. 實際測試利用
4. 防禦和檢測
00 簡介
在滲透測試中,使用系統中默認支持的命令常常可以繞過各種檢測和攔截,比如我在《Use bitsadmin to maintain persistenceand bypass Autoruns》中介紹過如何利用系統默認支持的bitsadmin來實現自啟動,並繞過Autoruns的檢測。
Matthew Demaske在最近分享了一個他發現的方法,同樣是利用系統中默認支持的命令—— using netshell to executeevil dlls and persist on a host,本文將對其方法進行整理,並補全 文中未具體介紹的dll編寫方法
01 netsh簡介
是windows系統本身提供的功能強大的網路配置命令行工具,常用命令如下:
查看ip配置信息:
netsh interface ip show config n
查看網路配置文件:
netsh -c interface dumpn
開/關網卡:
netsh int set int name="ethernet" admin=enabled nnnetsh int set int name="ethernet"admin=disabledn
查看所有tcp連接:
netsh interface ip show tcpconnections n
設置本機ip、子網掩碼、網關ip:
netsh interface ip set address "Local Area Connection"static 192.168.1.2 255.255.255.0 192.168.1.1n
查看防火牆狀態:
netsh firewall show staten
開/關防火牆:
netsh firewall set opmode enable nnnetsh firewall set opmode disable n
輸入netsh /?可查看更詳細的命令幫助,其中add命令值得注意,輸入netsh add /?獲得更詳細內容:
如果在此添加一個測試dll,結果會怎樣呢?
02 編寫helper DLL
每個helper DLL都需要包含導出函數InitHelperDll
在添加helper DLL後,每次netsh在初始載入的時候會調用該helperDLL中的導出函數
InitHelperDll InitHelperDll示例如下:
關於InitHelperDll的細節可參照如下鏈接:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms708327(v=vs.85).aspxn
在《Code Execution of Regsvr32.exe》曾具體介紹過如何為dll添加一個導出函數,所以在 這裡接著簡單介紹一下:
新建c++工程,創建一個dll項目 在主文件添加:
添加導出函數聲明:
文件類型:Text File
名稱: 同名文件.def
寫入
EXPORTS nInitHelperDll n
編譯即可
注:Marc Smeets分享了他的POC代碼,定義導出函數使用的是另一種方式:
payload為創建新線程執行shellcode
項目地址如下: GitHub - outflankbv/NetshHelperBeacon: Example DLL to load from Windows NetShell
03 添加自定義helperdll
注:需要管理員許可權
通過cmd添加:
netshadd helper c:testnetshtest.dlln
如下圖,註冊表同步創建鍵值
位置: HKEY_LOCAL_MACHINESOFTWAREMicrosoftNetSh
名稱: netshtest
類型: REG_SZ
數據: c:testnetshtest.dll
注:通過註冊表直接添加鍵值同netsh add 添加helper dll的作用一樣
04 觸發後門
helper dll添加成功後,每次調用netsh,均會載入c:testnetshtest.dll 如圖,運行netsh命令,載入c:testnetshtest.dll,彈出計算器
驗證: 使用Process Explorer查看netsh進程載入的dll
使用Process Monitor在進程屬性Event Properties也可以查看
05 Persistence
netsh作為系統常用命令,存在被用戶正常使用的概率,所以只要啟動netsh即可觸發 payload
如果被添加為常用的開機啟動項,也很有迷惑性,因為顯示的僅僅是啟動netsh.exe
06 檢測
監控註冊表位置HKEY_LOCAL_MACHINESOFTWAREMicrosoftNetSh
注: nnetsh show helper命令並不能查到新添加的helper dll n需要留意註冊表內正常的dll是否被替換n
07 清除
通過cmd:
netsh delete helper c:testnetshtest.dlln
通過註冊表:
在HKEY_LOCAL_MACHINESOFTWAREMicrosoftNetSh刪除對應鍵值n
08 小結
1. Netsh Persistence實現的前提是已經獲得了管理員許可權
2. 部分vpn軟體在啟動過程中會調用netsh命令,這樣就解決了Netsh Persistence的自啟 動問題,該方法值得測試
3. 如果在開機啟動項中發現有netsh,值得留意,需要查看對應註冊表鍵值中是否包含惡 意的helper dll
4. 不同系統中註冊表HKEY_LOCAL_MACHINESOFTWAREMicrosoftNetSh下的默認 鍵值存在差異,需要對比查找默認鍵值是否被篡改
註:本文屬原創獎勵計劃文章,未經許可禁止轉載
推薦閱讀: