Self-Improvement

PHP 문자열 필터링 함수 취약점(POSIX Regex --> PCRE Regex) 본문

Web

PHP 문자열 필터링 함수 취약점(POSIX Regex --> PCRE Regex)

JoGeun 2018. 10. 20. 14:31

*POSIX Regex, PCRE Regex
정규표현식은 표준인 POSIX의 정규표현식과 POSIX 정규표현식에서 확장된 Perl방식의 PCRE가 대표적이며, 이외에도 수많은 정규표현식이 존재하며 정규표현식 간에는 약간의 차이점이 있으나 거의 비슷하다.

*예제
test.php
------------------------------
<?
 
$_id = $_GET[id];
 
if (eregi("admin",$_id))
  echo "Filtered !!" . "<br>";
else
  echo $_id . "<br>";
 
?>

--------------------------------

test.php?id=admin 으로 접근을 하게 되면 "Filtered !!" 라고 뜨게 되고 그 외 아이디를 입력하게 되면 해당 문자열을 출력된다.
문제가 없어 보이지만, PHP 5.3+ 부터 POSIX Regex 함수들을 사용할때 NULL문자를 만나게 되면 뒤의 문자열을 체크하지 않는 취약점으로 인해 사용되지 않게 되었습니다. 또한, PHP 6.0 부터는 아예 삭제되어지며 PHP 5.3+ 부터는 POSIX Regex 대신 PCRE Regex 를 사용하게 됩니다.

Function replacements

 POSIX
 PCRE 
 ereg_replace()
 preg_replace()
 ereg()
 preg_match()
 eregi_replace()
 preg_replace()
 eregi()
 preg_match()
 split()
 preg_split()
 spliti()
 preg_split()
 sql_regcase()
 No equivalent


'Web' 카테고리의 다른 글

쿠키와 세션2  (0) 2019.08.26
SQLi 페이로드  (0) 2019.07.22
php strcmp() 함수 취약점  (0) 2018.10.20
php 비교 연산자 취약점(md5 매직해시)  (0) 2018.10.20
XML, JSON, Ajax, SOAP, REST  (0) 2018.10.20