반응형
https://dreamhack.io/wargame/challenges/6/
#!/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 |