상세 컨텐츠

본문 제목

[xcz.kr #32] Easy Trick - 100 points

WebHacking/xcz.kr

by bing_su 2021. 2. 17. 22:50

본문

반응형
SMALL

xcz.kr의 32번째 문제는 Easy Trick이다. 문제는 아래와 같다.

Prob Page는 인증하는 데 필요한 페이지인 것 같으니 나중에 보고, Source Page를 볼 수 있으므로 이 페이지부터 봤다.

a 변수를 GET 방식으로 받고 있고, 이 값이 12735366333132132465461????????????????????????????? 일 경우 KEY를 주는 것 같다. ?에 들어가는 값은 특정 값이 아닐 것이라고 생각했다. 아마 PHP 비교 연산자 취약점의 문제인가 싶었다. 이미 알고 있었던 PHP 비교 연산자의 취약점은 type-juggling에 의한 것 외에는 잘 모르겠어서 구글링을 했다.

 

접은 부분에는 서로 다른 타입이 비교 연산자에서 사용될 경우 type-juggling에 의해 발생하는 PHP 취약점에 대한 것을 정리했다. 이 문제에서 참고할 부분은 아니지만 궁금하시면 열어보세요.

더보기

PHP에서 비교 연산자(Equal, ==)를 사용할 때 두 변수의 타입이 다르다면 type-juggling에 의해 타입이 변환되고 비교한다. 따라서 정확한 비교를 위해서는 동일한 타입 인지도 비교하는 비교 연산자(Identical, ===)를 사용해야 한다. 아래의 표는 PHP 비교 연산자에 대한 것이다.

Example Name Result
$a == $b Equal type juggling 후 $a와 $b의 값이 같으면 True
$a === $b Identical $a와 $b의 타입과 값이 모두 같으면 True
$a != $b Not equal type juggling 후 $a와 $b의 값이 다르면 True
$a <> $b Not equal type juggling 후 $a와 $b의 값이 다르면 True
$a !== $b Not identical $a와 $b의 타입 또는 값이 다르면 True

 

 

이 문제에서 다룰 취약점은 큰 수를 비교할 때 발생하는 trick이다. 17자리가 넘는 두 수를 비교하면 17자리까지가 같고 뒤에 부분이 다르다 하더라도 같다고 인식한다. (이 블로그를 참고했다.)

 

다시 문제를 살펴보면 GET 방식으로 변수 a를 전달하는데 이 값이 12735366333132132465461~~면 된다. 이때 주어진 부분은 17자리 이상이므로 문제에서 주어진 물음표 29개에 맞게 인증 사이트에 아무 숫자 29자리를 입력하자.

필자의 경우 뒤의 29자리를 모두 0으로 채웠다. 키 값이 뜨고, 인증을 하면 문제가 풀린다.

반응형
LIST

'WebHacking > xcz.kr' 카테고리의 다른 글

[xcz.kr #21] PHP Obfuscation Crack - 300 points  (0) 2021.02.23
[xcz.kr #18] Web Basic - 150 points  (0) 2021.02.23

관련글 더보기

댓글 영역