-
[Webhacking.kr] 51번 풀이Wargame/webhacking.kr (old) 2019. 5. 8. 21:44
오른쪽 아래에 잘보면 Source가 있다.
클릭해서 소스를 보자.
id가 admin이면 풀리는 SQL Injection 문제이다.
SQL 쿼리문이 and로 되어 있기 때문에 pw부분을 주석 처리해 인증을 우회하기로 하였다.
id : admin'-- , pw : 1
Wrong이 뜬다. 이 방법으로는 인증우회가 안된다.
admin의 pw를 알아내거나, 다른 방법으로 인증을 우회해야한다.
pw가 md5 함수에의해 해시화되고있다. 그런데 의심스럽게 md5의 인자로 true가 전달된다.
md5(string \$str [, bool \$raw_output ])
RSA Data Security, Inc. MD5 Message-Digest Algorithm을 사용하여 str의 MD5 해시를 계산하여
반환하는 함수로 raw_output의 기본 값은 false이다.
raw_output를 true로 할 경우 binary 형식으로 반환한다.
binary 형식으로 반환할 경우 md5 raw hash 취약점이 발생할 수 있다.
MD5 Raw Hash 취약점
binary로 반환된 문자열에 = 또는 or이 포함된 경우에 인증을 우회할 수 있다.
이해를 위해 num_51 테이블을 생성하고 실습해보았다.
1. select* from num_51 where id='admin' and pw='astw'or'5adst';
id='admin' and pw='astw' 가 False 이지만 or 뒤의 문자열이 5로 시작하여 bool으로 사용될 때
int 형으로 캐스팅되어 5가된다. 따라서, '5adst' 는 True가 된다.
(연산자 우선순위 : and > or)
결과적으로 select* from num_51 where id='admin' and pw='astw' or 5와 같다.
2. select* from num_51 where id='admin' and pw='astw'='adst';
pw='astw'는 False이고, 'adst'는 int 형으로 캐스팅되어도 숫자가 없어 0이므로 False가 된다.
따라서, False=False가 되어 True가 된다.
결과적으로 select* from num_51 where id='admin' and True와 같다.
[ MD5 Raw Hash 취약점 ] http://cvk.posthaven.com/sql-injection-with-raw-md5-hashes
[ MD5 Raw Hash 취약점 ] https://hyunmini.tistory.com/43
MD5 Raw Hash 취약점을 이용하여 인증을 우회하면 될 것 같다.
md5를 binary로 나타낸 값 중 'or'숫자 를 포함하거나 '='를 포함하는 값을 찾아보자. php를 이용하였다.
('or'숫자 는 시간이 너무 오래 걸려 '='를 찾는 소스를 짰다.)php 실행 결과는 아래와 같다.
찾아낸 값인 1839431으로 로그인을 시도하니 문제가 풀렸다.
id : admin, pw : 1839431
'Wargame > webhacking.kr (old)' 카테고리의 다른 글
[Webhacking.kr] 53번 풀이 (0) 2019.05.08 [Webhacking.kr] 52번 풀이 (0) 2019.05.08 [Webhacking.kr] 49번 풀이 (0) 2019.05.08 [Webhacking.kr] 48번 풀이 (0) 2019.05.08 [Webhacking.kr] 47번 풀이 (0) 2019.05.08 댓글