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 |
댓글