wargame.kr - 8 (md5 password)

2021. 2. 27. 18:40정보보안/웹 해킹

wargame.kr - 8 (md5 password)

여덟번째 문제다.

 

md5('value', true);

 

Start 버튼을 눌러서 문제를 확인하자.

 

패스워드를 입력하는 폼과 login 버튼, 그리고 하단에 get source가 있다.

소스코드를 확인해보면 다음과 같다.

 

소스 코드를 확인해보면

입력받는 ps 파라미터를 md5로 암호화한 후 password와 비교해 같을경우 flag를 획득할 수 있는것 같다.

 

이부분은 잘 몰라 검색을 해보았는데,

찾아보니 md5 true 취약점이라는게 존재했다.

일반적으로 md5함수를 쓸때 파라미터로 true를 주지않고 사용하는경우(즉 false인 경우) hex값으로 반환하지만

파라미터로 true를 줄 경우 hex값이 아닌 binary값으로 반환한다.

(md5 함수의 default는 false)

 

md5("9235566", true)

결과값 : ���'='ә�0�����

 

이를 소스 코드의 쿼리문에 적용해보면 다음과 같다

select * from admin_password where password='".md5("9235566",true)."'
→ select * from admin_password where password='���'='ә�0�����'

 

password='���' → 거짓

'ә�0�����' → 거짓(문자열)

 

거짓 = 거짓 → 참

 

즉 쿼리문이 결과적으로 참이 된다.

 

'=' 이외에도 md5 암호화 시 바이너리 값이 'or'이 나오는 129581926211651571912466741651878684928 문자열을 

이용할 수 도 있다.

 

 

select * from admin_password where password='".md5("129581926211651571912466741651878684928",true)."'
→ select * from admin_password where password='赥0D煆o#吡'or'8'

 

password='赥0D煆o#吡' → 거짓

'8' → 참

거짓 or 참 → 참

 

 

※ mysql 에서 테스트해본 결과

숫자는 0 이외의 숫자는 다 참으로 보는것 같고

문자열은 모두 거짓, 문자열로된 숫자('8' 등)는 '0'만 거짓이고 그 이외에는 다 참으로 보는것 같다.

 

 

플래그 획득

 

 

플래그 입력

 

 

완료

'정보보안 > 웹 해킹' 카테고리의 다른 글

wargame.kr - 11 (tmitter)  (0) 2021.02.28
wargame.kr - 9 (DB is really GOOD)  (0) 2021.02.27
wargame.kr - 7 (strcmp)  (0) 2021.02.27
wargame.kr - 6(fly me to the moon)[추후 수정]  (0) 2021.02.27
wargame.kr - 5(WTF_CODE)  (0) 2021.02.27