문제 설명
https://dreamhack.io/wargame/challenges/269/
csrf-2
여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다. CSRF 취약점을 이용해 플래그를 획득하세요. Reference Client-side Basic
dreamhack.io
위 사이트에서 해당 문제를 풀 수 있다.
CSRF 취약점을 이용하여 플래그를 획득하면 된다.
login 하라고 한다.
먼저 코드를 분석해보자!!
users = {
'guest': 'guest',
'admin': FLAG
}
user의 id와 password가 주어져있다.
admin의 password는 flag라고 되어있으니 guest로 로그인을 진행한다.
guest로 로그인을 진행하니 admin이 아니라고 한다.
admin으로 로그인을 해야한다.
어떻게 할까? 취약점을 찾아보자.
@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')
users[username] = pw
return 'Done'
app.run(host="0.0.0.0", port=8000)
위 페이지는 change_password 페이지로 pw와 session_id를 매개변수로 받는다. 처음에는 session_id를 변경하여서 접속하려고 했지만 실패하였고 pw를 매개변수로 내가 원하는 값을 넣어 admin의 pw를 내가 원하는 값으로 설정을 하도록 하겠다.
@app.route("/vuln")
def vuln():
param = request.args.get("param", "").lower()
xss_filter = ["frame", "script", "on"]
for _ in xss_filter:
param = param.replace(_, "*")
return param
vuln page를 보면 frame, script, on 이렇게 3가지를 *으로 필터링을 진행한다.
따라서 필터링이 되지 않는 img 태그를 이용하여 공격을 진행할 수 있다.
아래의 payload를 이용하여 공격을 진행하였다.
<img src="/change_password?pw=1234">
비밀번호를 내가 설정한 1234로 로그인을 진행하였다.
admin으로 접속을 성공하였고 flag를 획득 하였다.
'WEB hacking > 드림핵(dreamhack)' 카테고리의 다른 글
드림핵 simple_sqli Write Up (0) | 2023.06.20 |
---|---|
드림핵 simple-web-request Write Up (0) | 2023.04.24 |
드림핵 csrf-1 (Level1) Write up (0) | 2023.04.20 |
드림핵 xss-2 (Level1) Write up (0) | 2023.03.29 |
드림핵 xss-1 (Level1) Write up (0) | 2023.03.25 |