[Dreamhack] [wargame.kr] jff3_magic 문제
1. 분석
먼저 alert 창에 힌트라고 하면서 한 창이 뜨게 됩니다.
여기에서 힌트라고 하면서 swp라는 특정 단어를 주게 됩니다. swp란 리눅스에 편집기에서 작업을 하다가 도중에 정상적인 종료를 하지 않았을 경우 swp 확장자를 가진 파일이 생성이 되게 됩니다.
URL에 /.index.php.swp를 입력하게 된다면 index.php.swp이라는 파일이 다운받아지게 됩니다.
Index.php.swp 파일을 복구하기 위해서는
vi -r ./.index.php.swp
vi 편집기에서
:w [filename]
입력하면 됩니다.
2. 코드 분석
GET 메소드를 통해서 no를 통해서 변수명을 가져옵니다.
이런 식으로 나오는데 여기서 더 찾아보면 no = 0 은 admin이라는 것을 확인할 수 가 있습니다.
비밀번호를 비교를 haval 128,5를 통해서 해쉬화한 다음 비교하는 것을 확인할 수 있습니다. 만약 id가 admin이고 비밀번호가 같다면 flag 값을 나타낼 것입니다.
3. Exploit
이 문제는 blind_sql로 비밀번호를 유추해 내야할 거 같습니다.
먼저 비밀번호의 길이를 알아내는 것이 먼저일 것이라 생각했습니다. 그래서 비밀번호의 길이를 알아내는 코드를 짰습니다.
비밀번호를 알아내는 코드입니다.
찾은 결과 값이 0E~~~ 값을 가진 admin 비밀번호의 해쉬값을 얻을 수가 있습니다. 여기서 우리는 magic hash라는 것을 사용할 것 입니다.
https://github.com/spaze/hashes/blob/master/haval128,5.md
hashes/haval128,5.md at master · spaze/hashes
Magic hashes – PHP hash "collisions". Contribute to spaze/hashes development by creating an account on GitHub.
github.com
해당 링크로 들어가서 한 개를 골라 입력하게 되면 flag 값을 얻을 수가 있습니다.