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

웹 서버에 접속해 보자



/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}
'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 |