[1] ๋ฌธ์ ๋ถ์
(1) ์น ํ์ด์ง ๋ถ์
๋ฌธ์ ํ์ด์ง์ ๋ค์ด๊ฐ๋ฉด ๋์ค๋ ํ์ด์ง์ด๋ค.
์์ ํ์ด์ง ๋ชฉ๋ก ์ค์ Home, About ์ ํด๋ฆญํด๋ ๊ฐ์ ํ๋ฉด์ด ๋์จ๋ค.
Login ์ ๋๋ฅด๋ฉด
์์ ๊ฐ์ ํ์ด์ง๊ฐ ๋์จ๋ค.
username์ 1234
password์ 1234๋ฅผ ์ ๋ ฅํ์๋๋ ์์ ๊ฐ์ ๋ฉ์ธ์ง ํ์ ์ฐฝ์ด ๋์๋ค.
๋ฌธ์ ์์ "admin ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ฉด ..." ์ด๋ผ๊ณ ํ๋ ๋ฌธ๊ตฌ๋ฅผ ๋ ์ฌ๋ ค,
username์ admin์,
password์ admin์ ์ ๋ ฅํ์๋ค.
๊ทธ๋ฌ๋๋ "wrong password"๋ผ๋ ๋ฉ์ธ์ง ํ์ ์ฐฝ์ด ๋ํ๋ฌ๋ค.
์๊น๋ "not found user"๋ผ๊ณ ํ๋๋ฐ, ์ด๋ฒ์ ํ๋ฆฐ ํจ์ค์๋๋ผ๋ ์๋ฆผ์ด ๋จ๋ ๊ฑธ๋ก ๋ด์, username์ด admin์ ๋ง๋ ๊ฒ ๊ฐ์๋ค.
(2) ๋ฌธ์ ํ์ผ ๋ถ์
โ๏ธapp.py
#!/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)
๋ค์ด๋ฐ์ app.py ํ์ผ์ด๋ค.
users = {
'guest': 'guest',
'admin': FLAG
}
์์ ๋ถ๋ถ์ ๋ณด๋ฉด username์ guest, password๋ฅผ guest๋ก ๋ก๊ทธ์ธ์ ์๋ํ๋ฉด ๋ ๊ฒ ๊ฐ์๋ค.
guest, guest๋ก ๋ก๊ทธ์ธ์ ์๋ํ๋๋ ์ฑ๊ณตํ๋ค.
์ฟ ํค ๊ฐ์ 'username' ๋ถ๋ถ์ guest๋ผ๋ ๊ฐ์ด ์ ์ฅ๋์ด์๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
@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.py์ ์ผ๋ถ๋ถ์ธ๋ฐ,
/ ํ์ด์ง์์, 'username' ๋ถ๋ถ์์ ์ฟ ํค๋ฅผ ๊ฐ์ ธ์ username์ด๋ผ๋ ๋ณ์์ ๋์ ํ๊ณ ,
๊ทธ username์ ๊ฐ์ด "admin"์ผ ๊ฒฝ์ฐ Hello username flag is FLAG ๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ์ถ๋ ฅํ๋ ๊ฒ์ ์ ์ ์์๋ค.
username์ ๊ฐ์ด "admin"์ด ์๋ ๊ฒฝ์ฐ you are not admin์ด๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ์ถ๋ ฅํ๋ค๊ณ ํ๋ค.
์ค์ ๋ก username์ guest๋ก ํ์ฌ ๋ก๊ทธ์ธ์ ์๋ํ์ ๋, you are not admin์ด๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ / ํ์ด์ง์์ ํ์ธํ ์ ์์๋ค.
๊ทธ๋ ๋ค๋ฉด, username์ ์ ์ฅ๋ ์ฟ ํค ๊ฐ์ admin์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ฒ ๋ค.
์ฟ ํค์ ์์๋ก ๋ฐ๊ฟ์ฃผ์ด flag ๊ฐ์ ํ๋ํ ์ ์์๋ค.
'SWLUG > CTF ๋ฌธ์ ํ์ด (2)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dreamhack/๋๋ฆผํต] php7cmp4re (0) | 2024.04.28 |
---|---|
[Dreamhack/๋๋ฆผํต] Carve Party (0) | 2024.04.01 |
[Dreamhack/๋๋ฆผํต] devtools-sources (0) | 2024.03.30 |
[Dreamhack/๋๋ฆผํต] session (0) | 2024.03.24 |
[CTF] SWLUG CTF :: SSRF Exercise_write up (0) | 2023.11.12 |