2021. 2. 27. 18:40ㆍ정보보안/웹 해킹
여덟번째 문제다.
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 |