[드림핵] 워게임 session 풀이

SCY·2023년 2월 2일
0

dreamhack

목록 보기
11/12

문제

https://dreamhack.io/wargame/challenges/266/

풀이

해결 과정

users = {
    'guest': 'guest',
    'user': 'user1234',
    'admin': FLAG
}

app.py에서 위 코드를 보아 guest와 user, admin 계정이 있음을 확인할 수 있고, guest와 user로 로그인해보았다.

guest 계정으로 로그인 했을 때의 화면과

user 계정으로 로그인 했을 때의 화면이다.

if pw == password:
	resp = make_response(redirect(url_for('index')) )
    session_id = os.urandom(4).hex()
    session_storage[session_id] = username
    resp.set_cookie('sessionid', session_id)
    return resp 

/login 페이지의 위 코드에서 확인할 수 있듯, sessionid는 임의의 4바이트 수로 결정된다. 16진수이므로 8자리로 표현된다.

if __name__ == '__main__':
    import os
    session_storage[os.urandom(1).hex()] = 'admin'
    print(session_storage)
    app.run(host='0.0.0.0', port=8000)

그리고 main 코드에서 admin의 sessionid는 1바이트 수로 설정됨을 알 수 있다. 즉, 16진수로는 2자리로 표현된다. 00부터 FF까지 총 256가지의 경우의 수를 전체 탐색해보면 되므로 Burp Suite 프로그램의 Intruder 기능을 사용했다.

위 캡쳐본에서 알 수 있듯, sessionid가 73일 때만 length가 다르다.

처음에 00000073으로 입력했더니 출력되지 않아 당황했었다.
직접 sessionid에 73을 입력해보니, flag가 출력되었다. 성공!

정답

DH{73b3a0ebf47fd6f68ce623853c1d4f138ad91712}

profile
성장 중독 | 서버, 데이터, 정보 보안을 공부합니다.

0개의 댓글