在介紹具體的域滲透之前,有些基礎知識是必須要先說的。首先Windows自帶的cmd命令先過一遍,可以找個ntcmds.chm來學習下,這個在windows 2003上面是自帶的,也可以網上下載。2008和2012又新增了一些命令,具體可以去微軟的網站上在線看https://technet.microsoft.com/zh-cn/library/cc772390(v=ws.10).aspx
在繼續學習域滲透之前,至少應該對以下命令使用熟練:cd,dir,copy,xcopy,del,move,echo,mkdir,rmdir,type,ping,ipconfig。后面再講到新的命令時會再做講解。
0x01 ipc鏈接
內網滲透里面不管域還是工作組最先需要介紹的就是ipc連接,這個是內網滲透必修科目,后面絕大多數操作都要基於ipc連接。關於ipc的詳細介紹,可以參考這篇文章:http://www.xfocus.net/articles/200303/493.html
安焦的這篇文章是從普通的workgroup形式來舉例的,而在域中,ipc連接的形式有一些差別。
正常ipc登錄的命令是net use\\server \ipc$ “password” /user:username
在域里面使用net use建立連接時,user后面的參數需要添加機器名或者域名,分別對應使用本地賬戶或者域賬戶登錄
比如使用域賬戶登錄時net user \\server “password”/user:domain\username
注意user后面變成了domain\username,表示使用domain域的賬戶登錄
另外ipc連接時,可以省去后面的\ipc$,除非是要映射指定磁盤需要指定盤符加$,如E$
0x02 訪問文件
建立ipc連接以后,就可以訪問目標機器的文件(上傳、下載),也可以在目標機器上運行命令。上傳和下載文件直接通過copy命令就可以,不過路徑換成UNC路徑。何為UNC路徑?簡單來講以\\開頭的路徑就是UNC路徑,比如\\192.168.1.2\c$\boot.ini。如果要從本地當前目錄上傳1.bat到192.168.1.2機器C盤根目錄下,那么命令就是copy 1.bat \\192.168.1.2\C$\,反之就是下載。dir、copy、xcopy、move、type的參數都可以使用UNC路徑。
0x03 運行命令
如果要在目標機器上運行命令,最基礎的方法有3種:1、使用計划任務, 2、psexec,3、wmi遠程執行
-
計划任務
有兩種方法啟動計划任務,at和schtasks
at是最基本的方法,來個例子看下具體流程
net use \\192.168.1.5 Passw0rd! /user:admin 建立ipc連接
copy add.bat \\192.168.1.5\c$\wmpub 復制add.bat到目標C盤wmpub目錄
add.bat里面的內容是net userTwi1ight Passw0rd! /add 添加Twi1ight用戶
net time \\192.168.1.5 查看目標當前時間,得到當前時間是21:50:52
at \\192.168.1.5 21:52 c:\wmpub\add.bat 告訴目標在21:52的時候運行c:\wmpub\add.bat
at \\192.168.1.5 查看目標的計划任務列表
等到21:52時在目標上查看用戶,已經成功添加賬號
來回顧下整個流程,我們需要得到目標的當前時間,然后再添加一個計划時間比當前時間晚幾分鍾的任務。這就意味着我們需要等待直到時間到了才能執行,無法立即就執行。而且萬一時間輸錯了,比當前時間要早,那就要等到第二天才會去執行了,這時候又得重新建立一個任務,刪掉錯誤時間的那個,至於怎么刪除留待讀者實踐吧。這種處理方式同時也導致不便於寫程序來自動處理。
另一種方法是schtasks,這是升級版的at命令
默認在win7中文版上運行schtasks會爆無法加載列資源錯誤,這是編碼原因導致,默認是936編碼(GBK),用chcp 437命令換成美國編碼就可以了。
繼續用之前的例子,假設已經建立好ipc鏈接,同時已經復制了add.bat過去。下面是具體流程
schtasks /create /s 192.168.1.2 /u administrator/p Passw0rd! /ru "SYSTEM" /tn adduser /sc DAILY /tr c:\wmpub\add.bat/F
schtasks /run /s 192.168.1.2 /u administrator /pPassw0rd! /tn adduser /i
schtasks /delete /s 192.168.1.2 /u administrator/p Passw0rd! /tn adduser /f
第一條命令是創建計划任務,/s指定遠程機器名或ip地址,/ru指定運行任務的用戶權限,這里指定為最高的SYSTEM,/tn是任務名稱,/sc是任務運行頻率,這里指定為每天運行,並沒什么實際意義,/tr指定運行的文件,/F表示如果指定的任務已經存在,則強制創建任務並抑制警告。
第二條命令表示運行任務,其中/i表示立即運行,這就是schtasks比at好用的關鍵點,不需要和時間掛鈎,可以立即執行任務。
在條件允許的情況下,盡量使用schtasks,因為在某些條件下,at執行完任務后,任務信息沒有刪除,用at命令查不到任務信息,但是用schtasks卻能看到任務信息,任務名是At加一個數字。
具體例子,本地windows10,遠程windows2008
這是用at在遠程2008機器上添加一個任務,執行ipconfig命令,執行完后在win10上用at遠程查詢不到任務信息了。
然后在2008機器的本地來看at和schtasks的結果:
at命令本地也查不到信息,但是schtasks卻能看到任務信息,如果用詳細模式,就能看到更具體的信息。
Tips:
我測試windows7和windows2008無法用schtasks遠程在windows2003上面建立任務,且windows10無法使用schtasks遠程在windows2008上面建立任務。
還有使用本地賬號的情況下,schtasks在建立了ipc鏈接的基礎上還是需要指定賬號密碼
-
psexec
psexec是pstools工具包中的一個工具,常用來遠程執行命令。
psexec針對遠程建立連接的認證方式有兩種,一種先建立ipc連接,然后直接用psexec \\192.168.1.2 cmd命令開啟一個半交互式的cmdshell,另一種是在psexec的參數中指定賬號密碼。
psexec的-s參數表示是否使用system權限。
借用之前的例子,假設已經復制好add.bat到192.168.1.2,使用psexec運行的命令是:
psexec \\192.168.1.2c:\wmpub\add.bat
psexec的基本的原理是通過管道在遠程機器上創建一個服務psexec,然后通過這個服務運行命令,運行完后刪除服務。這個在windows的日志中有詳細的記錄:
另外psexec在少數情況下會出現服務沒刪除成功的bug,所以一般來講不太推薦在滲透時使用psexec。
-
wmiexec
這個是我之前寫過的一個工具,專門用來替代psexec的,這個帖子有詳細的介紹和使用說明“利用WMI代替psexec——WMIEXEC.vbs”https://www.t00ls.net/thread-21167-1-1.html,這里就不再贅述。
0x03 Hash知識
windows的密碼是經過hash后存儲的,本地存在sam,system注冊表中,域里面存在ntds.dit中。密碼hash有兩種格式,LM hash和NT hash。從vista以后的系統本地和域都不再存儲LM hash,取而代之的是一串AAD3開頭的hash串。另外由於LM hash算法的局限性,當密碼超過14位時,即使在2003或XP上,LM hash也為空,此時抓hash抓到的也是AAD3開頭的。
LMhash可以用在線網站秒破http://www.objectif-securite.ch/en/ophcrack.php
NThash就只能用暴力破解了,基本上所有破解工具都支持該算法。破不出來也沒太大關系,現在也出了很多工具支持直接使用nthash連接遠程機器執行命令。
除了這兩種hash,在域環境中還存在另外一種域登錄緩存mscash,這個后面會講到。