php代码审计ctf隐藏了目录,您有一份CTF代码审计文件等待查收

0x01 背景

上周总结了一些文件包含与伪协议结合的利用方法,本周就找一道例题进行演练。题目源自国外某挑战平台,平台上还有许多其他有趣的challenges题目,小伙伴有兴趣也可以上去好好玩耍一番。

题目地址:http://level3.tasteless.eu/index.php?file=

站点地址:http://chall.tasteless.eu/

3cbce2c6f026

0x02 解题过程

首先访问题目站点http://level3.tasteless.eu/index.php?file= 发现给出了题目的源码,所以本题便是要通过代码审计获取flag.

源码信息:

3cbce2c6f026

源码中展示的信息还是很直接的:

1.高亮读取 index.php的源码

2.在提示信息中告知要读取PHP.ini ,里面有敏感信息

3.包含了anti_rfi.php,并提示不允许进行远程文件包含

4.使用require_one包含了GET请求的file参数。

根据上面的代码情况可以知道最重要的是第4点,所以可以使用如下思路进行解题。

1.使用读取PHP.ini和anti_rfi.php,获取足够的信息

2.绕过anti_rfi.php并远程包含一句话

3.使用PHP伪协议直接执行代码

分析后大致有如上的思路,第2点是需要开启allow_url_fopen,allow_url_include,第3点需要开启allow_url_include就可以了。

读取php.ini

http://level3.tasteless.eu/php.ini

3cbce2c6f026

从php.ini中得到了allow_url_include是on的状态,所以可以使用PHP伪协议执行代码,可以使用php://input的协议,成功执行了代码。

3cbce2c6f026

3cbce2c6f026

此时需要获取站点的目录信息,由于allow_url_fopen是为off的状态所以无法使用远程文件包含执行命令了,也就无法直接用菜刀去连接并寻找flag,但是已经知道网站的根目录/var/www/chall/level3

此时本想可以使用命令执行的函数执行命令获取目录信息,但是这里似乎做了限制,无法执行系统命令,所以这里需要介绍PHP的scandir()函数会将当先目录下的目录结构以数组的方式保存,请求http://level3.tasteless.eu/index.php?file=php://input [POST DATA:]print_r(scandir('/var/www/chall/level3'))?>得到flag文件的名称。

3cbce2c6f026

访问th3_th3_fl4g得到flag的值。

3cbce2c6f026

0x03 小小总结

想必上周总结的伪协议与本周文件包含结合的利用方法小伙伴已经GET到了,解题过程大致有如下3步骤:

1.分析站点给出的源代码

2.判断allow_url_fopen,allow_url_include的开启状态,来推测可以使用的伪协议

3.使用相应的伪协议执行代码获取flag

当无法判断allow_url_fopen,allow_url_include的开启状态时,可逐一尝试如下的请求判断哪些能够执行,如果有上传功能那么可能是考phar或zip等压缩流的知识点。

PHP 读文件和代码执行的方式:1.?file=data:text/plain,

2.?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

3.?file=php://input [POST DATA:]

4.?file=php://filter/read=convert.base64-encode/resource=xxx.php

……

0x04扩展小知识

虽然本题allow_url_fopen是off的状态,所以是无法使用远程文件包含的,如果是ON的话就需要使用文件包含读取anti_rfi.php文件,查看文件中的源码了。

如,使用http://level3.tasteless.eu/index.php?file=php://input [POST DATA] 读取anti_rfi.php文件的源码信息。

3cbce2c6f026

从源码中可以看到使用了正则匹配http://, data 匹配到了,返回hacker detected,但是并没有匹配ftp://所以使用ftp://也是一个思路。

3cbce2c6f026

3cbce2c6f026

3cbce2c6f026

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值