[Dream Hack] 2. Cookie 문제 풀이
문제
- 해석 : 쿠키로 인증 상태를 관리하는 간단한 로그인 서비스에 대해서 admin 계정으로 로그인에 성공하여 나오는 플래그를 확인
문제 해설
1. 문제 파일을 다운로드하여 분석해본다.
#!/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)
- guest, admin이라는 ID가 있음을 확인
- /login 페이지에서 POST 형식으로 username, password를 받아서 try, except 구문으로 해당 계정이 있는지 없는지를 체크
- username의 db에 있는 pw값이 내가 입력한 password와 같으면 해당 'username'에 해당하는 set_cookie값을 resp로 return한다.
- 우리는 admin의 pw는 모르지만 이에 해당하는 set_cookie 값을 사용하여 flag를 찾을 수 있다.
2. guest로 로그인해보기 (ID:guest / PW:guest)
3. [개발자도구] -> [Application] -> [Cookie]
- Value의 guest값을 admin으로 변경하고 페이지 새로고침
- Flag를 도출할 수 있다.
'Information security' 카테고리의 다른 글
[Dream Hack] xss-1 (0) | 2023.05.15 |
---|---|
[Dream Hack] Same Origin Policy (SOP) (0) | 2023.05.15 |
[Dream Hack] 1. Session-basic (0) | 2023.05.13 |
[Android] 안드로이드 앱 리버싱 준비하기 (0) | 2023.05.10 |
[x32dbg/x64dbg] 레지스터 창 없어져서 30분 동안 바보같이 찾았는데 어이없게 찾은 1초 해결방법 (0) | 2023.05.09 |
댓글