본문 바로가기

Security

[wargame] cookie

반응형

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

 

cookie

쿠키로 인증 상태를 관리하는 간단한 로그인 서비스입니다. admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다. Reference Introduction of Webhacking

dreamhack.io

app.py
0.00MB

#!/usr/bin/python3
from flask import Flask, request, render_template, make_response, redirect, url_for

app = Flask(__name__)

try:
    FLAG = open('./flag.txt', 'r').read()
except:
    FLAG = '[**FLAG**]'

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

@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')

@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)

 

pw는 users 에서 뽑아오므로 우선 guest 계정의 패스워드를 알 수 있다.

guest 계정으로 로그인 후

관리자 도구에서 쿠키 정보를 확인한다.

username 키 값에 guest 값이 저장되어 있는 것을 확인할 수 있다.

쿠키는 인증 후에 username에 ID를 저장 후에 이를 통해 인증을 패스하고, 쿠키 값은 브라우저에서 관리하므로 수정이 가능하다.

세션은 서버에서 저장되고 세션키만 쿠키에 저장되므로 ID값을 통해 변경해보는 시도가 의미없지만 쿠키는 가능.

admin 값을 넣어본다.

새로고침 하면

 

성공!

반응형

'Security' 카테고리의 다른 글

[Webhacking] client-side basic  (0) 2021.09.17
[wargame] strcmp  (0) 2021.09.17
[Webhacking] (cookie, session)  (0) 2021.09.16
[Webhacking] 기초 지식  (0) 2021.09.16
Mysql 데이터베이스 해킹 흔적 패킷 분석  (0) 2020.09.08