Advent of Cyber 2025: 5일차 IDOR 이거 저거 | TryHackMe
Source: Dev.to
Setup
- OpenVPN Connect가 머신에서 실행 중이라면 Target 박스만 시작하세요.
- 그렇지 않다면 두 박스 모두 시작합니다.
- 브라우저에서 챌린지 URL에 접속하고 Task 2에 제공된 자격 증명으로 로그인합니다.
What is IDOR?
**Insecure Direct Object Reference (IDOR)**는 권한 부여 취약점입니다.
시스템이 IDOR에 취약하면 공격자는 HTTP 요청 파라미터를 수정해 자신이 접근해서는 안 되는 리소스에 접근할 수 있습니다.
- Horizontal privilege escalation – 다른 사용자의 계정에 접근하기.
- Vertical privilege escalation – 관리자와 같은 고권한 사용자를 위한 작업 수행하기.
IDOR는 수평 권한 상승의 한 형태입니다.
TryHackMe (THM) 문서를 참고해 IDOR에 대해 더 알아보세요.
참고: “Storage 탭으로 이동해 Local Storage 드롭다운을 확장한다”는 실제로는 브라우저 개발자 도구의 Inspect → Storage → Local storage를 의미합니다.
Relevant Question
view_accounts 파라미터에 존재하는 IDOR을 이용해, 10명의 자녀를 가진 부모의 user_id는 무엇인가요?
- 브라우저 개발자 도구(
Inspect)를 엽니다. - Storage → Local storage 로 이동합니다.
- 드롭다운을 확장하고
http:/10.48…로 시작하는 항목을 찾습니다. - 저장된 데이터를 살펴 10명의 자녀를 가진 부모를 찾아 그
user_id를 기록합니다.
Using Burp Suite
Initial Steps
- AttackBox의 Target 탭을 열고 Open Browser를 클릭합니다.
- 오류가 보이면 오른쪽 상단의 Settings 아이콘을 클릭하고 다시 시도합니다.
- 브라우저가 열리면 Target 박스 URL을 붙여넣고 평소처럼 로그인합니다.
- Burp의 인터셉트가 켜져 있기 때문에 페이지가 “무한 로드”되는 것처럼 보일 수 있습니다.
- Burp Suite에서 Proxy → Intercept 로 이동해 Intercept is on을 토글합니다.
Intercepting Requests
- 개발자 도구를 연 상태에서 페이지를 새로고침해 HTTP 요청을 확인합니다.
- 자식 데이터를 로드하는 요청(예: 자식 카드의 눈 아이콘이나 편집 아이콘을 클릭했을 때 발생)을 찾습니다.
- Burp가 요청을 멈추면 파라미터(
user_id등)를 수정하고 요청을 전달해 응답을 확인합니다.
Finding a Child’s Birthdate
Task: base64 또는 md5 자식 엔드포인트를 사용해 2019‑04‑17에 태어난 자식의 id_number를 찾으세요.
- 대시보드에서 자식의 edit 아이콘을 클릭합니다.
- Burp가 요청을 멈추면 필요에 따라 페이로드를 수정하고 전달합니다.
- UI에 생년월일이 표시되지 않으면 브라우저 개발자 도구의 응답 본문을 확인하세요—날짜가 거기에 포함되어 있습니다.
Automating with Intruder
- 자식 보기 요청을 멈춘 뒤 해당 부분을 강조 표시하고 Send to Intruder를 선택합니다.
- Intruder 탭에서 페이로드 리스트를 생성합니다(예: 숫자
1‑20). - Payload Processing 작업을 추가하고 Base64 Encode를 선택합니다.
- 공격을 시작합니다.
- 결과에서
2019‑04‑17날짜를 찾아보세요. 내 경우child_id:1x가 올바른 생년월일을 반환했습니다.
Bonus Question 1
/parents/vouchers/claim 엔드포인트를 사용해 2025년 11월 20일에 유효한 바우처를 찾으세요.
- 바우처는 UUID version 1을 사용하며, 여기에는 타임스탬프가 인코딩됩니다.
- 2025년 11월 20일 20:00 – 24:00 UTC 사이의 매분마다 UUID v1 값을 생성해 올바른 바우처를 무차별 대입할 수 있습니다.
Generating UUID v1 Values
AI(예: Claude)에게 uuid npm 패키지를 사용해 원하는 구간의 매분마다 UUID v1을 생성하는 JavaScript 코드를 만들어 달라고 요청할 수 있습니다. 예시 프롬프트:
Generate JavaScript code using the `uuid` npm package to create UUID v1 values for every minute between 20:00 and 24:00 UTC on 20 November 2025.
스크립트를 로컬에서 실행하고 생성된 UUID들을 claim voucher 요청에 (Burp를 통해) 넣어 200 응답과 성공적인 클레임을 확인합니다.
정답 바우처 (THM 답변): 22643e00-c655-11f0-ac99-026ccdf7d769
Bonus Question 2
/parents/vouchers/claim 엔드포인트를 사용해 2025년 11월 20일에 유효한 바우처를 찾으세요. (재진술)
- UUID 리스트를 만든 뒤 각 값을
voucher파라미터로 넣어 클레임 요청을 보냅니다. - Burp 결과에서 status 200과 성공 메시지를 필터링합니다.
TryHackMe에서 반환된 유효한 바우처는 다음과 같습니다:
22643e00-c655-11f0-ac99-026ccdf7d769
정답 바우처와 여러분이 생성한 바우처는 동일한 타임스탬프 접두사를 공유하므로 UUID‑v1 타이밍 공격이 성공했음을 확인할 수 있습니다.
관찰 내용이나 다른 접근 방법이 있으면 자유롭게 댓글 남겨 주세요.