WarGame/wargame.kr

[WarGame] md5 password

btr95 2018. 10. 29. 22:13





보통 md5('value')로 hash값을 만들면 32자리 hex값으로 나오게 됩니다.

하지만 md5('value', true)로 hash값을 만들면 16자리 바이너리 형태로 나오게 됩니다.

바이너리 형태로 나오게 되면서 취약점이 발생합니다.


password='aaa'='bbb' 라는 식은 password='aaa' 부분이 false, bool 연산의 문자열은 false이기에 'bbb'도 false가 나와

true로 query가 작동하게 됩니다.


그렇다면 md5를 한 바이너리 값 중에서 '=' 라는 문자열이 나오게 되면 false + false = true 로 된다는 것입니다.



python으로 간단하게 hash를 생성하는 코드를 만들고 '=' 를 찾으면 띄워 주도록 만들었습니다.

(ascii code로 27은 싱글쿼터, 3d는 =입니다)

1
2
3
4
5
6
import hashlib
 
for password in range(1,99999999):
     md5_hash = hashlib.md5(str(password)).hexdigest()
     if '273d27' in md5_hash:
         print(password)
cs


여러 값들이 나오게 되는데 모든 값이 false/false가 되지 않는지 전부 되지는 않고, 몇몇 값들만 됩니다.