본문 바로가기

Wargame

[Dream Hack] Cookie 풀이

반응형

이번 문제는 저번 session-basic 문제와 아주 흡사하므로 이해가 어렵다면 저번 게시글을 참조하면 좋다.

2022.09.01 - [Web hacking] - [Dream Hack] session-basic 풀이

 

[Dream Hack] session-basic 풀이

쿠키와 세션을 학습한 이후 바로 문제가 주어진다. 우리는 세션 하이재킹을 이용할 것이라고 미리 짐작할 수 있다. 문제 분석 문제 설명에서는 admin 계정으로 로그인 시 플래그를 얻을 수 있다고

taesam.tistory.com


문제 분석

우리는 이전 문제와 같이 웹페이지와 파이썬 파일 하나를 받았다.

 

웹 페이지를 확인해보자.

역시나 로그인 기능이 포함된 간단한 웹 페이지임을 확인할 수 있다.

 

app.py 파일을 확인해보자. (불필요한 부분은 생략하였다.)

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

우리는 users 를 통하여 어떤 계정이 존재하는 지 확인할 수 있다.

@app.route('/')
def index():
    username = request.cookies.get('username', None)
    if username:
        return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "admin" else "you are not admin"}')
    return render_template('index.html')

코드를 보면 username이라는 쿠키 값을 얻어 username 변수에 저장하고 username == "admin"일 시 플래그를 얻을 수 있다. 

헷갈릴 수 있으나 쿠키의 키 usernameusername 변수는 다르다는 것을 알고 있자.

@app.route('/login', methods=['GET', 'POST'])
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')) )
            resp.set_cookie('username', username) # 핵심
            return resp 
        return '<script>alert("wrong password");history.go(-1);</script>'

app.run(host='0.0.0.0', port=8000)

문제 풀이의 핵심은 이 로그인 페이지에 존재한다. 

간단하게 설명하자면 username과 password를 통해 로그인에 성공하면 해당 username과 똑같은 값을 쿠키로 사용한다는 것이다. 

즉 guest 계정으로 로그인에 성공하게 되면 쿠키의 값은 username : guest 가 된다. 

결론은 admin 계정의 쿠키는 username : admin 이라는 것이다. 


문제 해결

우선 해당 홈페이지에서 guest 계정으로 로그인을 해본다. 위에서 확인했듯이 username = guest / password = guest 이다.

이제 개발자도구 > application 의 쿠키값을 확인해보자.

guest 계정쿠키는 guest인 것을 알 수 있다.

 

이 값을 admin으로 수정하고 새로고침한다.

우리는 쿠키 변조를 통하여 admin 계정을 접속하였으며 플래그를 얻어냈다.

반응형

'Wargame' 카테고리의 다른 글

[Dream Hack] xss-2 풀이  (0) 2022.09.07
[Dream Hack] xss-1 풀이  (0) 2022.09.06
[Dream Hack] session-basic 풀이  (0) 2022.09.01
[Dream Hack] devtools-sources 풀이  (0) 2022.09.01


Calendar
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Visits
Today
Yesterday