이번 문제는 아주 쌈뽕한 친구다. 아주 비기너 단계라고 해놓고 얕잡아봤더니 삽질 좀 하게 했다. 그치만 재밌었다.

비기너 단계라고 떡하니 박혀있는데 이거 개구라다. 내가 봤을 때 비기너들은 이 문제보고 바로 포기하고 자뿌라져 잠이나 잘거다.


그치만 사나이 박원철 세션을 이용한 문제풀이라는것을 알고 있으므로 app.py에 나와있는 로그인 정보로 일단 로그인을 해봤다.
guest일 때와 user일 때 sessionid값을 확인했다.

그럴리는 없겠지만 admin계정에 기본 SQL Injection 코드를 담아서 던져봤는데 개같이 실패했다. 그럼 그렇지 ㅎㅎ

도무지 아이디어가 안떠올라서 한참 삽질하다가(사실 SQL Query 계속 던지고 있었음 ㅋㅋ 이상한데 꽂혀가지구 ㅋㅋ) 차분하게 찬찬히 읽어본 app.py에서 개같은 코드 발견 ㅋㅋ
아니 왜 코드 안읽고 내맘대로 했는지 이해할 수 없지만 문제를 보면 개같이 돌격하는 것을 참을 수 없다. ㅠ
session storage[os.urandom(1).hex()] = 'admin'이라고 하는데
대놓고 admin세션은 os.urandom(1).hex() 요로케 생겼어 라고 광고하는 코드였다.
지금 당장 os.urandom(1).hex() 코드가 어떻게 생겼는지 봐보자. 기본지식이 없어도 걍 해보면 된다. hex가 뭔지 몰라도 상관없다.

미리 설치되어 있던 python에
import os
os.urandom(1).hex() 쳐보니까 져따우로 나온다. 뭐 두글자 조합처럼 보인다는거 여기까지만 알아도 문제를 풀 수 있다.

혹시 모르니까 맨 마지막에 나온놈을 넣어봤지만 개같이 실패했다. 지미씹싸쓰껏

내 칭구 ChatGPT에게 16진수 문자열 배열을 00부터 순차적으로 시작해서 ff까지 256 길이로 생성하고 해당 배열의 값을 하나씩 sessionid에 담아 내 문제 서버에 요청을 보내고 Contents-Length 응답헤더를 읽어오는 파이썬 코드를 짜달라고 했다.
다시 정리하면
1. 16진수 문자열 배열 생성(00부터 ff까지 256개)
2. cookie의 sessionid에 00부터 하나씩 담기
3. 문제서버 URL에 요청하고 응답헤더의 contents-lengths값을 반환한다.

코드 짜다가 오류가 막 갑자기 우수수 쏟아져서 샷건쳤는데 GPT 이칭구가 아직 좀 멍청해서 삽질하고 다듬어가면서 만드는 사이에 서버가 내려갔던 것이었다.

이건 만드는 와중에 sessionid를 봰고 status code를 가져오게 하는건데 여기서 contents length만 가져오게 바꾸면 되는거라 아주 쉬웠다.

열심히 contents length를 가지고 오던 내 파이썬이 "ce" sessionid 값에서 남들(1262)과는 다른 1350 값을 뱉어내는 것을 확인

냉큼 sessionid 값을 ce로 바꾸자 admin으로 로그인 해버렸다.
이로써 절대절대 session은 유추가능한 값이면 안된다는 교훈을 몸소 배웠다.