Wargame/wargame.kr

<wargame.kr> md5 password

지우친구 웅이 2021. 10. 24. 13:45

md5 password

문제 제목부터 md5 해시함수와 관련있는 것을 알 수 있다.

비밀번호를 알아내면 되는것 같다. get source를 통해 소스코드를 살펴보겠다.

$ps는 'ps'입력 폼의 값에서 특수문자를 지운 값이다.

$row는 mysql로 보낸 쿼리의 결과의 행을 연관 배열이나 숫자 배열로 가져온다.

그리고 $row[0]의 값이 있으면 인증 키 값을 얻을 수 있다.

 

<풀이 방법>

이 문제는 md5()의 취약점으로 잘 알려진 md5({변수}, true) 형태의 소스코드 오용에 대해서 묻는다.

md5 같은 경우 인자로 들어온 문자열을 32bytes의 길이로 반환한다. 하지만, 두 번째 인자를 true로 가질 경우 hex값을 16bytes의 바이너리 값으로 반환한다.

 

ex) select id from table where pw='def'='abc';

False=False를 통해 True를 만들 수 있다. 그러므로 md5({변수}, true)를 실행했을 때, ***'='*** 와 같이 값이 나온다면 위 코드에서 row[0]에 값이 들어가게 된다.

 

python 코드를 통해 '='바이트 값이 포함된 문자열을 찾아볼 수있다.

위의 answer값 중 하나를 골라서 입력하면 인증 키 값을 얻을 수 있다.