문제 설명을 보면 md5 함수가 나와 있다.
문제 페이지를 보면 password를 입력하는 입력란이 있고, 페이지 소스 코드를 볼 수 있다.
소스 코드를 보면 md5 함수에서 취약점이 발생한다.
md5 함수 옵션의 기본값은 false 인데, true 옵션을 사용하게 되면 해시 값을 바이너리 형식으로 반환하게 된다.
또한 sql에서 패스워드의 값이 '=' 의 형태로 들어가게 되면 참 으로 인식하고, php내에서는 md5 해시한 값이 바이너리 형식으로 인식하기 때문에 어떤 값을 md5 해시한 결과가 '=' 인 값을 찾아야 한다.
파이썬으로 코딩해서 찾아보면 1839431 이라는 값을 찾을 수 있다.
import hashlib
for i in range(0,1000000000):
if b"'='" in hashlib.md5(str(i).encode()).digest(): # bytes형태로 바꿈
print('Found: {}'.format(i))
찾은 값을 문제 페이지의 password 값을 입력하면 flag를 얻을 수 있다.
알게된 점 : php에서 md5함수의 옵션이 true로 설정되게 되면 취약점이 발생한다.
md5함수의 기본값 옵션은 false 이다.
'Security & Hacking > Wargame' 카테고리의 다른 글
[Wargame.kr] strcmp (0) | 2019.09.02 |
---|---|
[Wargame.kr] DB is really GOOD (0) | 2019.09.02 |
[Wargame.kr] fly me to the moon (0) | 2019.08.27 |
[Wargame.kr] WTF_CODE (0) | 2019.08.27 |
[Wargame.kr] login filtering (0) | 2019.08.25 |