[极客大挑战 2019]Secret File
Posted jleixin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[极客大挑战 2019]Secret File相关的知识,希望对你有一定的参考价值。
0x01
进入页面如下
看不到什么东西,所以查看源码
源码中发现有一个链接到另一个页面,原页面为黑色看不到链接,所以我们转到链接给的页面
有一个按钮,点击看看
发现点击之后直接跳到了end.php页面,查看源码也没有什么有用的东西,应该是时间过短然后就跳转,所以我们用抓包截断一下,发现结果如下
验证了我的想法,存在这个页面,直接进去看看
0x02
<html>
<title>secret</title>
<meta charset="UTF-8">
<?php
highlight_file(__FILE__);
error_reporting(0);
$file=$_GET[‘file‘];
if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
echo "Oh no!";
exit();
}
include($file);
//flag放在了flag.php里
?>
</html>
给出了一段html代码,存在inculde函数,看来需要用到文件包含来读取文件,先简单尝试一下
直接查看会出现这样的结果,查看页面源代码也没有任何东西,看来无法直接查看内容
通过对html代码的审计我们发现,代码过滤了data协议,input协议,ftp协议,当然还有一些协议它没有过滤,所以这里我们可以用伪协议文件包含来读取flag
0x03
file:// 访问本地文件系统
http:// 访问 HTTPs 网址
ftp:// 访问 ftp URL
Php:// 访问输入输出流
Zlib:// 压缩流
Data:// 数据
Ssh2:// security shell2
Expect:// 处理交互式的流
Glob:// 查找匹配的文件路径
这里尝试file协议直接读取,发现无法读取
所以尝试php伪协议,那么php://input也是被过滤了,所以这里唯一没有过滤的就是php://filter伪协议,所以这里我们使用该伪协议进行flag读取
payload:
?file=php://filter/convert.base64-encode/resource=flag.php
将读取到的内容base64解密得到flag
总结
考察伪协议和代码审计,就是常见的伪协议的运用
以上是关于[极客大挑战 2019]Secret File的主要内容,如果未能解决你的问题,请参考以下文章
[HCTF 2018]WarmUp&[极客大挑战 2019]Knife&[极客大挑战 2019]Secret File&[极客大挑战 2019]BuyFlag