[Dreamhack Web - Lv 1] csrf-2

문제 정보

여러 기능과 입력받은 URL을 확인하는 봇이 구현된 서비스입니다.

CSRF 취약점을 이용해 플래그를 획득하세요.

풀이 힌트

1. 공격 백터 파악

2. 코드 분석 또는 웹 스파이터를 통해 숨겨진 파라미터 파악

문제 풀이

더보기

문제 페이지에 접속하니 위와 같은 사이트가 나왔다.
전에 풀었던 CSRF-1은 로그인 기능은 없었는데, 이번 문제에선 있는 것을 봐서 사용자의 계정에 관련한 공격을 진행하는 것으로 보인다.

 

일단 공격 백터에 대해서 조사해보겠다.

  • vuln(csrt) 페이지
    Get 메소드로 param 파라미터에 입력값을 넣으면 페이지에 그대로 적용되는 페이지가 나왔다.

    공격 백터 : Get 메소드 param 파라미터

  • flag 페이지
    저번 문제처럼 입력값을 넣으면 셀레리움을 이용하여 vuln 페이지에 전달하는 페이지인 것 같다.

    Post 메소드로 값을 전달하고 있다. 그리고 제출 버튼을 클릭하면 good이라는 alert창이 뜨는 것을 볼 수 있었다.

    넘겨주는 값을 확인해보니, param 파라미터로 넘겨주고 있었다.

    공격 백터 : Post 메소드 param 파라미터

  • login 페이지
    해당 페이지는 로그인 기능을 수행하는 페이지로 보인다.

    guest / guest로 로그인을 시도해보니, 성공하였다.

    넘겨주는 파라미터를 살펴보니, username과 password 파라미터가 있었다.

    공격 백터 : Post 메소드 username, password 파라미터

나는 일단 vuln 페이지의 param 파라미터에 Xss 코드를 삽입하여 공격이 가능한지 확인하였다.

 

Xss 코드가 잘 먹히는 것을 알 수 있었다. 하지만 어디로 공격을 시도해야하는지 잘 모르겠다.
아마도 숨겨진 페이지가 있는 것으로 보인데, 나에겐 웹 스파이더 툴이 없어서 그냥 코드를 확인하도록 하겠다.

 

확인해본 결과, password를 변경할 수 있는 페이지가 따로 있는 것으로 보인다.
코드를 보면 Get 메소드로 pw 파라미터를 넘겨받고 세션으로 username을 찾아서 해당 username의 pw을 pw 파라미터로 변경한다.

이것을 이용하여 flag 페이지에 change_password 페이지를 요청하여 admin의 pw를 변경하면 될 듯 싶다.
왜 이렇게 생각한 이유는 flag 페이지에서 실행되는 세션은 admin의 세션이기 때문이다.

 

<img src="/change_password?pw=lrtk">

CSRF 공격을 시도하여, admin의 패스워드를 lrtk으로 변경하였다.

 

admin / lrtk 으로 로그인을 시도하니, admin으로 로그인할 수 있었다.
admin 로그인 성공 후 index 페이지에서 flag를 확인할 수 있다.

 

'Wargame > Dreamhack' 카테고리의 다른 글

[Dreamhack Web - Lv 2] simple-ssti  (0) 2021.12.01
[Dreamhack Web - Lv 1] Tomcat Manager  (0) 2021.11.24
[Dreamhack Web - Lv 1] xss-2  (0) 2021.11.14
[Dreamhack Web - Lv 1] devtools-sources  (0) 2021.11.13
[Dreamhack Web - Lv 1] session  (0) 2021.11.12