https://dreamhack.io/wargame/challenges/266
session
쿠키와 세션으로 인증 상태를 관리하는 간단한 로그인 서비스입니다. admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있습니다. Reference Background: Cookie & Session
dreamhack.io
문제 설명보니 admin계정으로 로그인 성공하면 플래그 획득이 가능하다고 한당

로그인으로 들어가 보겠음


admin 계정이면 된다해서 아이디 비번에 둘다 admin 쳐봤는데 password가 틀렸다고 한다.
주어진 문제 파일을 한번 까봤다
#!/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',
    'user': 'user1234',
    'admin': FLAG
}
session_storage = {
}
@app.route('/')
def index():
    session_id = request.cookies.get('sessionid', None)
    try:
        username = 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:
            pw = 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(4).hex()
            session_storage[session_id] = username
            resp.set_cookie('sessionid', session_id)
            return resp 
        return '<script>alert("wrong password");history.go(-1);</script>'
if __name__ == '__main__':
    import os
    session_storage[os.urandom(1).hex()] = 'admin'
    print(session_storage)
    app.run(host='0.0.0.0', port=8000)
코드 보니까 guest 로그인이랑 user 로그인은 아이디 비밀번호 있길래 해봄


일케 뜬다..
맨 아래 if __name__ == '__main__':
쪽 부분 보면 1바이트 길이의 임의의 바이트 생성해서 admin에 매핑하는걸로 보인다. 이게 admin 비번이 될 듯.
1부터 쭉 해보면 되는데 귀찮으니까 버프 스위트 써서 intruder 기능 쓰면 될거같음
https://yenas0.tistory.com/196
[SuNiNaTas(써니나타스)] Write up - 8번
일케 뜬다뭔지 모르겠으니 일단 무지성 admin 해보겠음 엥 할라했는데 pw가 4글자만 쳐짐 개발자 모드 켜봄아이디는 admin같고 password가 0부터 9999숫자인듯,, 다 대입해보면 되긴 할텐데 귀찮으니
yenas0.tistory.com
이 문제에서 쓴 기능이니 방법 참고하면 될거같다.

이거 묶어서 intruder쓰면 된다..

1바이트니 이백오십육개...
length 다른거 찾아서 세션id값 구하고 버프스위트나 개발자도구에서 넣으면 문제는 풀린다.

프록시 돌리면 인터넷 잘 안돼서 실시간으로 글쓰기 귀찮아서 중간이 많이 생략^~^ 엣큥~
8번 문제에 자세히 설명해뒀읍니다.
'학회_공부해요 > 워게임' 카테고리의 다른 글
| [SuNiNaTas(써니나타스)] Write up - 19번 (0) | 2024.08.27 | 
|---|---|
| [SuNiNaTas(써니나타스)] Write up - 18번 (1) | 2024.08.27 | 
| [SuNiNaTas(써니나타스)] Write up - 14번 (0) | 2024.08.06 | 
| [Tool] Jogh the Ripper(존더리퍼) (1) | 2024.08.06 | 
| [Dreamhack(드림핵)] Write up - phpreg (0) | 2024.07.30 |