207point인 md5 password 문제를 풀어보자.
첫 화면은 password를 입력할 수 있는 부분과 소스코드를 볼 수 있는 창이 있다.
쿼리문을 살쳐보면 입력받은 password값을 md5로 처리해서 쿼리의 결과를 반환하는 것 같다. 그리고 결과값이 $row 변수에 들어있으면 $key값을 echo하여 화면에 출력해주게 된다.
해당 문제는 md5의 취약점을 이용한 문제인 것으로 판단되며, md5함수의 취약점에 대해 알아보자.
- md5(string $str, [bool $raw_output=false])
$str
해쉬값을 구할 문자열
$raw_output
true 로 설정하면, 결과값이 16자로 만들어준다. 설정하지 않을 경우, 32자의 길이를 가진다. default는 false이다.
MySQL에서는 다음과 같은 형태로 입력하게 되면 조건절이 참이 되게 된다.
해당 테스트는 온라인 컴파일러를 이용했다.(https://paiza.io/en/projects/new?language=mysql)
이렇게 동작하는 MySQL을 보면서 문제를 풀기 위해서는 pw 입렵값에 '=' 문자열이 포함되어야 한다.
그리고 md5($ps, true)함수의 결과 값에 '=' 문자열이 포함된다면 쿼리문은 참이 되므로 문제가 해결된다.
이제 파이썬을 이용하여 무작위 숫자를 대입해서 해시 값을 가진 레인보우 테이블을 만든 후, 해당 해시 값에 '='의 바이트 값이 포함되어 있다면 문제를 해결할 수 있다.
파이썬 온라인 컴파일러를 이용해 코드를 작성해보자
(https://www.onlinegdb.com/online_python_compiler)
결과값 중 하나인 1839431 값을 입력해보자.
지금 서버에 문제가 있는지 여러 문제들이 동작하지 않고 있다.
추후에 서버가 정상화 됬을 때 다시 풀어보도록 하자.
'CTF & WarGame > wargame.kr' 카테고리의 다른 글
[wargame.kr] WTF_CODE (0) | 2020.03.21 |
---|---|
[wargame.kr] login filtering (0) | 2020.03.21 |
[wargame.kr] QR CODE PUZZLE (0) | 2020.03.21 |
[wargame.kr] flee button (0) | 2020.03.20 |
[wargame.kr] already got (0) | 2020.03.20 |