본문 바로가기
Wargame/webhacking.kr

webhacking.kr 45번

by morae23 2019. 2. 1.

[SQL Injection]

 

 

45번 문제를 보면 아래와 같은 화면을 볼 수 있다.

 

 



 

 

아래 코드는 index.phps이다.

 

 

 



 

 

solve()를 위해서는 쿼리문의 결과가 admin이어야한다.

필터링 되는 문자들을 보면 id에서 or과 =을 사용할 수 있기 때문에

where id=’’ or id=’admin’ # and pw=md5(‘$_GET[pw]’)

과 같은 방식으로 우회할 수 있을 듯하다.

 

admin이라는 문자열은 입력할 수 없기 때문에

char(97,100,109,105,110)를 이용하면 된다.

 

‘를 입력하는 방법에 대해서도 생각해 봐야 하는데,

위 코드에서 mb_convert_encoding을 이용하기 때문에 이 취약점을 이용하면 된다.

 

 

우선 mb_convert_encoding의 manual을 보면 아래와 같이 나와있다.

 



 

출처: http://php.net/manual/kr/function.mb-convert-encoding.php

 

 

이 코드에서는 인코딩을 utf-8에서 euc-kr로 변경한다.

우리가 입력으로 ‘를 줄 경우 php의 magic_quotes_gpc로 인해 \가 들어간다.

 

이 때, mb_convert_encoding의 취약점을 이용할 수 있다.

멀티 바이트 언어셋 환경에서 \ 앞에 %a1~%fe가 들어가면 두 바이트가 하나의 문자열로 인식된다.

 

즉, 정리하자면 ‘를 입력하면 magic_quotes_gpc에 의해 \’가 된다.

이 때 %a1’을 입력하면 %a1\’가 되는데, %a1\는 하나의 문자로 인식되어

‘가 정상적으로 인식된다는 것이다.

 

 

따라서 우리가 입력해야할 값은

%a1’ or id=char(97,100,109,105,110) #

참고로 공백은 %0a, #은 %23으로 입력하면 된다.

 

아래와 같이 입력하면 clear 된다.

 

 

 






'Wargame > webhacking.kr' 카테고리의 다른 글

webhacking.kr 57번  (0) 2019.02.01
webhacking.kr 55번  (0) 2019.02.01
webhacking.kr 44번  (0) 2019.02.01
webhacking.kr 40번  (0) 2019.02.01
webhacking.kr 33번  (0) 2019.02.01

댓글