
CSRF 1과 마찬가지로 문제를 풀기 위해서는, 서버 생성하기 버튼을 클릭하고 문제 파일을 다운로드합니다.

생성된 서버에 들어가 보면 해당 화면이 나타난다는 사실을 알 수 있습니다.
CSRF 1 문제를 풀었을 때와 마찬가지로, 제시되어 있는 각각의 항목들을 클릭해 보도록 하겠습니다.

첫 번째로, vuln(csrf) page의 페이지에 접속하면 해당 화면이 나타난다는 사실을 알 수 있습니다.
CSRF 1에서 알 수 있던 것처럼, 화면을 통해서 1) csrf 페이지에 접속하면 csrf 파라미터(parameter)로 alert(1)를 실행하는 스크립트 구문을 전달하는 것과, 2) 응답 화면에서는 script 구문이 필터링된 것을 볼 수 있었습니다.
두 번째로는 flag 페이지에 접속해 보았습니다.

/flag 페이지는 플래그를 얻기 위한 코드를 삽입하는 곳으로,
csrf 취약점을 발생시킬 수 있는 코드를 찾아 넣으면 된다는 사실을 파악할 수 있었습니다.
마지막으로는 login 페이지에 접속해 보았는데,

해당 화면이 나타난다는 사실을 파악할 수 있었습니다.
CSRF 2의 서버에서는 CSRF 1에서 존재하지 않았던 항목들도 생겨남을 볼 수 있었습니다.
Login 창에서, 계정을 통한 로그인을 하기 위하여 다운로드한 코드를 살펴보았습니다.
해당 코드에서 분석해 본 부분은 첫 번째로 엔드포인트 (@app.route)의 개수입니다.


사진을 통해 알 수 있듯이, 엔트포인트 (@app.route)는 총 “/”, “/vuln”,”/flag”,”/login”,”/change_password” 5개임을 알 수
있었습니다.
그렇다면 두 번째로는, 각각의 다른 엔드포인트들이 어떤 기능을 하고 있는지 살펴보았습니다.
마지막으로 세 번째는, guest와 admin 계정 2개가 존재한다는 코드를 살펴보았습니다.

해당 코드를 살펴본 이유는, Login 창에서 계정을 통해 로그인을 할 때 필요한 부분이었기 때문입니다.

먼저, username과 password에 모두 guest를 입력하여 로그인을 시도해 보았습니다.

로그인을 시도하였더니, 해당 화면이 나타난다는 것을 알 수 있었습니다.
곧 admin(관리자)의 권한으로 로그인을 해야 우리가 얻고자 하는 flag를 얻을 수 있다는 것을 확인할 수 있었습니다.
그렇다면 guest가 아닌, admin(관리자)의 권한으로 로그인을 해야 하는데, 로그인을 하지 못하는 이유를 찾아보았습니다.
그 이유는 코드를 통해서도 알 수 있듯이, 계정의 비밀번호를 알지 못하기 때문입니다.
admin 계정으로 로그인을 하기 위한, 단서는 바로 change_password 엔드 포인트임을 코드를 살펴보며 알 수 있었습니다.
change_password를 통해 알 수 없는 비밀번호를 임의로 변경해서 로그인할 수 있기 때문입니다.
그렇기에 해당 내용을 이용하여,


/change_password? 파라미터(pw)를 입력하여 원하는 임의의 값으로 비밀번호를 url에 요청하여 변경하였습니다.
성공적으로 변경되었다는 화면이 나타났습니다.
하지만 이것은 guest의 password를 바꾼 것이기에, 우리가 원하는 admin의 password를 바꾸기 위해서는 flag 페이지를 이용해야 합니다.
해당 /flag를 통해 해당 페이지에서 post 메서드 요청 시 admin 세션으로 요청한다는 것을 확인할 수 있습니다. 그렇다면 해당 page에서 파라미터를 입력할 경우, admin 세션으로 요청하기 때문에 조건에 맞는 flag를 입력할 경우, 패스워드를 변경할 수 있는 것입니다.
csrt-1에서 사용했던 <img src=" /admin/notice_flag? userid=admin" /> flag에서
csrt-2에서는 조건에 맞게, <img src= "/change_password? pw=1234" /> flag로 수정하였습니다.

수정한 이후에 admin으로 로그인을 시도하였더니,


로그인에 성공하였고, flag 값이 출력되었음을 알 수 있었습니다.

flag 값을 복사하여 입력하면
문제풀이 완 - 료!
'Dreamhack' 카테고리의 다른 글
| [Dreamhack 문제 풀이] _ Mango (0) | 2023.11.10 |
|---|---|
| [Dreamhack 문제 풀이] _ simple_sqli (0) | 2023.11.10 |
| [Dreamhack 문제 풀이] _ CSRF 1 (0) | 2023.11.07 |
| [Dreamhack 문제 풀이] _ xss-2 (0) | 2023.09.24 |
| [Draemhack 문제 풀이] _ xss-1 (0) | 2023.09.23 |