Dreamhack

[Dreamhack] session-basic Write-Up

jeff_kim 2024. 3. 16. 03:28

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

 

session-basic

Description 쿠키와 세션으로 인증 상태를 관리하는 간단한 로그인 서비스입니다. admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다. 플래그 형식은 DH{...} 입니다. Reference Background: Cook

dreamhack.io

 

문제 


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


 



풀이

 

 

1. 취약점 파악

@app.route('/admin')
def admin():
    # developer's note: review below commented code and uncomment it (TODO)

    #session_id = request.cookies.get('sessionid', None)
    #username = session_storage[session_id]
    #if username != 'admin':
    #    return render_template('index.html')

    return session_storage


if __name__ == '__main__':
    import os
    # create admin sessionid and save it to our storage
    # and also you cannot reveal admin's sesseionid by brute forcing!!! haha
    session_storage[os.urandom(32).hex()] = 'admin'
    print(session_storage)
    app.run(host='0.0.0.0', port=8000)

 

이전에 풀었던 cookie 문제와 코드는 비슷한데 새로 추가된 다른 가장 중요한 취약점이라고 생각되어 위 코드 부분만 설명하고 바로 exploit 하겠습니다

  • cookie는 클라이언트가 인증을 하는 것이고 session은 서버에서 인증하는 것을 준다고 생각하면 쉽다
  • admin의 session 생성에 대해선 os.urandom(32).hex()를 통해서 무작위 랜덤 값이 생성되고 username이 admin인 세션 정보를 session_storage에 추가된다
  • 이 session_storage의 정보를 조회 할 수 있다면 무작위로 생성된 값을 계산하거나 어렵게 하지 않고, sessionid 값을 바로 획득가능하다
  • @app.route('/admin') 부분을 보면 /admin 라는 엔드포인트로 접근이 가능하다는 것인데 return 값으로 session_strorage 라고 나와있다 
  • 원래는 admin 권한을 가지고 있는 사용자만 접속이 가능한데 주석처리가 되어있으므로 누구든지 들어갈 수 있게 되었다
  • 그렇다면 주소창 끝에 /admin을 넣어 보면 뭔가 나오지 않을까!!
  • 이렇게 취약점을 찾았고 이제는 exploit을 해보자

 

2. exploit

그리고 cookie 와 동일하게 guest라는 id도 있고, 새로 추가된 user라는 id도 있으니 참고해서 사용하면 좋을 듯 하다

 

우선 guest user로 로그인해서 동작 확인을 하고 sessionid를 잘 만들어 주는지 확인한다

 

이후 취약점에서 파악 했던 /admin을 주소창에 추가한다

 

빙고!! admin의 sessionid 값이 session_storage에 저장이 되어있다

 

저 sessionid와 username을 검사 application에서 수정 및 추가해준다

 

추가 해준 뒤에 새로고침을 하면 admin으로 로그인이 되고 flag를 획득 할 수 있게 된다

 

 

 

 

FLAG

DH{8f3d86d1134c26fedf7c4c3ecd563aae3da98d5c}

'Dreamhack' 카테고리의 다른 글

[Dreamhack] Carve_Party WriteUp  (0) 2024.06.11
[Dreamhack] xss-1 Write-Up  (0) 2024.03.18
[Dreamhack] cookie Write-Up  (1) 2024.03.16
[Dreamhack] phpreq Write-Up  (2) 2024.03.15
[Dreamhack] ex-req-ex Write-Up  (2) 2024.03.15