| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> (日更)PHP反序化漏洞解析(3) 漏洞利用条件及利用实例 XCTFWeb_php_unserialize -> 正文阅读 |
|
[PHP知识库](日更)PHP反序化漏洞解析(3) 漏洞利用条件及利用实例 XCTFWeb_php_unserialize |
------------------------------------------------------------------------------------------------------------------ 昨天打了一场CTF,断更了一天。。。 ------------------------------------------------------------------------------------------------------------------ ?----------------------------------------------------------------------------------------------------------------------------- 之前的文章我们提到了4个函数,serialize,unserialize,__sleep(),__wakeup(); 并了解了他们之间的关系。 但是PHP中除了__sleep(),__wakeup();还有很多魔法函数,这里不一一列出,在遇到不认识的魔法函数时,可以去单独学习一下。 反序化漏洞产生条件1.unserialize的参数可控(可以传参) 2.存在魔法函数 题目示例题目来源 XCTF ?题目给出需要利用反序化漏洞进入场景 ?审计一下代码(注释是参考这里一位大哥的write up)
?这里利用到的魔法函数有__construct(),__destruct(),wakeup(),
并且存在unserialize函数可以传参。 --------------------------------------------------------------------------------------------------------------------------------- 满足漏洞产生条件 1.unserialize的参数可控(可以传参) 2.存在魔法函数 --------------------------------------------------------------------------------------------------------------------------------- ????????????????????????????? 重点来了 我们对传入一个参数var后,函数的执行顺序进行梳理。 1.传参后isset判断是否为空,为空直接返回index.php 2.对参数var进行base64解码 3.preg_match进行正则匹配 4.正则匹配后: 1.__construct()函数初始化,把file=index.php初始化, 用得到的参数覆盖掉file值。 2.在调用unserialize反序列化var之前,自动调用__wakeup()函数 __wakeup()函数判定现在的file值(现在是我们传入的file值)是否为index.php,如果不是 就修改file值为index.php 5.调用unserialize函数反序化var值. 6.调用完unserialize函数后,__destruct()函数将输出当前file值的源码。 ????????????????????????????? 抓住反序化漏洞的关键上面步骤4.2是反序化漏洞的关键,反序化问题其实并不是出在serialize,unserizlize函数上, 而是这些随着serialize,unserizlize使用而自动调用的魔法函数存在隐患--------(一旦某些函数存在绕过,程序可能就不会按照正常顺序执行,从而导致意想之外的结果) 序列化字符串中表示对象属性个数的值大于 真实的属性个数时会跳过__wakeup的执行 解题步骤1.构造Demo对象传入file值fl4g.php 2.求出对创建的Demo对象序列化:结果为:O:4:"Demo":1:{s:10:" Demofile ";s:8:"fl4g.php";} 3.在对象名长度值‘4’,添加+,结果为: O:+4:"Demo":1 {s:10:" Demofile ";s:8:"fl4g.php";}??????? //绕过正则 4.修改对象属性个数 ‘1’ 这里可以任意换成一个数字,我改个3 结果为: O:+4:"Demo":3 {s:10:" Demofile ";s:8:"fl4g.php";}?????? //绕过wakeup函数 5.base64编码 下面给出运行代码
结果
所以得到payload
可以换成自己题目的url直接去用。 —————————————————————————————————————————— 对于这道题目补充2个细节 1.要想绕过正则匹配,就要满足的条件:看的懂正则 分析正则:if (preg_match('/[oc]:\d+:/i', $var) [oc] 匹配o或者c \d 匹配任意一个10进制的数 + 匹配前面的字符 1-N 次 i 表示不区分大小写 在前面添加一个加号可以绕过。 2.这里的 file 变量为私有变量,所以序列化之后的字符串开头结 尾各有一个空白字符(即%00),字符串长度也比实际长度大 2,如果将序列化结 果复制到在线的 base64 网站进行编码可能就会丢掉空白字符。所以可以直接使用我的payload,或者自己在php环境中运行代码得到,推荐一个在线php运行网站。 PHP 在线工具 | 菜鸟工具https://c.runoob.com/compile/1/--------------------------------------------------------------------------------------------------------------------------------- 这一节介绍了如何寻找和利用反序化漏洞点,下一节介绍php反序化链构造。 估计是日更不了了。 |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/27 21:09:04- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |