본문으로 바로가기

session 문제풀이

category 모의해킹/Dreamhack Wargame 2025. 6. 4. 19:48
728x90

문제 설명

 

쿠키와 세션으로 인증 상태를 관리하는 간단한 로그인 서비스입니다.
admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다.


문제 풀이

 

사이트에 접속해보자.

Welcome!

 

문제 코드에 작성되어있는 guest계정으로 로그인을 시도해보자.

admin이 아니니 flag를 출력해주지 않는다.

문제에서 주어진 것처럼, admin으로 로그인에 성공해야한다.

 

문제 제목이 session인 것처럼, cookie의 session-id를 조작해야할 것만 같은 느낌이 든다.

넘어가서, 코드를 보자.

사이트에 접속하면, 쿠키에서 sessionid를 가져와 session_id에 저장을 한다.

session_storage에서 session_id를 키로 넣어 가져온 값을 username에 저장한다.

근데 여기서 nusername이 admin이면 flag를 출력해준다!

 

그럼 뭐다?

나는 사이트에서 session_id를 조작만 해주면 flag가 나와준다!

이제 문제는 'admin의 session_id를 어떻게 알아내느냐' 이다.

중요한 코드는 이 부분이다.

이 파이썬 스크립트가 실행될 때, 밑에 코드들이 같이 실행된다.

 

1바이트의 난수를 생성하고, 이를 16진수 문자열로 변환한다.

이 값을 Key로 사용하여, admin이라는 값을 session_storage에 저장한다.

 

이 말은 즉, 사이트가 실행될 때 admin의 session_id는 정해진다는 것이다.

심지어 1바이트 난수를 16진수 문자열로 반환하니, 2자리수 밖에 되지 않는다.

브루트포스 공격을 실행하면 얼마 걸리지 않아 admin의 session_id를 찾을 수 있을 것이다.

 

만능 버프스위트를 꺼내보자.

일단 guest로 로그인한 화면을 porxy로 가져온다.

그럼 이런 화면이 뜨는데, 노란색 네모칸에 있는 부분이 guest의 session_id 부분이다.

이 sessionid를 조작해야하니, 쭉 긁어서 intruder로 보내주자.

그러면 이렇게 sessionid 부분이 잘 선택된 것을 볼 수 있다.

위에 Attack type를 Brute forcer로 바꾸고, 설정을 위해 payloads 목록으로 이동한다.

sessionid가 16진수 문자열에 2자리 수이니, 그에 맞게 설정을 바꿔준다.

character set은 0~9, a~f 를 적어주고, 길이는 2로 맞춰준다.

그리고 start attack버튼을 눌러준다.

브루트포스 공격이 진행되는 것을 보고 있다보면, 저렇게 길이가 다른 결과물이 하나 나온다.

payload는 61이니까, admin의 sessionid는 61일 것이다.

사이트에서 개발자 툴을 열고, 쿠기가 있는 곳으로 이동해준다.

원래 다른 문자열이 적혀있는 sessionid 값을 61로 조작해준뒤, 새로고침을 눌러준다.

짜잔!

admin의 sessionid를 통해 admin계정으로 로그인할 수 있었으며, 이를 통해 flag를 가질 수 있게 되었다.

 

'모의해킹 > Dreamhack Wargame' 카테고리의 다른 글

baby-bof 문제풀이  (0) 2025.06.19
php7cmp4re 문제 풀이  (1) 2025.06.17
exersice: SSH 문제풀이  (0) 2025.05.22
simple-web-request 문제 풀이  (0) 2025.05.21
Flying Chars 문제 풀이  (0) 2025.05.20