-
이번 문제의 경우 admin 계정으로 로그인하여 FLAG를 획득하는 문제이다.
문제 파일을 다운로드 후 분석을 진행한다.
[문제 풀이]
1. 문제 파일 분석

해당 코드들을 통해 users 딕셔너리에 guest, user, 그리고 admin id에 대한 비밀번호가 지정되어 있는 것을 확인 할 수 있다.

또한 세션 id를 4바이트 난수로 생성 후 16진수로 변환하여 session_storage에 저장하는 것을 확인 가능하다.
하지만 아래를 확인하면 이상한 점을 찾을 수 있다.

바로 로그인 계정이 admin일 경우 1바이트 난수 생성 후 16진수로 변환하여 session_storage에 저장한다는 것이다.
1바이트는 8비트이다. 그렇기에 admin 계정의 session id 경우의 수는 256개이다.
이정도 수는 브루트포스가 가능하다.
브루트포스는 두 가지 방법으로 가능하다
첫번째는 Burp Suite를 이용한 방법, 두번째는 파이썬 코드를 이용한 방법이다.
2. Exploit 1
우선은 계정을 알고 있는 guest로 로그인을 시도한다.
로그인 요청을 POST 방식으로 서버에 보내고 성공하여 302 리다이렉트가되며 아래와 같은 요청을 인터셉트 할 수 있다.

위와 같이 session id가 부여된 상태에서 해당 요청을 Intruder 기능으로 보낸 후 페이로드 세팅을 아래와 같이 해준다.


Cookie의 sessionid 의 값이 $로 둘러쌓여 해당 부분에 페이로드가 대입되도록 설정한 후 attack을 시작한다.
공격을 확인하다보면 아래와 같이 반환 길이가 다른 응답을 확인 가능하다.

이때 Response를 눌러 확인 시 FLAG 값 확인이 가능하다.

3. Exploit 3
파이썬을 이용하는 방법으로 request 모듈을 이용하는 방법이다.
이 방법은 직접 코드를 구현해야한다.

이때 위와 같이 POST 요청을 하면 결과가 나오지 않는 것을 확인 가능한데 이는 / 경로에서 POST가 허용되지 않은 메소드이기 떄문이다.

그렇기에 GET 메소드로 변환 후 다시 시도 시 정상적으로 FLAG 값 획득이 가능하다.

'개인공부 > 드림핵' 카테고리의 다른 글
abcdefg-who (0) 2024.12.23 Grand Theft Auto (0) 2024.12.22 Find The Lost Flag (0) 2024.12.21 Carve Party (0) 2024.12.09 web-misconf-1 (0) 2024.12.08