본문 바로가기

Dream hack/LEVEL 1

Dreamhack (csrf-2)

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">

 

<img> tag는 필터링 되지 않는다.

 

'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