티스토리 뷰
최종 수정: 2014-03-25
안녕하세요. Hackability 입니다.
오늘 포스팅 할 내용은 PHP 에서 입력 문자열 필터링 함수의 취약점을 이용한 우회 기법에 대한 내용입니다.
PHP 에서는 HTTP 메소드를 통해 들어 오는 사용자의 입력 검증 또는 필터링을 위해 eregi 와 같은 함수를 사용해 왔습니다. (POSIX Regex)
예를들어, 간단히 다음과 같이 id 입력에 대해 필터링하는 PHP 코드가 있다고 가정 합니다.
index.php
1 2 3 4 5 6 7 8 9 10 | <? $_id = $_GET[id]; if (eregi("admin",$_id)) echo "Filtered !!" . "<br>"; else echo $_id . "<br>"; ?> |
간단히, index.php?id=admin 으로 접근을 하게 되면 "Filtered !!" 라고 뜨게 되고 그 외 아이디를 입력하게 되면 해당 문자열을 출력해주게 됩니다.
문제가 없어 보이지만, PHP 5.3+ 부터 POSIX Regex 함수들이 더이상 사용되지 않게 되었습니다. (As of PHP 5.3.0, the POSIX Regex extension is deprecated.) 또한, PHP 6.0 부터는 아예 삭제됩니다. PHP 5.3+ 부터는 POSIX Regex 대신 PCRE Regex 를 사용하게 됩니다.
먼저, 5.3+ 에서 어떻게 위의 필터링을 우회 하는지 보도록 하겠습니다. PHP 5.3+ 에서 POSIX Regex 함수들을 사용할 때, NULL 문자를 만나게 되면 더이상 뒤의 문자열을 체크하지 않게 됩니다. 아래는 5.2 와 5.3에서 위의 index.php 사용에 대한 예 입니다.
PHP 5.2+ /index.php?id=admin |
PHP 5.3+ /index.php?id=admin |
PHP 5.2+, 5.3+ 모두 정상적으로 필터링 되는 것을 확인할 수 있습니다. 하지만, 첫 바이트에 NULL을 넣어 입력 문자열을 더이상 점검하지 못하도록 하면 어떻게 될까요?
PHP 5.2+ /index.php?id=%00admin
|
PHP 5.3+ /index.php?id=%00admin
|
PHP 5.2+ 에서는 정상적으로 필터링 되지만, PHP 5.3+ 에서는 필터링이 정상적으로 되지 않는 것을 확인 할 수 있습니다. 이를 통해 PHP 5.3+ POSIX Regex 필터링을 우회 하는 것을 확인하였습니다.
마지막으로 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 |
'해킹기술 > PHP' 카테고리의 다른 글
[PHP] strcmp 취약점을 이용한 인증 우회 (5) | 2014.02.02 |
---|
- Total
- Today
- Yesterday
- IE 10 리버싱
- School CTF Write up
- 윈도우즈 익스플로잇 개발
- data mining
- 데이터 마이닝
- 2014 SU CTF Write UP
- IE 10 God Mode
- IE 10 Exploit Development
- TenDollar
- IE UAF
- UAF
- IE 10 익스플로잇
- 힙 스프레잉
- heap spraying
- IE 11 exploit
- 2015 School CTF
- School CTF Writeup
- TenDollar CTF
- shellcode
- CTF Write up
- expdev 번역
- WinDbg
- IE 11 exploit development
- shellcode writing
- Windows Exploit Development
- Mona 2
- 쉘 코드 작성
- IE 11 UAF
- Use after free
- 쉘 코드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |