5개의 경로가 존재한다.
- '/' => 일반적인 시작 페이지이다.
- '/vuln' => XSS 취약점이 발생하는 페이지이다.
- '/flag' => parameter 를 입력받고, check_csrf와 read_url 함수를 통해 local host의 /vuln 페이지에서 parameter를 입력받아 접속 하게하는 페이지이다.
- '/login' => username과 password를 입력받아서 로그인하는 페이지이다.
- '/change_password' => pw와 sessionid를 받아서 비밀번호를 바꾸는 페이지이다.
/vuln 페이지를 자세히 보면
몇 개의 단어를 쓰지 못하고, 그외의 XSS 가 가능하다.
@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
또한, /change_password는
@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'
admin 의 권한으로 pw를 내가 원하는 값으로 바꾸면 된다.
/flag 페이지에서 admin의 /vuln을 통해 /change_password로 가서 pw를 바꾸면 된다.
<img src="/change_password?pw=saneo">
'Dream hack > LEVEL 1' 카테고리의 다른 글
Dreamhack (image-storage) (0) | 2023.03.27 |
---|---|
Dreamhack (Carve Party) (0) | 2023.03.26 |
Dreamhack (command-injection-1) (0) | 2023.03.24 |
Dreamhack (xss-2) (0) | 2023.03.24 |
Dreamhack (csrf-1) (0) | 2023.03.23 |