본문 바로가기

Web

[Dreamhack] csrf-1

목표 : CSRF를 통해 관리자 계정으로 특정 기능을 실행시키기

 

/vuln

- 이용자가 입력한 param 파라미터 값을 출력함

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

-> XSS가 발생할 수 있는 키워드를 필터링함

-> 취약점) 하지만, 필터링 키워드 이외의 꺽쇠 <, >를 포함한 다른 키워드와 태그는 사용 가능하므로 CSRF 공격 가능

 

 

 

/memo

- 이용자가 메모를 남길 수 있으며, 작성한 메모를 출력함

- 이용자가 전달한 memo 파라미터 값을 기록하고, render_template 함수를 통해 출력함

 

 

 

/admin/notice_flag

- 메모에 FLAG를 작성하는 기능.

- 이 기능은 로컬호스트(127.0.0.1)에서 접속해야 하고, 사이트 관리자(userid 파라미터가 admin)만 사용 가능함.

- 위의 두 조건을 만족하지 못하면 접근 제한 메시지 출력

- 일반 유저의 IP가 자신의 컴퓨터를 의미하는 로컬호스트 IP가 되는 것은 불가능하기 때문에, 이 페이지에 접근하는 것만으로는 플래그 획득 불가함.

* 로컬호스트 = 자기자신의 컴퓨터 (IPv4 - 127.0.0.1)

 

 

 

/flag

- 전달된 URL에 임의 이용자가 접속하게끔 한다.

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

- check_csrf 함수는 인자를 다시 CSRF 취약점이 발생하는 URL의 파라미터로 설정하고, read_url 함수를 이용해 방문한다.

- 이 때 방문하는 URL은 서버가 동작하고 있는 로컬호스트의 이용자가 방문하는 시나리오이기 때문에 127.0.0.1의 호스트로 접속하게 된다. read_url 함수는 셀레늄을 이용해 URL을 방문한다. 

 

 

 

익스플로잇

 

/vuln 페이지에서 CSRF 공격이 가능함.

-> 따라서 공격 코드가 삽입된 /vuln 페이지를 다른 이용자가 방문할 경우, 의도하지 않은 페이지로 요청을 전송하는 익스플로잇을 구상해야 함 !

 

플래그를 얻기 위해서는 /admin/notice_flag 페이지를 로컬호스트에서 접근해야 함

-> CSRF 공격으로 /vuln 페이지를 방문하는 로컬호스트 이용자가 /admin/notice_flag 페이지로 요청을 전송하도록 공격 코드를 작성해야 함 !

 

/flag 페이지를 이용해서 로컬 호스트 환경의 이용자가 임의 페이지를 방문하게 해야 한다.

 

※ 테스트베드 생성

HTTP 응답을 받을 웹 서버가 필요함

-> 드림핵 툴즈 서비스의 Request Bin 이용

   -> 랜덤한 URL 제공, 제공된 URL에 대해 이용자의 접속 기록을 저장하기 때문에 XSS, CSRF 공격을 테스트하기 좋음

 

 

 


 

 

 

첫 화면
vuln(csrf) page

 

우선, CSRF 취약점 발생 여부를 확인해본다.

<img> 태그를 사용해 테스트베드 URL에 접속하는 공격 코드를 작성한 뒤,

취약점이 발생하는 페이지에 해당 코드를 삽입한다.

공격 코드에 의해 이미지가 화면에 출력되었으며, 생성한 테스트베드에 요청이 온 것을 볼 수 있다.

 

 

 

memo

 

 

 

/admin/notice_flag

 

 

 

flag

 

 

 

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

-> userid 파라미터가 admin인지 검사하는 부분 고려한 문자열 포함한 공격 코드 작성

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

위와 같이 flag 페이지에서 공격 코드를 성공적으로 전송하면, 로컬호스트에서

http://127.0.0.1:8000/vuln?param=<img src="/admin/notice_flag?userid=admin"/> 에 접속하게 된다.

 

 

 

memo 페이지를 보면, 관리자가 /admin/notice_flag 페이지를 방문한 것을 확인할 수 있다.

 

 

 

정리

- 일반 유저가 아닌 로컬호스트의 이용자만 실행할 수 있는 기능을 해당 이용자의 의도와는 무관하게 실행하도록 하는 것에 대해 성공함.

- 이외에도, 게시판 서비스에서 공격자가 특정 글을 공지사항으로 업로드하거나, 삭제하는 등의 기능을 실행할 수도 있으며, 공격자의 계정을 게시판 관리자로 승격시키는 등의 행위로도 응용할 수 있다.

 

https://dreamhack.io/

 

해커들의 놀이터, Dreamhack

해킹과 보안에 대한 공부를 하고 싶은 학생, 안전한 코드를 작성하고 싶은 개발자, 보안 지식과 실력을 업그레이드 시키고 싶은 보안 전문가까지 함께 공부하고 연습하며 지식을 나누고 실력 향

dreamhack.io

'Web' 카테고리의 다른 글

웹 보안 (5, 6주차 - PHP 실습)  (0) 2022.04.05
[Dreamhack] csrf-2  (0) 2022.02.13
[Dreamhack] Web Hacking STAGE 5 (CSRF)  (0) 2022.02.07
[Dreamhack] xss-2  (0) 2022.02.06
[Dreamhack] Web Hacking STAGE 4 (XSS)  (0) 2022.01.30