-
[Dreamhack] sessionweb웹/Dreamhack wargame 2022. 7. 26. 13:27
이번에도 로드맵을 참고해서 풀어봤다.
Background: Cookie & Session | Dreamhack
문제에서 제공하는 app.py의 일부분이다.
세션아이디가 할당되는 부분을 보면, hex값으로 설정되는 것으로 추측해볼 수 있다.
def login(): if request.method == 'GET': return render_template('login.html') elif request.method == 'POST': username = request.form.get('username') password = request.form.get('password') try: pw = users[username] except: return '<script>alert("not found user");history.go(-1);</script>' if pw == password: resp = make_response(redirect(url_for('index')) ) session_id = os.urandom(4).hex() #4byte의 무작위 값을 hex로 형변환하여 session_id에 저장 session_storage[session_id] = username resp.set_cookie('sessionid', session_id) return resp return '<script>alert("wrong password");history.go(-1);</script>'
session_storage[os.urandom(1).hex()] = 'admin' #admin의 세션아이디는 이미 정의가 되어 있다
그런데 이미 설정되어있는 admin의 세션아이디는 1Byte짜리로 다른 사용자들과 길이가 다름을 알 수 있다.
프록시 설정을 켠 후
문제 페이지에 접속하면 burp suite에서 get요청이 들어온 것을 확인할 수 있다.
우클릭하면 나오는 send to intruder을 선택해서 무차별 공격을 시도했을 때, length가 다른하나를 찾을 수 있었다.
<p class="important"> Welcome ! </p> <h3> Hello admin, flag is DH{73b3a0ebf47fd6f68ce623853c1d4f138ad91712} </h3>
다음과 같이 플래그를 획득할 수 있다.
'web웹 > Dreamhack wargame' 카테고리의 다른 글
[Dreamhack] web-ssrf (0) 2022.08.16 [Dreamhack] XSS-1 (0) 2022.08.02 [Dreamhack] session-basic (0) 2022.07.26 [Dreamhack] error based sql injection(+문제해결 완) (0) 2022.07.14