웹해킹 문제 풀이 - CSRF

배재현·2025년 4월 10일

정보 보안

목록 보기
6/12

Dreamhack CSRF-1

문제 바로가기

문제 개요

이전에 XSS 문제와 비슷하게 생긴 사이트이고, 똑같이 flag 페이지를 이용해서 memo에 flag를 띄우면 된다.(자세한 설명은 보안 문제 풀이 3 참고)

  • notice flag: flag를 주는 페이지이다. 하지만 그냥 접속하면 Access Denied가 떠서 flag를 얻을 수 없다.

해결 방법

flag를 얻기 위해서 다음과 같이 생각을 해봤다.

  1. notice_admin_flag는 domain이 127.0.0.1 이고, 파라미터에 userid=admin 이어야만 flag를 보여줌 -> 셀레니움에서 127.0.0.1로 보냄
  2. memo_text에다가 flag를 넣는데, 이건 전역변수기 때문에 그냥 memo에서도 똑같이 씀
  3. 그러니까 notice_admin_flag를 한번 실행 시킨 다음에 memo를 실행시키면 flag를 얻을 수 있지 않을까

하지만 vuln 페이지에서 XSS 문제와는 다르게 JavaScript를 실행할 수 있는 키워드들을 모두 필터링한다는 문제가 있었다.

이렇게 script, frame, on이라는 키워드가 들어가면 모두 *로 처리해버린다.
그래서 XSS-2 처럼 <img>를 이용하기로 했다. 하지만 onerror도 막히기 때문에 사용할 수 없다. 그래서 src를 /admin/notice_flag로 설정해서 이미지 소스를 불러오면서 admin_notice_flag()를 실행시켜 memo_text에 flag를 저장하는 방식으로 해결할 수 있었다.

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

Dreamhack CSRF-2

문제 바로가기

문제 개요

CSRF-1 문제에서 로그인이 생겼다. admin으로 로그인하면 홈화면에서 FLAG를 출력한다. 하지만 어드민 비번이 FLAG이기 때문에 알 수가 없다.

해결 방법

flag 페이지를 통해 셀레니움으로 요청을 하면 sessionId를 admin으로 바꿔서 vuln 페이지에 접속한다. 따라서 admin으로 로그인한 상태에서 change_password()를 호출해서 우리가 아는 비밀번호로 바꿔서 로그인하면 된다.

<img src='/change_password?pw=1234'>
profile
많관부

0개의 댓글