乾貨 | 利用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下的默認 鍵值存在差異,需要對比查找默認鍵值是否被篡改

註:本文屬原創獎勵計劃文章,未經許可禁止轉載

推薦閱讀:

瀏覽器chrome://version/命令行被篡改,怎樣才能修復?快捷方式沒有網址,還是被劫持

TAG:软件后门 | 命令行控制 |