minhui study
[ Wargame.kr ] md5 password 본문
Challenge md5 password - 207p
md5('value', true)에 대해서 찾아보았다.
md5같은 경우 인자로 들어온 문자열을 md5 해시하여 32bytes의 길이로 반환을 해주는데
여기서 두번째 인자 옵션을 디폴트 값 false가 아닌 true로 주면 Hex값을 16bytes의 바이너리 값으로 반환해준다.
md5('문자열', false) / md5('문자열') -> 32자리의 16진수 값을 반환한다.
md5('문자열', true) -> 16자리의 바이너리 형식으로 반환한다.
테이블에는 id : admin / pw : admin 인 값이 있다고 가정해보자
select id from table where pw='admin' ='abc';
만약 위와 같은 쿼리문을 입력한다면 admin은 True이지만 abc는 False이므로 (True=False)결국 False가 되어 아무 결과가 나오지 않는다.
select id from table where pw='def' ='abc';
하지만 다음과 같이 False=False가 되어 결국 True로 만들 수 있다.
즉, 최종적으로는 True가 되어 admin값이 출력되게 된다.
그러므로 md5('문자열', true)를 실행하였을 때 *****'='***** 같이 값이 나온다면 쿼리문이 다음과 같이 완성되므로 위의 코드에서 row[0]에 값이 들어가게 되어 문제가 풀릴 것이다.
select * from admin_password where password = ' " **** '=' ***** " '
파이썬 코드를 통해 해시 값을 만들어내었을 때 '='바이트 값이 포함되어 있는 문자열을 찾아보자
위의 값들 중 하나를 골라서 넣어보면 플래그가 나오게 된다.
'Hacking > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr 6번 (0) | 2020.03.02 |
---|---|
Webhacking.kr 23번 (0) | 2020.02.18 |
Webhacking.kr 58번 (0) | 2020.02.18 |
Webhacking.kr 47번 (0) | 2020.02.16 |
Webhacking.kr 32번 (0) | 2020.02.15 |