[Wargame] md5 password

동스토리 ㅣ 2021. 3. 24. 23:43

반응형

안녕하세요.

 

워 게임 md5 password 문제 풀이 하겠습니다.

 

해당 문제의 소스코드를 보면,

 

admin_password 테이블의 password 값에 md5 해시 값을 row 변수에 저장한다.

 

isset($row[0])가 true일 경우 Password 값을 출력해주고 있습니다.

 

이 문제는 md5의 취약점을 알고 문제의 적용할 수 있는지를 묻고 있습니다.

 

md5 함수는 인자로 들어온 문자열을 md5 해시하여 32bytes 길이로 반환합니다.

두 번째 인자는 이는 raw_output에 해당하는 옵션입니다.

raw_output 옵션의 default는 False 이며 Hex값을 출력하고,

True로 주게된다면 32bytes 길이의 Hex 값을 16bytes의 바이너리 값으로 반환해줍니다.

 

raw_output가 true인 경우, 결과 값이 binary값으로 출력되어 SQL 구문을 조작하여 SQL Injection 공격을 시도할 수 있습니다.

 

즉, md5($ps, true)를 '='로 만들어주면 SQL에서 password 값이 '='가 되면 참으로 인식하여 구문이 참이되게 됩니다.

 

Python을 사용하여 임의의 값을 md5 해시한 값이 '='를 찾아보면,

 

Python에서의 md5() 함수는 바이트 형태의 데이터를 받아서 해시를 수행합니다. 그러한 해시 값에서 digest() 함수를 수행하면 해시 값이 바이트 데이터로 변환되어 출력됩니다.

 

import hashlib

for i in range(0, 1000000000):

    if b"'='" in hashlib.md5(str(i).encode()).digest():  # bytes형태로 바꿈

        print('Found: {}'.format(i))

 

결과로 출력된 하나의 값을 제출하면 문제를 해결할 수 있습니다.

 

 

감사합니다.

반응형

'Hacking > Wargame.kr' 카테고리의 다른 글

[Wargame] strcmp  (0) 2021.03.21
[Wargame] fly me to the moon  (0) 2021.03.17
[Wargame] WTF_CODE  (0) 2021.03.06
[Wargame] login filtering  (0) 2021.03.01
[Wargame] QR CODE PUZZLE  (0) 2021.02.25