51번 문제를 보면 아래와 같은 admin page를 볼 수 있다.
index.phps를 보면 아래와 같은 코드가 있다.
solve()를 호출하기 위해서는 query문 결과의 id가 admin이어야 한다.
이에 주석을 시도해보았으나 Wrong이 출력된다.
따라서 다른 방법으로 풀어야 하는데,
md5()에서 raw_output을 true로 준 것을 알 수 있다.
php 메뉴얼을 보면 md5의 두번째 인자인 raw_output은 default로 false이다. True로 설정할 경우 raw binary format으로 리턴된다.
이 점을 이용하여 password를 true로 만들면 clear할 수 있다.
출처: http://php.net/manual/en/function.md5.php
pw=’$input_pw’ 에서 $input_pw는 md5 해시값이다.
만약 $input_pw의 값에 ‘=’ 이 포함된다면
pw=’a’=’b’ 와 같이 입력하여 true로 만들 수 있다.
pw=’a’=’b’는 (pw=’a’)=’b’와 같고
이 값은 false=false로 true가 된다.
따라서 해시한 결과 값에 ‘=’이 포함되는 인풋을 찾으면 된다.
(이 것은 raw_output을 True로 하였으며 그 결과가 쿼리문에 직접 영향을 주기 때문에 가능하다.)
이를 찾기 위한 코드는 아래와 같다.
처음에는 range()를 이용하려 했으나, 실행 시 메모리의 측면을 고려하여 위의 코드로 수정하였다.
실행하면 1839431이라는 결과를 얻게 된다.
따라서 id에 admin, pw에 1839431를 입력하면 clear할 수 있다.
'Wargame > webhacking.kr' 카테고리의 다른 글
webhacking.kr 48번 (0) | 2019.01.29 |
---|---|
webhacking.kr 41번 (0) | 2019.01.29 |
webhacking.kr 53번 (0) | 2019.01.29 |
webhacking.kr 60번 (0) | 2019.01.29 |
webhacking.kr 43번 (0) | 2019.01.29 |
댓글