문제 접속 페이지에 들어가면 아래와 같이 메인 화면이 구성되어 있다.
첫번째 vuln(csrf) page를 들어가보니 다음과 같은 형태로 되어 있는 것을 볼 수 있었다.
다음 메모 카테고리에서도 이전 문제와 동일하게 'hello'가 출력되고 있지만 이 문제에서는 앞서 나온 문제와 달리, 줄바꿈을 하고 있지 않는 것을 볼 수 있다.
다음으로 'notice flag' 부분에 들어가니 아래와 같이 접근이 거부되었다는 것을 볼 수 있었고,
마지막으로 'flag' 부분에서 파라미터 값을 넣어 플래그 값을 얻을 수 있다.
이제 제공된 소스코드를 확인해보자.
먼저 vuln 부분에 대한 코드를 살펴보면 XSS 필터링을 하고 있다. csrf 파라미터로 전달된 값에서 frame, script, on 을 *로 치환하는 필터링이 존재한다. 즉 xss 취약점은 사용하지 못하므로 img 태그의 src 속성을 이용하여 해결할 수 있을 것 같다.
memo 페이지는 memo 파라미터로 전달된 값에서 < 를 < 로 치환하는 필터링이 존재한다.
notice flag 페이지는 접속 요청 사용자의 ip 주소가 127.0.0.1이면 Access Denied 문자열을 출력하고 userid 파라미터 값이 admin이 아니면 Your not admin 문자열을 출력한다. ip 주소가 127.0.0.1이고, userid가 admin이면 memo에 flag를 작성한다.
flag 페이지는 csrf 파라미터 값을 전달하고, read_url(csrf) 함수가 정상 동작한다면 good 문자열을 출력한다. read_url(csrf) 함수가 정상 동작하지 않으면, worng 문자열을 출력한다.
따라서 최종적으로 관리자가 /admin/notice_flag 페이지에 접속할 수 있도록 해야하므로 CSRF 취약점을 활용해서 링크 상에서 넘겨줄 수 있도록 파라미터 값을 아래와 같이 넣어줄 수 있다.
<img src="http://localhost:8000/admin/notice_flag?userid=admin">
파라미터 값을 넣고 제출하니 memo 페이지에서 플래그 값을 확인할 수 있었다!!
'CTF' 카테고리의 다른 글
[Dreamhack] command-injection-chatgpt write-up (1) | 2023.11.21 |
---|---|
[Dreamhack] csrf-2 write-up (0) | 2023.11.15 |
[Dreamhack] XSS Filtering Bypass write-up (0) | 2023.11.15 |
[Webhacking.kr] old-23 write-up (0) | 2023.11.14 |
[Dreamhack] xss-2 write-up (0) | 2023.11.04 |