【技術分享】使用PetitPotam代替Printerbug
前言
Printerbug使得擁有控制域用戶/計算機的攻擊者可以指定域內的一臺服務器,并使其對攻擊者選擇的目標進行身份驗證。雖然不是一個微軟承認的漏洞,但是跟Net-ntlmV1,非約束委派,NTLM_Relay,命名管道模擬這些手法的結合可以用來域內提權,本地提權,跨域等等利用。
遺憾的是,在PrintNightmare爆發之后,很多企業會選擇關閉spoolss服務,使得Printerbug失效。在Printerbug逐漸失效的今天,PetitPotam來了,他也可以指定域內的一臺服務器,并使其對攻擊者選擇的目標進行身份驗證。而且在低版本(16以下)的情況底下,可以匿名觸發。

原理
MS-EFSR里面有個函數EfsRpcOpenFileRaw(Opnum 0)
long EfsRpcOpenFileRaw( [in] handle_t binding_h, [out] PEXIMPORT_CONTEXT_HANDLE* hContext, [in, string] wchar_t* FileName, [in] long Flags);
他的作用是打開服務器上的加密對象以進行備份或還原,服務器上的加密對象由FileName 參數指定,FileName的類型是UncPath。
當指定格式為\\IP\C$的時候,lsass.exe服務就會去訪問\\IP\pipe\srvsrv

指定域內的一臺服務器,并使其對攻擊者選擇的目標(通過修改FileName里面的IP參數)進行身份驗證。
細節
1、通過lsarpc 觸發
在官方文檔里面,MS-EFSR的調用有\pipe\lsarpc和\pipe\efsrpc兩種方法,其中
- \pipe\lsarpc的服務器接口必須是UUID [c681d488-d850-11d0-8c52-00c04fd90f7e]
- \pipe\efsrpc的服務器接口必須是UUID [df1941c5-fe89-4e79-bf10-463657acf44d]
在我本地測試發現\pipe\efsrpc并未對外開放


在PetitPotam的Poc里面有一句注釋possible aussi via efsrpc (en changeant d'UUID) mais ce named pipe est moins universel et plus rare que lsarpc ;),翻譯過來就是
也可以通過EFSRPC(通過更改UUID),但這種命名管道的通用性不如lsarpc,而且比LSARPC更罕見
所以PetitPotam直接是采用lsarpc的方式觸發。
2、低版本可以匿名觸發
在08和12的環境,默認在網絡安全:可匿名訪問的命名管道中有三個netlogon、samr、lsarpc。因此在這個環境下是可以匿名觸發的


遺憾的是在16以上這個默認就是空了,需要至少一個域內憑據。

利用
這篇文章的主題是使用PetitPotam代替Printerbug,因此這個利用同時也是Printerbug的利用。這里順便梳理復習下Printerbug的利用。
1、結合 CVE-2019-1040,NTLM_Relay到LDAP
詳情見CVE-2019-1040,這里我們可以將觸發源從Printerbug換成PetitPotam

2、Relay到HTTP
不同于LDAP是協商簽名的,發起的協議如果是smb就需要修改Flag位,到HTTP的NTLM認證是不簽名的。前段時間比較火的ADCS剛好是http接口,又接受ntlm認證,我們可以利用PetitPotam把域控機器用戶relay到ADCS里面申請一個域控證書,再用這個證書進行kerberos認證。注意這里如果是域控要指定模板為DomainController
python3 ntlmrelayx.py -t https://192.168.12.201/Certsrv/certfnsh.asp -smb2support --adcs --template "DomainController"

2、結合非約束委派的利用
當一臺機器機配置了非約束委派之后,任何用戶通過網絡認證訪問這臺主機,配置的非約束委派的機器都能拿到這個用戶的TGT票據。
當我們拿到了一臺非約束委派的機器,只要誘導別人來訪問這臺機器就可以拿到那個用戶的TGT,在這之前我們一般用printerbug來觸發,在這里我們可以用PetitPotamlai來觸發。


域內默認所有域控都是非約束委派,因此這種利用還可用于跨域。
3、結合Net-ntlmV1進行利用
很多企業由于歷史原因,會導致LAN身份驗證級別配置不當,攻擊者可以將Net-Ntlm降級為V1

我們在Responder里面把Challeng設置為1122334455667788,就可以將Net-ntlm V1解密為ntlm hash



4、結合命名管道的模擬
在這之前,我們利用了printerbug放出了pipePotato漏洞。詳情見pipePotato:一種新型的通用提權漏洞。
在PetitPotam出來的時候,發現這個RPC也會有之前pipePotato的問題。



引用
[MS-EFSR]: Encrypting File System Remote (EFSRPC) Protocol–PetitPotam