[Dreamhack] session

2022. 7. 26. 13:27web웹/Dreamhack wargame

이번에도 로드맵을 참고해서 풀어봤다.

Background: Cookie & Session | Dreamhack

 

로그인 | Dreamhack

 

dreamhack.io

문제에서 제공하는 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