0x01 前言
은 getst.py (
https://github.com/secureauthcorp/impacket/blob/master/examples/)에 새로운 PR-Force-Forwardable 로고를 추가했습니다. 이 식별을 활성화 한 후 프로그램은 다음 단계를 수행합니다 (새로 추가 된 컨텐츠는 BOLD로 표시됨) : 프로그램은 -HASH 또는 -AESKEY 매개 변수에서 제공하는 키를 사용하여 명령 줄에서 지정된 서비스 원금으로 TGT를 얻습니다. 이 프로그램은 TGT를 통해 S4U2Self Exchange를 수행하여 -mimswenate 매개 변수로 지정된 사용자 서비스 원금의 서비스 티켓을 얻습니다. 프로그램은 1 단계에 사용 된 서비스 원장의 동일한 키를 사용하여 서비스 티켓을 해독 할 것입니다. 프로그램은 서비스 티켓을 편집하고 "전진 가능한"신원을 1로 설정합니다. 이 프로그램은 서비스 티켓 및 TGT와 S4U2Proxy 교환하여 -spn 매개 변수로 지정된 서비스로 시뮬레이션 사용자의 서비스 티켓을 얻습니다. 이 프로그램은 결과를 서비스 티켓으로 출력하여 대상 서비스를 인증하고 대상 사용자를 가장합니다. 이 프로그램은 티켓을 편집하고 전달 가능한 비트를 1로 강요함으로써 보호 된 사용자 그룹의 구성원으로 구성된 사용자를 시뮬레이션하거나 계정을 사용하는 것은 민감하며 '설정을 위임 할 수 없습니다. 이를 통해 프로그램을 "Kerberos 전용"제약 조건으로 구성된 서비스와 함께 사용할 수 있습니다. 다음 예에서 "service1"을 사용하면 제약 조건 대표단이 "service2"로 제한 대표단을 허용하고 user2는 "계정에 민감하며 위임 할 수 없습니다"로 구성됩니다. -force -forwardable id가없는 경우 S4U2Proxy Exchange는 S4U2Self가 반환 한 티켓이 전달되지 않기 때문에 실패합니다. 새로운 ID를 사용하면 프로그램이 성공적으로 실행되고 user2를 시뮬레이션하는 데 사용할 수있는 서비스 티켓을 생성합니다. 티켓은 Mimikatz를 통해로드 할 수 있으며 즉시 Service2에 액세스 할 수 있습니다.
0x02 示例攻击1
이 시나리오 에서이 취약점을 이용하면“이 사용자가 지정된 서비스에만 위임하는 것을 신뢰하는 방법-Kerberos 만 사용”보호 및 위임 된 보호 사용자를 시뮬레이션하는 방법을 볼 수 있습니다.
1.环境配置
테스트 도메인 (Test.local)에는 Windows Server 2019 버전을 실행하는 3 개의 서버가 포함되어 있지만 취약점은 고정되지 않았습니다. Service1 서버에서 사용자 1로 공격이 시작됩니다. Service2 서버에 관리 액세스 권한이 있으므로 user2 계정에 대한 공격을 시작하십시오. 모든 Kerberos 티켓에 대한 도메인 컨트롤러 (DC)와 상호 작용합니다. DC에서 Service1은 프로토콜을 Service2로 변환하지 않고 제한된 대표단을 수행 할 수 있도록 구성됩니다. 이를 통해 공격 경로의 3 단계 조건이 충족되도록합니다.
이 구성이 Active Directory GUI에 설정된 경우 다음과 같습니다. 계정은 계정에 민감하고 불가능한 속성으로 구성 할 수 있습니다. 이 계정은 또한 보호 된 사용자 그룹의 구성원이 될 수 있습니다. 이러한 구성 변경 중 하나 또는 둘 다가 동일합니다. 계정에 민감하고 자산을 위임 할 수없는 계정으로 구성하십시오.
보호 된 사용자 그룹에 사용자 2를 추가하십시오. 초기 공격 요새를 얻기 위해 (공격 경로에서 1 단계). PowerShell 세션을 시작하고 사용자 1 및 Service1이 자체 승인하에 Service2에 액세스 할 수 없음을 확인하십시오. 명령 : Whoamils \\ service2.test.local \ c $. 공격 경로를 계속하십시오 2 단계 : 서비스의 해시 값을 얻으십시오 1. 이 시나리오에서 Impacket의 Secretsdump.py는 AES256-CTS-HMAC-SHA1-96 값 및 LM:NTLM HASH 값을 Service1 컴퓨터 계정의 값을 얻는 데 사용됩니다. 명령 : Python. \ Impacket \ examples \ secretsdump.py 'test/user1:
[email protected]'Execution
는 필요한 해시를 얻은 후, GetSt.py 프로그램은 먼저 -force-forwards를 실행하려고 시도 할 것입니다. 성공적으로 실행할 수 없습니다. 위에서 언급했듯이 S4U2Self Exchange는 여전히 서비스 티켓을 User2의 Service1로 반환하지만 서비스의 위임 제한과 사용자의 보호되지 않은 보호로 인해 티켓의 전진 가능한 ID가 설정되지 않습니다. 이것은 S4U2Proxy Exchange에서 인증으로 티켓을 사용할 때 오류가 발생합니다. 공격 경로의 단계. 이전 명령을 반복하지만 이번에는 -force -forwardable 명령 행 매개 변수 명령을 포함합니다. cifs/service2.test.local- vismersonate user2 -Hashes AAD3B435B51404EAAD3B435B51404E:7C1673F58E7794C77DEAD3174B58B68F -AESKEY 4FFE0C458EF7196E4991229B0E1C4A11129282AFB117B02DC2F38F0312FC84B4 TEST.LOCAL/SERVICE1 -FORCE -FORWARDABLE
执行:
: S4U2 자체의 서비스 티켓 3:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000까지 전진 할 수 없습니다. -force -forwardable 플래그를 포함시켜 전달할 수있는 악용은 자동으로 실행되며 S4U2Self Exchange에서받은 서비스 티켓을 전달 가능한 송장으로 변환합니다. 이것은 Service1의 해시 값을 사용하여 티켓을 해독하여 플래그 값의 두 번째 비트를 0에서 1으로 변경 한 다음 티켓을 다시 암호화하는 것입니다. 이 전달 가능한 송장은 S4U2Proxy Exchange에서 전송되며 Service2는 User2의 서비스 티켓으로 반환되어 user2.ccache의 디스크에 기록됩니다. 다음으로, 서비스 티켓은 Mimikatz를 사용하여 사용하기 위해 티켓 캐시에로드됩니다. 로드 후 Mimikatz는 사용자가 CIFS 서비스 서비스에 액세스하기위한 유효한 티켓임을 확인합니다. 명령 : \ mimikatz \ mimikatz.exe 'kerberos3

tc user2.ccache'exit 또는 mimikatz (commandline) # kerberos

tc user2.ccache execution
Cache에 서비스 티켓을 추가 한 후 2. Service2의 user2에 대한 모든 권한이 있습니다. 우리는 Mark Russianovich의 psexec을 사용하여 Service2 서버에서 PowerShell 세션을 얻고 일부 명령을 실행합니다. 이것이 공격 경로의 마지막 단계입니다. 명령 : ls \\ service2.test.local \ c $. \ pstools \ psexec64.exe \\ service2.test.local \ powerShell.exewhoamihostname 실행 :0110-69508
2.执行攻击
0x03 示例攻击2
우리는 이전 예제에서 계속 사용될 것입니다. Target User2 계정은 "보호 된 사용자"의 구성원으로서 신원을 유지하거나 "계정 민감성 및 미분지"속성을 사용하여 구성을 먼저 유지 관리하고 서비스에 대한 위임 권한을 제거 할 수 있습니다 1. DC에 연결하고 Service를 사용하여 "이 컴퓨터를 신뢰하지 말라"는 서비스를 편집하기 위해 "
를 편집하여 Service2 컴퓨터 개체를 편집하고 사용자 1 쓰기 권한을 부여합니다. 사용자에게 사용자에게 직접 권한을 부여하면 사용자는 일반적으로 권한 그룹의 멤버십을 통해 하나 이상의 광고 개체에 대한 쓰기 권한을 얻습니다. 사용자가 반드시 도메인 관리자 일 필요는 없습니다.
1.环境配置
도메인 컨트롤러를 종료하고 Service1 서버에 user1로 로그인하십시오. 초기 공격 요새를 얻기 위해 (공격 경로에서 1 단계). 첫 번째 예제에서 공격을 계속하면 로컬 Kerberos 티켓 캐시를 지우십시오. 캐시를 지우는 가장 효과적인 방법은 Service 1을 다시 시작하는 것입니다 1.
이전 예와 달리이 공격은 Service1과 Service2의 대표 신뢰 관계를 악용하지 않습니다. "대표단을 위해이 컴퓨터를 신뢰하는"Service1을 구성한 후에는이 신뢰 관계가 더 이상 존재하지 않습니다. 이번에는 새로운 서비스 인 Service2와 새로운 대표 관계를 구축해야합니다. 환경에서 새로운 서비스를 만들려면 Kevin Robertson의 PowerMad를 사용하여 새로운 컴퓨터 계정을 만들 것입니다. 이는 계정의 권한을 늘릴 필요가 없으며 기본적으로 도메인의 모든 사용자가 사용할 수 있습니다. 우리는 컴퓨터 계정을 "AttacterService"로 명명하고 "AttaceServicePassword"명령 : import -Module. 새 머신 계정의 비밀번호를 선택한 결과 Mimikatz를 사용하여 해당 비밀번호 해시를 쉽게 계산할 수 있습니다. 이로 인해 공격 경로의 2 단계가 완료됩니다. 명령 : \ mimikatz \ mimikatz.exe 'Kerberos3:hash /password3:attackerservicepassword /user:attackerservice /domnain3360test.local'Exit Execution
Powers actory modurecure modurecule modurecule molding the the actory molding. 모듈을 아직 사용할 수 없으므로 해당 기능을 설치하고 모듈을 가져온 다음 새로 생성 된 컴퓨터 계정을 확인합니다. 명령 : 설치 -WindowsFeature RSAT-AD-Powershellimport-Module Active DirectoryGet-Adcomputer AttacterService 실행
기계 계정의 존재를 확인한 후 Service2와 AttacterService 간의 제한된 대표 신뢰 관계를 설정할 수 있습니다. User1 (제어 된 발판 계정)에는 Service2 객체에 대한 쓰기 권한이 있으므로 Service2의 PrincipalsallowEdTodeLegateToAccount에 공격자 서비스를 추가 할 수 있습니다. 이는 Service2에 대한 자원 기반 제한 대표단을 설정하여 공격자 서비스에서 제한된 대표단을 수락합니다. 이 단계를 완료 한 후 공격 경로의 3 단계 조건을 충족합니다. 명령 : set-adcomputer service2- PrincipalsallowedTodeTodelegateToAccount AttacterService $ get-adcomputer service2 -Properties PrincipalsallowEdTodeLegateToAccount 실행
공격 경로의 4 단계를 계속 실행하고 취약성 착취를 수행 할 준비가되었습니다. 우리는 이전 예제에서와 동일한 명령을 사용하지만 이번에는 Service1 대신 공격자 서비스를 지정하고 Mimikatz를 사용하여 해시 값을 계산합니다.
명령에 -force -forwardable 플래그를 포함시킬 때 이전 예제에서와 동일한 결과를 볼 수 있습니다. Exploit을 수행하고 전달 가능한 플래그를 설정 한 다음 User2.ccache의 디스크에 사용자 2로 Service2의 서비스 티켓을 작성하십시오. 명령 : Python. \ Impacket \ examples \ getst.py -spn cifs/service2.test.local -usmersonate user2 -Hases -Hases -Hases -Hases -Hases 830F8DF592F48BC036AC79A2BBBBB8036C5:830F8DF8DF592F48BC036AC79A2BB8036C5 -AESKE 2A62271BDC6226C1106C1ED8DCB554CBF46FB99DDA304C472569218C125D9FFC TEST.LOCAL/ATVECTERSERVICE -FORCE -FORWARDEBLE -ADCOMPUTER SERVICE2- PRINCIPALLACKEDTODELEGETOCCOUCCOUCCOUCCOUCCOUCCOUCCOUCCOUCCOUCCOUCCUTE.
이제 이전 예제에서 마지막 명령을 반복 할 수 있습니다. Mimikatz를 사용하여 서비스 티켓을 현지 Kerberos 티켓 캐시에로드하면 공격 경로의 5 단계를 준비합니다. 그런 다음 service2 (simulating user2)와 상호 작용하여 5 단계 명령을 실행합니다. out-nullls \\ service2.test.local \ c $. \ pstools \ psexec64.exe \\ service2.test.local \ powershell.exewhoamihostname 실행