-
[DreamHack] session-basic2022/Write-Ups 2022. 8. 30. 22:46
1팀 정유진
admin 계정으로 로그인에 성공하면 된다고 한다.
해당 웹페이지에 들어가면
로그인 창이 있다.
guest/guest 로 했더니 아니라고 뜬다.
소스코드를 한번 보자!
#!/usr/bin/python3from 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','user': 'user1234','admin': FLAG}
# this is our session storagesession_storage = {}
@app.route('/')def index():session_id = request.cookies.get('sessionid', None)try:# get username from session_storageusername = session_storage[session_id]except KeyError:return render_template('index.html')
return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "admin" else "you are not admin"}')
@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:# you cannot know admin's pwpw = users[username]except:return '<script>alert("not found user");history.go(-1);</script>'if pw == password:resp = make_response(redirect(url_for('index')) )session_id = os.urandom(32).hex()session_storage[session_id] = usernameresp.set_cookie('sessionid', session_id)return respreturn '<script>alert("wrong password");history.go(-1);</script>'
@app.route('/admin')def admin():# what is it? Does this page tell you session?# It is weird... TODO: the developer should add a routine for checking privilegereturn session_storage
if __name__ == '__main__':import os# create admin sessionid and save it to our storage# and also you cannot reveal admin's sesseionid by brute forcing!!! hahasession_storage[os.urandom(32).hex()] = 'admin'print(session_storage)app.run(host='0.0.0.0', port=8000)주소부분에 /admin을 적어주고 새로고침하면
저렇게 admin 세션값이 나온다.
이 값을 가지고
아까 로그인 실패 창에 들어가서 세션 아이디로 넣어준다.
플래그가 나온다.
'2022 > Write-Ups' 카테고리의 다른 글
[CTF-d] 내 친구는 이것이 특별한 것이라며 CTF 전에 사진을 보냈다. 이 문제의 KEY format은 flag{(key)}가 아니다. (0) 2022.08.30 [CTF-d] Three Thieves Threw Trumpets Through Trees (0) 2022.08.30 [ctf-d] Find Key(moon) (0) 2022.08.30 [ctf-d] Find Key(slack) (0) 2022.08.30 [ctf-d] black-hole (0) 2022.08.30