[Dreamhack] csrf-1 풀이

minkyung·2023년 6월 5일
0

Dreamhack

목록 보기
3/6

csrf 공격을 통해 관리자의 권한을 탈취하여 악용하는 문제!

강의가 있어서 보고 푸니 수월 했다.

🔎 csrf-1 분석

먼저 xss 문제와 거의 비슷한 화면
이번에는 notice flag 라는 페이지가 추가됐다.

notice flag 페이지에 들어가니 주소가 admin/notice_flag로 바뀐 것을 볼 수 있다.

이 페이지가 admin만 접속할 수 있는 그런 페이지인 듯 하다.

💻 소스코드 분석

vuln() :

여기에서 새로운 filter를 볼 수 있다.
frame, script, on 이 세 개의 문자열이 들어가면 *로 치환이 되도록 함수가 작성되었다. 즉, script, frame, on을 피해서 expoit을 작성해주자.

flag():

flag는 이전 문제들과 비슷한데 제출 버튼을 누르면 param 값을 인자로 하여 check_csrf 함수를 실행한다. check_csrf 함수를 살펴보자.

check_csrf():

param 값과 cookie 값을 받는다.
url을 127.0.0.1:8000, 로컬호스트의 페이지로 접속을 하고 vuln 페이지로 설정한다.
그 후 read_url 함수에 url값과 cookie 값을 넘겨준다.

read_url():

웹 드라이버로 크롬을 연다.
get 함수로 로컬호스트로 접속을 한다.
그 후 cookie를 추가하고
다시 get 함수로 우리가 입력한 param이 들어있는 url에 접속을 한다.

사실 cookie값은 여기서 중요하지 않고, 이때 어떤 param을 입력하여 어떠한 url에 접속할지가 중요한데 코드에서 FLAG가 저장된 부분을 찾아보자.

admin_notice_flag():

이 함수에서 조건을 만족할 경우 memo_text 에 flag 를 추가하도록 하고있다.
조건은 두가지인데 먼저 접속 ip가 로컬 호스트 ip 인지, userid 값이 admin 인지를 확인하고 있다.

우리는 param 값으로 127.0.0.1:8000 ip로 접속을 하면서 userid=admin 으로 접속을 하도록 하는 공격문을 작성해주면 된다.

memo():

memo 값을 받아와서 그대로 화면에 출력해준다.
전의 문제들과 조금 다른 점은 memo 값은 global로 선언되어있고, text 변수를 따로 만들어서 계속 이어붙이는 형식.
memo 페이지에 들어가면 주소에 memo 가 hello라고 입력되어 있으므로
접속할 때마다 hello가 계속 늘어난다.

📒 해답

script, frame, on 이 막혀있으므로 다른 태그를 사용해보자.

img 태그를 사용하여 src로 우리가 원하는 공격 링크를 삽입하고 그 링크에 접속하도록 할 것이다.

<img src="http://127.0.0.1:8000/admin/notice_flag?userid=admin">

라고 입력해주자.

제출을 누르고 memo 페이지에 들어가보면 flag가 적혀서 출력된다!
성공 🌟

profile
개발/보안 기록용

0개의 댓글