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 가 된다는 것.
'Web Hacking' 카테고리의 다른 글
javascript 로 객체 메소드 목록 확인 (0) | 2016.08.03 |
---|---|
php 의 연산자 취약점 (1) | 2016.07.28 |
신뢰할수 없는 SSL경고 사이트 프록시 적용 - Burp 인증서 등록하기 (1) | 2015.06.21 |
XXE(Xml eXternal Entity) Attack (1) | 2015.02.27 |
SQL Injection Cheat Sheet - MySQL (1) | 2014.09.25 |