PHP "==" 연산자 취약점

2016. 1. 12. 01:40





문제 풀다 md5 충돌(?) 을 가장한 특이한 문제를 보게 되어 정리해 둔다.


이 문제는 md5 collision 이 발생하는 것이 아닌, php 비교문("==") 의 취약점이라고 볼 수 있다.


"==" 비교 연산자와 "===" 의 연산자는 차이가 있는데, "==" 를 사용하면 아래와 같이 의도하지 않은 엉뚱한 결과가 나온다.


root@kali:~/Desktop/# cat test.php

<?

$v1 = "0e1208123";

$v2 = "0e0956871";

if (($v1) == (($v2))){ echo "equal\n"; }

?>


두개의 문자열이 분명 다름에도 불구하고 아래와 같이 같다고 나온다.


root@kali:~/Desktop/# php test.php

equal



자세한 이유는 여기저기 많이 설명되어 있었다.


http://stackoverflow.com/questions/22140204/why-md5240610708-is-equal-to-md5qnkcdzo


요약하면 "==" 는 문자가 모두 숫자로 이루어진 경우, 숫자로 변환하여 비교를 하게 되는데, 


위와 같은 경우 둘다 0 으로 변환되어 0=0 이 되어 true 가 된다는 것.


+ Recent posts