Advent of Cyber 2025: 5일차 IDOR 이거 저거 | TryHackMe

발행: (2025년 12월 14일 오전 03:47 GMT+9)
7 min read
원문: Dev.to

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는 무엇인가요?

  1. 브라우저 개발자 도구(Inspect)를 엽니다.
  2. Storage → Local storage 로 이동합니다.
  3. 드롭다운을 확장하고 http:/10.48… 로 시작하는 항목을 찾습니다.
  4. 저장된 데이터를 살펴 10명의 자녀를 가진 부모를 찾아 그 user_id를 기록합니다.

Using Burp Suite

Initial Steps

  1. AttackBox의 Target 탭을 열고 Open Browser를 클릭합니다.
  2. 오류가 보이면 오른쪽 상단의 Settings 아이콘을 클릭하고 다시 시도합니다.
  3. 브라우저가 열리면 Target 박스 URL을 붙여넣고 평소처럼 로그인합니다.
  4. Burp의 인터셉트가 켜져 있기 때문에 페이지가 “무한 로드”되는 것처럼 보일 수 있습니다.
  5. 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를 찾으세요.

  1. 대시보드에서 자식의 edit 아이콘을 클릭합니다.
  2. Burp가 요청을 멈추면 필요에 따라 페이로드를 수정하고 전달합니다.
  3. UI에 생년월일이 표시되지 않으면 브라우저 개발자 도구의 응답 본문을 확인하세요—날짜가 거기에 포함되어 있습니다.

Automating with Intruder

  1. 자식 보기 요청을 멈춘 뒤 해당 부분을 강조 표시하고 Send to Intruder를 선택합니다.
  2. Intruder 탭에서 페이로드 리스트를 생성합니다(예: 숫자 120).
  3. Payload Processing 작업을 추가하고 Base64 Encode를 선택합니다.
  4. 공격을 시작합니다.
  5. 결과에서 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 타이밍 공격이 성공했음을 확인할 수 있습니다.


관찰 내용이나 다른 접근 방법이 있으면 자유롭게 댓글 남겨 주세요.

Back to Blog

관련 글

더 보기 »