티스토리 뷰

Programming/PHP

POSIX Regex와 PCRE Regex

do9dark 2015. 10. 20. 23:43

PHP 5.3.0부터 POSIX Regex 대신 PCRE Regex가 사용된다. (PHP 6.0부터 완전 제거)

자세한 내용은 아래를 참고하면 된다.

http://php.net/manual/en/reference.pcre.pattern.posix.php

 

 

그러다보니 PHP 5.3.0 이상 버전에서 POSIX Regex 함수들을 우회할 수 있는 방법이 있다.

 

<?php
    $id = $_GET[id];
 
    if(!isset($_GET[id])) {
        exit();
    }
 
    if(eregi("admin"$id)) {
        print('<br>guest');
    } else {
        print("<br>$id");
    }
?>
cs


위와 같이 id 값으로 admin을 출력하고 싶을 경우에 admin을 입력을 하면 eregi() 함수 때문에 guest가 출력이 된다.



이때, %00(NULL)을 입력하고 admin을 입력해주면 eregi() 함수를 우회하여 admin을 출력할 수 있다.




PHP 5.2에서 동일한 코드로 실험을 해보면 우회가 되지 않는 것을 확인할 수 있다.



다른 방법으로 PHP 5.3에서 문자 중간에 %00(NULL)을 입력하면 admin이 출력이 되는 것을 확인할 수 있다. 



다시 PHP 5.2에서 입력해보면 admin이 정상적으로 출력이 되지 않는 것을 확인할 수 있다.


'Programming > PHP' 카테고리의 다른 글

strcmp() 취약점  (0) 2015.10.18
PHP Object Injection  (0) 2015.09.03
'(single-quotes)와 "(double-quotes)의 차이  (0) 2015.02.03
댓글
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
링크
공지사항
Total
Today
Yesterday