[phpTrick] array === array compare bypass(?) (<5.5.9)

php Array === Array compare bug

Example Code

<?php
$arr = ['admin', 'password'];
$auth = $_GET['auth'];
if( $arr === $auth && $auth[0] != 'admin'){
    echo 'Hello admin!';
} else {
    echo 'login plz';
}

위와 같은 코드가 있을 때,
2번째 줄 $arr의 0번째인자가 admin으로 박혀있고,
3번째 줄에선 $auth와 $arr의 키/값 순서까지 일치해야 true여야하고(identity), $auth[0]이 admin이 아니여야 Hello admin!이 뜨게 된다.

하지만 ?auth[4294967296]=admin&auth[1]=password를 입력하게 되면 32bit int의 표현의 한계의 의해 auth[4294967296]auth[0]으로 들어가게 되어 해당 if 문을 통과 할 수 있게된다.

글의 문제가 있다면 댓글을 달아 주세요.

This site uses Akismet to reduce spam. Learn how your comment data is processed.