Safflower's Blog Security Researcher

PHP의 Magic Hash 트릭

PHP
 

<?php
	var_dump(md5('240610708') == md5('QNKCDZO'));
?>

PHP에서 240610708QNKCDZO는 md5 해시값이 서로 다름에도 불구하고, == 연산의 결과가 True가 되어, md5 해시가 충돌된 것과 같은 결과를 내는 트릭이다. (md5로 예를 들었지만, 딱히 md5가 아니더라도 충분히 가능하다.)

  • 240610708: 0e462097431906509019562988736854
  • QNKCDZO: 0e830400451993494058024219903391

위 값 둘다 0e로 시작한다는 특징이 있으며, 값이 문자열이지만 ==로 비교하면 숫자로 인식되기 때문에 이러한 결과가 발생한다. PHP에서 == 연산자는 자료형에 관계없이 값만 비교해버리기 때문에, 취약점이 발생하기 쉬운 비교 연산자이니 되도록이면 === 연산자의 사용을 권장한다.


Similar Posts

Comments