본문 바로가기

웹해킹

드림핵 cookie 롸업

<문제>

쿠키로 인증 상태를 관리하는 간단한 로그인 서비스입니다.
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