Challenge 51 시작!
SQL Injection 문제이다. 소스코드를 보자.
id 는 addslashes() 함수를 통해 필터링 되어 있어 pw 부분에서 조건을 만들어야 할 것 같다. 입력한 pw 는 md5 를 통해 암호화하고 있다. md5() 함수의 true 가 무슨 의미인지 몰라서 구글링 해보았다. 정리해보면 다음과 같다.
- md5(암호화 대상, false) -> 기본 값으로, 32자리 hex 값 반환
- md5(암호화 대상, true) -> 16자리 binary 형식으로 반환
만약 md5() 가 true 로 설정되었을 때, 반환값에 '=' 가 포함되어 있으면 쿼리를 참으로 만들 수 있다. 다음과 같은 쿼리가 그 경우이다.
select id from table where id='admin' and password='Kßèi'='®n'V'
위의 쿼리처럼 md5() 의 반환값에 '=' 이 포함될 경우, 왼 쪽의 password='Kßèi' 과 오른 쪽의 '®n'V'을 = 로 비교하게 된다. 이는 false=false 의 결과로 true 를 반환하게 되어 결과적으로 다음과 같은 쿼리가 된다.
select id from table where id='admin' and true
때문에 쿼리의 결과는 참이 되게 된다.
이번 문제에도 md5() 가 true 로 설정되어 있기 때문에 이를 이용하여 쿼리를 참으로 만들어보자. 해당 md5() 의 반환값으로 '=' 이 나오는 숫자를 찾기 위해 php 코드를 작성하였다.
그 결과로 위와 같은 숫자들이 나왔고 그 중, 1839431 을 password 값으로 입력해보았다.
성공!
'WarGame > webhacking.kr' 카테고리의 다른 글
challenge 53 (0) | 2020.04.29 |
---|---|
Challenge 52 (0) | 2020.04.29 |
Challenge 50 (0) | 2020.04.28 |
Challenge 49 (0) | 2020.04.27 |
Challenge 48 (0) | 2020.04.27 |