bugku web flag在index里
题目描述
看到了点击以后的url,尝试了一下?file=index.php
,结果失败,啥都没有,上网搜了一下题解,发现这是php中的本地文件包含
本地文件包含 LFI
php的本地文件包含可以参见最后的几个参考博客
在这道题中,用到了php://filter
这个漏洞,可以指定要读的内容和编码方式,在这里,php://filter
的实现有一个限制,那就是要有include()
或include_once()
函数将传进去的参数作为文件读出来,这里先提前看一下源码
<html>
<title>Bugku-ctf</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:flag{edulcni_elif_lacol_si_siht}
?>
</html>
从源码中可以看到,我们的file
参数在最后一个函数的地方被作为include()
函数的参数传了进去,因此造成了本地文件包含的漏洞
漏洞利用
在LFI中,php://filter
有以下参数可以使用
名称 | 描述 | 备注 |
---|---|---|
resource=<要过滤的数据流> | 指定了你要筛选过滤的数据流 | 必选 |
read=<读链的筛选列表> | 可以设定一个或多个过滤器名称,以管道符(|)分隔 | 可选 |
write=<写链的筛选列表> | 可以设定一个或多个过滤器名称,以管道符(|)分隔 | 可选 |
<;两个链的筛选列表> | 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链 |
在include()
函数当中,直接被作为参数的值,无论是什么类型的文件,都会直接被当作php脚本来执行,但是从上面的源码也可以看到,并不是所有的php脚本执行以后都会输出有效的结果,因此,在这个过程当中,最理想的状态就是我们可以得到php文件的源码,那这就要求我们保证代码不被include()
给执行掉,所以我们选择base64对php脚本进行加密,同时指定要读取的文件,最后构造出payload
?file=php://filter/read=convert.base64-encode/resource=index.php
得到flag,base64一转就好
参考
PHP伪协议总结 - 个人文章 - SegmentFault 思否
chybeta大佬的博客 php文件包含漏洞 | Chybeta
离别歌大佬 谈一谈php://filter的妙用 | 离别歌
文中表格来自于 php://filter 的使用_PHP_hhh-CSDN博客
上一篇: 正坐在爸爸的大腿上
下一篇: 总结系列-一文搞懂沉浸式状态栏
推荐阅读
-
在ASP.NET MVC里对Web Page网页进行权限控制
-
web——flag在index里(80)——Bugku
-
在web.config里使用configSource分隔各类配置
-
elementui el-upload 在v-for里使用时 如何获取index
-
在head里的CSS link 居然粗现在body里了?_html/css_WEB-ITnose
-
问问高人为什么这个网页FLASH音乐播放在IE里有显示,在CHROME等别的浏览器没显示啊_html/css_WEB-ITnose
-
在css里写#C9D9F2,鼠标放上就能显示出这个颜色,非常直观。有谁知道这是什么插件??_html/css_WEB-ITnose
-
为什么不能在火狐里播放视频,但是在ie里能播放_html/css_WEB-ITnose
-
ACCESS在Web.config里设置连接字符串
-
为什么不能在火狐里播放视频,但是在ie里能播放_html/css_WEB-ITnose