[Web Hacking] CSRF(Cross-Site Request Forgery) 실습

[Web Hacking] CSRF(Cross-Site Request Forgery) 실습

728x90

앞서 포스팅한 [Web Hacking] CSRF(Cross-Site Request Forgery) 취약점을 토대로 실습을 진행해보았다.

CSRF(Cross-Site Request Forgery) 실습

미리 구현한 게시판 환경에서 실습해보도록 하겠다.

[CSRF] Board - Article List

본 웹페이지를 한사랑산악회 게시판이라고 가정, 운영진이 [한사랑산악회] 회비 납부 관련의 건.을 제목으로 한 게시글을 업로드하였다.

[CSRF] Board - View Article

산악회 회원이라면 당연히 위 게시글을 읽어야만 할 것이고, 이후 명시된 바와 같이 기한 내에 30만원을 산악회 계좌번호로 납부할 것이다.

여기서 본 산악회 게시판이 CSRF 기법에 대한 방어가 제대로 갖춰져 있지 않다면 요청을 위조(Request Forgery)하여 해당 게시글을 수정하거나 삭제하는 등 공격자가 행하고자 하는 각종 공격에 취약할 수 밖에 없다.

분석을 위해 hacker 계정으로 게시판에 로그인하고 test 게시글을 작성한 후, 수정 기능을 이용하여 수정 웹페이지인 modify.php의 소스코드를 보도록 하겠다.

table.table2 { border-collapse: separate; border-spacing: 1px; text-align: left; line-height: 1.5; border-top: 1px solid #ccc; margin: 20px 10px; } table.table2 tr { width: 50px; padding: 10px; font-weight: bold; vertical-align: top; border-bottom: 1px solid #ccc; } table.table2 td { width: 100px; padding: 10px; vertical-align: top; border-bottom: 1px solid #ccc; } 게시글 수정하기 작성자 hacker 제목 내용 testing

태그를 통해 modify.php에서 입력받은 데이터를 POST 형식으로 modify_action.php 웹페이지로 전송함으로서 게시글 수정이 발생한다는 것을 파악할 수 있다.

위 소스코드를 참고하여 CSRF 스크립트를 제작하도록 하겠다.

먼저, 태그와 태그를 남겨두고 쓸데 없는 코드들은 모두 지워보았다.

hacker

이제 게시글 수정 시 전송되는 파라미터 등을 스니핑하여 파악하기 위해 웹 프록시 툴인 Burp Suite를 사용하여도 되지만 지난번에 사용했으므로 이번에는 패킷 분석 툴인 Wireshark를 사용하여 분석해보았다.

[Board] 게시글 작성

[Wireshark] 게시글 수정 패킷

위 그림은 게시글을 수정할 때 오가는 패킷이다.

POST 형식으로 /modify_action.php에 작성자(id)와 게시글 제목(title), 게시글 본문(content) 그리고 게시글 번호(number)가 함께 전송되는 것을 확인할 수 있다.

따라서, 형식을 사용하던 게시글 본문(content)을 형식으로 변환하여 다음과 같이 파라미터 형식에 추가한다.

이제 한사랑산악회 계정으로 작성된 [한사랑산악회] 회비 납부 관련의 건. 게시글을 수정해보도록 하겠다.

수정하고자 하는 게시글의 번호(number)는 6으로 세팅하고, 작성자(id)인 한사랑산악회, 게시글 제목(title)인 [한사랑산악회] 회비 납부 관련의 건.은 그대로 두도록 한다.

기존 게시글 본문(content)에 대하여, 산악회 계좌번호를 공격자의 계좌번호로, 납부금액은 기존보다 인상한 금액으로 아래와 같이 변경하려고 한다.

[공격자의 계좌번호로 변경]

OO은행 1234-567-890123 한사랑산악회 → □□은행 0909-090-090123

(※ 예금주명 삭제)

[회비 납부금액 변경]

일금삼십만원정(₩300,000) → 일금오십만원정(₩500,000)

파라미터를 관리자 몰래 전송하기 위해 모든 type은 hidden으로 변경한다.

또한, 태그의 action은 절대경로로 입력하여야 하고, name은 임의로 지정한다.

단, 태그의 onload에 명시된 document와 submit 사이에 동일한 name이 존재하여야 한다.

CSRF 코드를 최종 정리해보면 다음과 같다.

위 코드는 해당 웹페이지 접속과 동시에 CSRF 코드를 수행하도록 한다.

[Board] CSRF 코드 게시

위와 같이 게시판에 최종적인 CSRF 코드를 게시하였고, 본 게시글을 클릭하면 '수정되었습니다.'라는 alert 창과 함께 공격자가 의도한 대로 한사랑산악회 게시글이 수정되는 것을 확인할 수 있다.

[Board] CSRF 공격으로 수정된 게시글 확인

이렇게 CSRF 실습(수정)이 성공적으로 완료되었다.

728x90

from http://hooneee.tistory.com/372 by ccl(A) rewrite - 2021-11-11 19:01:17