문제 정보
여러 기능과 입력받은 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의 세션이기 때문이다.
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 |
Comment