Webhacking.kr 45번 문제풀이

동스토리 ㅣ 2021. 2. 17. 06:22

반응형

안녕하세요.

 

웹 해킹 45번 문제풀이 하겠습니다.

 

 

소스코드를 분석해보면,

 

- addslashes( ) : 문자열에 싱글쿼터( ' ), 더블쿼터( " ) 등 특수문자가 포함되어 있다면 역슬래시( \ )를 붙여 하나의 문자로 인식시키게 하는 함수 ( SQL 인젝션 공격에 대응방안으로 사용되는 함수입니다.)

 

- mb_convert_encoding( ) : 문자 인코딩을 바꿔주는 함수

* mb_convert_encoding(문자열, 바꿀 인코딩, 현재인코딩)

이 문제에서는 euc-kr -> utf-8로 변경해주고 있습니다.

* UTF-8 : 유니코드를 위한 가변길이 문자 인코딩 방식 중 하나

 

- preg_match( ) : 문자열에 특정 문자가 포함되어 있는지 확인하는 함수

이 문제에서는 admin, select, limit, pw, =, <, >를 필터링 하고 있습니다.

 

문제는 위 함수들을 우회해서 id값을 admin으로 출력하면 됩니다.select id from chall45 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}')

 

 

그럼 차례대로 내려와보면,

 

id 값은 addslashes함수로 인하여 싱글쿼터 ( ' ) 앞에 역슬래시( \ ) 가 포함된다.

 

역슬래시가 포함된 id는 utf-8로 인코딩 되어 멀티바이트 사용환경에서 역슬래시( \ ) 앞에 %a1 ~ %fe가 오면 역슬래시와 합쳐서 하나의 문자가 됩니다.

 

따라서 utf-8 환경에서도 %aa%27 같은 (%27은 싱글쿼터) 값을 입력하면, 필터링에 의한 슬래쉬(%5c) 추가 뒤에 %aa%5c%27 에서 %aa%5c가 하나의 문자로 인식되면서 싱글쿼터인 %27이 독립적으로 살아남게 됩니다.

 

멀티바이트 : 2byte 이상의 문자들로 문자를 표현

유니코드 : 모든 문자를 2byte로 표현

 

-> select id from chall45 where id=''%aa' or id ='admin#' and pw=md5('{$_GET['pw']}')

 

그리고 필터링 되던 문자열인

admin을 HEX로 우회하여 0x61646D696E

=를 like

'를 %27

공백을 %20

#을 %23으로 하여

 

-> select id from chall45 where id=''%aa%27%20or%20id%20like%200x61646D696E%23' and pw=md5('{$_GET['pw']}')

 

이를 GET 방식으로 전달해주면

 

 

감사합니다.

반응형

'Hacking > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr 47번 문제풀이  (0) 2021.02.23
Webhacking.kr 46번 문제풀이  (0) 2021.02.19
Webhacking.kr 44번 문제풀이  (0) 2021.02.08
Webhacking.kr 43번 문제풀이  (0) 2021.02.07
Webhacking.kr 42번 문제풀이  (0) 2021.02.05