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

[极客大挑战 2019]Secret File

程序员文章站 2022-07-16 16:29:54
...

[极客大挑战 2019]Secret File

题目

[极客大挑战 2019]Secret File
[极客大挑战 2019]Secret File
[极客大挑战 2019]Secret File

分析

不难,可以看出进行了多次链接跳转

但是,没有找到我们想要的东西!

猜测中间有个很快的跳转,重定向或者直接跳转

Archive_room.php --> action.php --> end.php

验证

[极客大挑战 2019]Secret File
根据提示下一步、分别访问secr3t.php和flag.php:
[极客大挑战 2019]Secret File
[极客大挑战 2019]Secret File

解题

没有其他猫腻了、由此可见、在前端找不到flag

stristr()函数搜索字符串在另一字符串中的第一次出现。

strstr() 函数搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE,区分大小写。

file:// — 访问本地文件系统、文件系统 是 PHP 使用的默认封装协议,展现了本地文件系统。 当指定了一个相对路径(不以/、\、\或 Windows 盘符开头的路径)提供的路径将基于当前的工作目录。 在很多情况下是脚本所在的目录,除非被修改了。 使用 CLI 的时候,目录默认是脚本被调用时所在的目录

php:// — 访问各个输入/输出流(I/O streams)
php://input 是个可以访问请求的原始数据的只读流。

php://filter 是一种设计用来允许过滤器程序在打开时成为流的封装协议。这对于单独具有完整功能的文件函数非常有用,否则就没有机会在读取内容之前将过滤器应用于流之上。

参数 功能
read 读取
write 写入
resource 数据来源

审计代码,回到secr3t.php,尝试构造payload来获取flag

http://64406e9c-7d5f-49d4-b917-80321f5d26e6.node3.buuoj.cn/secr3t.php?file=php://filter/resource=flag.php
[极客大挑战 2019]Secret File
失败+1

重新构造、原理请查看资料部分过滤器
[极客大挑战 2019]Secret File

成功+1

flag进行base64解码==>> $flag = ‘flag{8925bb03-bca4-4039-9b8f-6e734b4bd772}’;

资料

要注意,先把php.ini的allow_url_fopenallow_url_include设置为On,不然会影响伪协议的使用

php://

php:// — 访问各个输入/输出流(I/O streams)

php://input

访问请求的原始数据的只读流

php://input可以获取到POST的数据,这一点在CTF中常常用到。

php://output

只写的数据流

php://output允许你以 printecho 一样的方式 写入到输出缓冲区。

php://filter

重点来了,php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。

我们先看看它的语法:

resource=<要过滤的数据流>   //这个参数是必须的。它指定了你要筛选过滤的数据流。
read=<读链的筛选列表>       //该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
write=<写链的筛选列表>      //该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔。
<;两个链的筛选列表>        //任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。

我们平时是这样利用它来读取任意文件的:

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

在这个payload里,convert.base64-encode就是一个过滤器,而flag.php就是要过滤的数据流,也就是要读取的文件。

转换过滤器 convert.*

convert.* 是PHP 5.0.0 添加的,作用顾名思义就是转换==

base64

convert.base64-encode和 convert.base64-decode使用这两个过滤器等同于分别用 base64_encode()和 base64_decode()函数处理所有的流数据。

字符串过滤器 string.*

这个过滤器的作用是对字符串进行各种转换。

有加密的,转换大小写的等等。

参考链接

相关标签: 安全 CTF