본문 바로가기
개인 공부/WEB

[웹해킹] dreamhack cookie

by 아메리카노와떡볶이 2021. 7. 26.
728x90
dreamhack cookie

dreamhack에서 제공하는 난이도 1짜리 문제이다. 쿠키로 인증 상태를 관리하는 로그인 서비스에 admin 계정으로 로그인하면 flag를 찾을 수 있는 문제라고 한다.

 

문제 풀이

문제를 다운로드 해서 살펴보면,

#!/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)

힌트가 될 만한 부분이 보인다. 우선 db에 저장된 계정이 guest와 admin이 존재한다는 것과 username을 쿠키를 통해 받아온다는 것이 보인다. 그리고 admin으로 로그인 했을때 flag가 출력된다는 것 두가지를 알아냈다.  

 

먼저 guest로 로그인해보자

guest로 로그인했기때문에 플래그가 출력되지 않는다. 쿠키값을 통해 username을 식별하기때문에 쿠키를 확인해보면

username 에 쿠키 값이 guest로 들어가있는것을 볼 수 있다. 따라서 이것을 admin으로 수정시켜주기만 하면

플래그를 얻을 수 있을 것 이다.

 

 

클리어 ! 

728x90

'개인 공부 > WEB' 카테고리의 다른 글

[웹해킹] dreamhack image-storage  (0) 2021.07.26
[웹해킹] dreamhack php-1  (0) 2021.07.26
[웹해킹] sf ctf 제출문제 해설  (0) 2021.07.18
[웹해킹] XSS GAME - LEVEL 6  (0) 2021.07.13
[웹해킹] XSS GAME - LEVEL 5  (0) 2021.07.13

댓글