(超详细)[NSSRound#8 Basic]MyPage

文章讲述了在遇到一个Web服务器只显示空白且无法直接读取文件时,如何通过理解PHP的文件包含机制和利用/proc/self/路径来绕过require_once的限制,最终成功读取到flag.php的内容,解密后得到CTF挑战的答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打开之后一片空白,通过改变大小写知道:

Apache/2.4.38 (Debian) Server at node1.anna.nssctf.cn Port 28160

猜测网站根目录可能在/var/www/html下

题目中也没有给提示,所以尝试读取index.php和flag.php文件

//读取文件源码
file=php://filter/read=convert.base64-encode/resource=index.php
显示:空白一片
file=php://filter/read=convert.base64-encode/resource=/var/www/html/index.php
显示:error.
//写入一句话木马
file=php://input
<?php phpinfo();?>
显示:error.

都没有用

猜测是require_once(),尝试绕过它

(require_once(),如果文件已包含,则不会包含,会生成致命错误(E_COMPILE_ERROR)并停止脚本)

搜索绕过方法:

先来了解一下PHP文件包含机制:

php的文件包含机制是将已经包含的文件与文件的真实路径放进哈希表中,正常情况下,PHP会将用户输入的文件名进行resolve,转换成标准的绝对路径,这个转换的过程会将…/、./、软连接等都进行计算,得到一个最终的路径,再进行包含。如果软连接跳转的次数超过了某一个上限,Linux的lstat函数就会出错,导致PHP计算出的绝对路径就会包含一部分软连接的路径,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值