<문제>
쿠키로 인증 상태를 관리하는 간단한 로그인 서비스입니다.
admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다.
쿠키를 바꿔서 인증 정보를 속이고 admin 계정으로 로그인해야 하는 것 같다.
문제 파일을 보니 app.py하나로 되어있다.
코드는 단순하게 /와 /login링크로 나누어져 있다.
@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')
여기서 flag를 출력받고 싶으면 username이 admin이면 된다.
username은 cookie에 저장된 값으로 결정된다.
@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>'
login 부분을 보면 패스워드가 맞아야 cookie를 만들어준다.
admin의 패스워드는 모르니 로그인 할 수 없다.
guest로 로그인을 한 뒤에 쿠키의 username를 admin으로 바꾸면 될 것 같다.
guest로 로그인한 뒤 cookie에서 username을 guest에서 admin으로 바꿨다.
사이트를 새로고침 해보니
flag가 나왔다!
'웹해킹' 카테고리의 다른 글
드림핵 xss-2 롸업 (0) | 2023.11.03 |
---|---|
드림핵 xss-1 롸업 (0) | 2023.11.03 |
Cross-Site-Scripting (XSS) (0) | 2023.11.03 |
드림핵 session-basic 롸업 (0) | 2023.11.03 |
드림핵 devtools-sources 롸업 (0) | 2023.11.03 |