문제
JUST COMPARE ONLY. with the other value :D
다른 값을 사용하여 비교만 하면 된다
풀이
2가지 변수의 대한 입력을 받을 수 있는 페이지와 소스코드를 확인할 수 있는 하이퍼링크가 제공된다. 2 변수의 값을 비교하여 답을 출력하는것으로 예상된다 소스코드를 확인해보자.
php 소스코드가 제공되며 정답을 도출할 수 있는 방법이 확인되고 있다 소스코드를 분석하면
1) v1과 v2는 Get_Method를 통해 입력을 받는걸 확인할 수 있다.
2) v1은 알파벳으로 구성되어있고 v2는 숫자로 구성되어있다.
3) v1과 v2를 md5()를 통해 해시값으로 변경되며 두 값을 비교한다
4) md5해시화한 두 값이 일치하면 chk=True가 되며 flag 값을 출력한다
php는 Type Juggling 으로 인해 변수의 타입을 자동으로 지정하고, 이때 md5 매직해시를 통해 임의의 문자의 값이 0e로 시작하는 지수가 된다면 해당값은 0이 된다.
[참고] Type Juggling과 Magic hash
Type Juggling : 변수선언시 선언된 변수의 Data type은 변수가 활용되는 시점에 자동으로 결정되며 이때 자동으로 변환되는 것을 타입 자동 변환(Type Juggling) 이라 한다.
Magic hash :
비교 연산 시 Type Juggling으로 인해 서로 다른 값이 같은 값으로 인식되는 특수한 동작. 예를 들어 0e로 시작하는 문자열 뒤에가 모두 숫자일 경우에는 지수연산으로 인해 모든값이 0으로 변화한다.
QNKCDZO 문자열과 240610708 숫자열을 md5를 통해 해시값을 구한 결과를 파이썬으로 구현해보니 두 값 모두 0e로 시작하는 결과를 얻을 수 있다, 즉 두 값은 모두 Type jugging을 통해 지수화 된다면 모두 0이라는 값으로 변경된다.
FLAG is : 00a91a76136cba2a39757640fb72eca08e337752 |
두 값을 비교 연산할 경우 예상대로 매직해시를 통해 값은 동일해지고 따라서 Flag값을 구할 수 있으며 해당 값을 제출할경우 통과할 수 있다.
위 경우에는 조금더 엄격한 비교연산자들을 활용하여 타입의 변화에 대비해야한다.
'Hacking > wargame.kr' 카테고리의 다른 글
[wargame.kr] Question 12. Type confusion (0) | 2021.06.30 |
---|---|
[wargame.kr] Question 11. tmitter (0) | 2021.06.28 |
[wargame.kr] Question 9. DB is really GOOD (0) | 2021.06.28 |
[wargame.kr] Question 8. md5 password (0) | 2021.06.28 |
[wargame.kr] Question 7. strcmp (0) | 2021.06.24 |