[CTF] dreamhack - csrf-1

2024. 5. 24. 16:03ㆍWeb/dreamhack

728x90

문제 설명

웹 서버에 접속해 보자

 

/vuln 페이지를 구성하는 코드

코드를 살펴보면, 이용자가 전달한 param 파라미터의 값을 출력한다.

이 때, 이용자의 파라미터에 "frame", "script", "on" 세 가지의 악성 키워드가 포함되어 있으면 이를 '*' 문자로 치환한다

/memo 페이지를 구성하는 코드

코드를 살펴보면, 이용자가 전달한 memo 파라미터 값을 기록하고, render_template 함수를 통해 출력한다

/admin/notice_flag 페이지를 구성하는 코드

페이지 자체는 모두가 접근할 수 있고, userid 파라미터에 admin 값을 넣는 것도 가능하다.

하지만 일반 유저가 해당 페이지에 접근할 때의 IP주소는 조작할 수 없다.

따라서 일반 유저의 IP가 자신의 컴퓨터를 의미하는 로컬호스트 IP가 되는 것은 불가능하기 때문에,

이 페이지에 단순히 접근하는 것 만으로는 플래그를 획득할 수 없다

/flag 페이지를 구성하는 코드

param 파라미터 값을 가져와 check_csrf 함수의 인자로 넣고 호출한다.

check_csrf 함수는 인자를 다시 CSRF 취약점이 발생하는 URL의 파라미터로 설정하고,

read_url 함수를 이용해 방문한다.

이 때 방문하는 URL은 서버가 동작하고 있는 로컬호스트의 이용자가 방문하는 시나리오이기 때문에

127.0.0.1 의 호스트로 접속하게 된다.

read_url 함수는 셀레늄을 이용해 URL을 방문

 

/vuln 기능은 이용자의 입력 값을 페이지에 출력합니다.

이 때 입력값에서 frame, script, on 세 가지의 키워드를 필터링하기 때문에 xss 공격은 불가능 하지만

필터링 키워드 이외의 꺽쇠 (<, >)를 포함한 다른 키워드와 태그는 사용할 수 있기 때문에

CSRF 공격을 수행할 수 있다

 

어떠한 요청도 보내지 않은 상태로 /memo 페이지에 들어가면 hello라는 메모만 기록되어 있다.

로컬호스트에 위치하는 이용자가 /admin/notice_flag 페이지를 방문하도록 해야하기 때문에

아래와 같이 공격 코드를 작성해야 한다.

이때, userid 파라미터가 admin인지 검사하는 부분이 존재하기 때문에 해당 문자열을 포함해야 한다

 

<img src="/admin/notice_flag?userid=admin" />

/flag 페이지에 공격코드 삽입 후

/memo 페이지로 가면 flag값 확인

 

DH{11a230801ad0b80d52b996cbe203e83d}

728x90

'Web > dreamhack' 카테고리의 다른 글

[CTF] dreamhack - simple_sqli  (0) 2024.05.25
[CTF] dreamhack - csrf-2  (0) 2024.05.24
[CTF] dreamhack - xss-2  (0) 2024.05.24
[CTF] dreamhack - xss-1  (0) 2024.05.08
[CTF] dreamhack - session-basic  (0) 2024.05.08