php文件包含漏洞(input与filter)
php://input
php://input可以读取没有处理过的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要特殊的php.ini设置。php://input不能用于enctype=multipart/form-data。
php://filter协议
协议语法:
php://filter:/<action>=<name>
php://filter 的 参数列表
read 读取
write 写入
resource 数据来源(必须的)
read的参数
string.strip_tags 将数据流中的所有html标签清除
string.toupper 将数据流中的内容转换为大写
string.tolower 将数据流中的内容转换为小写
convert.base64-encode 将数据流中的内容转换为base64编码
convert.base64-decode 与上面对应解码
漏洞应用
以i春秋上一道文件包含的CTF题为例:(来自rgrgrgrgrggrgrg大佬的Writeup)
1 <?php 2 show_source(__FILE__); 3 if(isset($_REQUEST['path'])){ 4 include($_REQUEST['path']); 5 }else{ 6 include('phpinfo.php'); 7 }
path能以get与post形式传入,这里我们在url后加上?path=php://input,再以post形式传入ls指令,成功执行了指令。
于是利用filter协议来读取dle345aae.php的内容,由于php文件不能直接读取,于是采用base64编码方式读取,成功得到一串base64编码,拿去一解就是flag啦。