-
[Webhacking.kr] 45번 풀이Wargame/webhacking.kr (old) 2019. 5. 8. 16:57
SQL Injection 문제이다.
id와 pw가 guest로 초기화되어 있고, 그대로 제출하면 get방식으로 값이 전송되고,
hi guest가 페이지에 출력된다.
index.phps를 보자.
id값이 mb_convert_encoding 함수에 의해 연산된 후 쿼리문에 적용된다.
id와 pw의 값에는 admin, pw 등등의 문자열이 필터링되고, id가 admin이면 문제가 풀린다.
그러나, 쿼리문에서 pw는 md5 함수로 해시화하기 때문에 직접 admin의 pw 값을 알아내는 것은 어렵다.
id 값을 이용하여 SQL Injection을 수행해야 한다.
mb_convert_encoding (string \$str, string \$to_encoding [,
mixed \$from_encoding=mb_internal_encoding() ])
\$from_encoding으로 인코딩된 \$str 문자열을 \$to_encoding으로 암호화
[ mb_convert_encoding ] http://php.net/manual/kr/function.mb-convert-encoding.php
mb_convert_encoding 취약점
멀티 바이트를 사용하는 언어 셋 환경에서 백슬래시 앞에 %a1~%fe의 값이 들어가면
%a1\가 하나의 문자처럼 취급된다.
따라서, magic_quotes_gpc 옵션에 의해 quotes의 입력이 제한되는 것을 우회할 수 있다.
[ magic_quotes_gpc 우회 ] https://dydgh499.tistory.com/32
magic_quotes_gpc
gpc(get, post, cookie)의 값에 quotes(' " \ NULL)가 포함된 경우 quotes앞에 자동으로 \를 붙여
문자로 인식되도록하여 SQL Injection에서 quotes 사용을 제한하는 옵션
mb_convert_encoding 함수의 취약점에 의해 '의 사용이 가능해졌다.
id 값에 '를 사용하여 쉽게 SQL Injection을 수행할 수 있게 되었다.
id : a%aa' or id='admin'#
단, admin이 필터링되어 있으므로 hex, binary, char()를 이용해야한다.
제출하면,,
문제 클리어~ :)
'Wargame > webhacking.kr (old)' 카테고리의 다른 글
[Webhacking.kr] 47번 풀이 (0) 2019.05.08 [Webhacking.kr] 46번 풀이 (0) 2019.05.08 [Webhacking.kr] 44번 풀이 (0) 2019.05.08 [Webhacking.kr] 43번 풀이 (0) 2019.05.07 [Webhacking.kr] 42번 풀이 (0) 2019.05.07 댓글