1. 문제 설명

저번에 풀어봤던 session-basic과 얼추 비슷할거라고 생각이 되긴 하나, 문제를 천천히 보면서 풀이해볼 생각이다.
2. 문제 풀이

페이지에 접속하면 간단한 화면이 출력된다.

먼저 제공된 파이썬 파일을 확인해봤더니, guest, user, admin 총 3가지 계정이 존재하며, admin은 FLAG를 부여한다. session_id와 session_storage를 잘 보면 urandom(4)와 urandom(1)의 존재를 확인 가능하다. 아무래도 session과 연관된 부분일거라고 생각이 된다. 로그인을 먼저 해보면 대략 감이 잡힐 듯 싶다.



3번정도 시도해봤을 때, urandom(4).hex는 16진수의 8자리 문자열을 무작위로 생성해낸다는 결과를 얻었다.

혹시 모르니 저번에 풀어본 session-basic처럼 /admin 경로에 힌트가 있을까 했지만 역시나 없었다. urandom(4).hex가 16진수로 8자리를 나타내는 무작위 문자열이니, urandom(1).hex는 16진수 2자리, 즉 256가지 중에 하나라고 생각이 든다. 이는 Burp Suite라는 툴을 이용하여 간단히 Brute force로 해결될 것으로 판단된다.

Burp Suite의 Proxy 부분에서 session id를 다시 한번 확인했을 때, 기존의 3번 시도와 또 다른 무작위 16진수의 난수가 생성되었음을 확인한다. 이 Request의 내용을 Intruder로 옮긴다.

옮긴 Request 내용의 Cookie sessionid부분에 Positions를 Add한다.

그 이후 Payloads의 type을 Brute forcer로 바꾸고, 16진수기 때문에 0-9, a-f까지 작성해주고, 앞에서 생각했듯 2자리 수가 필요하기 때문에 Min과 Max 모두 2로 설정해준다.

Start attack을 통해 열심히 돌리다보면 대부분은 같은 값을 Response해주지만, 홀로 Length가 다른 Payload가 존잰=한다. f4 Payload가 admin의 session id일 가능성이 높다.

session id의 value를 f4로 변경해주고 새로고침하면, 위와 같이 정상적으로 flag가 출력됨을 확인할 수 있다.
3. 정리
Burp Suite를 써야하는 귀찮음이 있지만(Python으로도 반복문과 requests를 사용하면 충분히 가능할 듯 싶다.) Brute force attack에 대해 약간 확인해볼 수 있는 좋은 문제이다.
'컴퓨터 > Dreamhack' 카테고리의 다른 글
| Dreamhack ex-reg-ex 문제 풀이 (0) | 2025.12.31 |
|---|---|
| Dreamhack phpreg 문제 풀이 (0) | 2025.12.31 |
| Dreamhack Flying Chars 문제 풀이 (0) | 2025.12.30 |
| Dreamhack php7cmp4re 문제 풀이 (0) | 2025.12.30 |
| Dreamhack simple-web-request 문제 풀이 (0) | 2025.12.30 |
댓글