欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[极客大挑战 2019]Secret File

程序员文章站 2022-07-16 16:09:43
...

0x01

进入页面如下

[极客大挑战 2019]Secret File

看不到什么东西,所以查看源码

[极客大挑战 2019]Secret File

源码中发现有一个链接到另一个页面,原页面为黑色看不到链接,所以我们转到链接给的页面

[极客大挑战 2019]Secret File

有一个按钮,点击看看

[极客大挑战 2019]Secret File

发现点击之后直接跳到了end.php页面,查看源码也没有什么有用的东西,应该是时间过短然后就跳转,所以我们用抓包截断一下,发现结果如下

[极客大挑战 2019]Secret File

验证了我的想法,存在这个页面,直接进去看看

0x02

[极客大挑战 2019]Secret File

<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函数,看来需要用到文件包含来读取文件,先简单尝试一下

[极客大挑战 2019]Secret File

直接查看会出现这样的结果,查看页面源代码也没有任何东西,看来无法直接查看内容

通过对html代码的审计我们发现,代码过滤了data协议,input协议,ftp协议,当然还有一些协议它没有过滤,所以这里我们可以用伪协议文件包含来读取flag

0x03

file://		访问本地文件系统
http://		访问 HTTPs 网址
ftp://		访问 ftp URL 
Php://		访问输入输出流
Zlib://		压缩流
Data://		数据
Ssh2://		security shell2 
Expect://		处理交互式的流
Glob://		查找匹配的文件路径

这里尝试file协议直接读取,发现无法读取

[极客大挑战 2019]Secret File

所以尝试php伪协议,那么php://input也是被过滤了,所以这里唯一没有过滤的就是php://filter伪协议,所以这里我们使用该伪协议进行flag读取

payload:

?file=php://filter/convert.base64-encode/resource=flag.php 

[极客大挑战 2019]Secret File

将读取到的内容base64解密得到flag

[极客大挑战 2019]Secret File

总结

考察伪协议和代码审计,就是常见的伪协议的运用

相关标签: CTF—web