今天我爱编程网小编整理了白说:php反序列化之pop链(PHP代码审计入门)相关内容,希望能帮助到大家,一起来看下吧。
本文目录一览:

白说:php反序列化之pop链
最近在CTF比赛中注意到,PHP序列化与反序列化漏洞中的POP链似乎变得越来越频繁。因此,我决定撰写这篇文章,对POP链的构造进行一些探讨。本文旨在为那些希望了解这一主题的初学者提供一些参考,而非深入研究。如有不当之处,欢迎指正,共同进步。
序列化与反序列化是PHP中两个重要概念。在PHP中,可以通过定义“类”来组织代码,类中可以包含变量和方法。当我们实例化一个类时,某些方法可以被手动调用,而有些方法在特定条件下会自动调用,这些自动调用的方法被称为魔术方法。序列化过程是将类转换为字符串,这个字符串包含了类的变量信息,但不包括方法信息。反序列化则是将这个字符串恢复为原始的类。
序列化与反序列化漏洞正是基于上述特点产生的。如果可以控制序列化后的字符串,理论上就可以影响反序列化后的类行为。例如,假设有一个环境,其中包含一个名为person的类,该类中有一个敏感函数eval(),可以在特定条件下执行任意代码。在反序列化时,这个特定的字符串被还原为person类,从而触发了__wakeup()魔术方法,进而执行eval()函数。如果访问该页面时不传递参数,将返回一个默认信息;如果传递参数并成功反序列化,可以执行预设的命令,如ping。
序列化与反序列化漏洞的关键在于,虽然在序列化过程中无法直接控制类方法的行为,但可以通过修改变量的值来利用已存在的方法或魔术方法,或借助敏感函数来达到恶意目的。PHP序列化与反序列化过程的用户可控性,使得此类漏洞的利用成为可能。
POP链是一种序列化与反序列化漏洞的利用方式,它通过一系列魔术方法的调用,最终触发敏感函数,实现特定功能。例如,通过构造特定的序列化字符串,可以绕过正常的逻辑流程,达到执行任意命令的目的。
魔术方法是PHP中一类特殊的类方法,它们在特定的事件或条件下自动调用。了解魔术方法的工作机制对于构建POP链至关重要。魔术方法包括但不限于:__construct()、__destruct()、__sleep()、__wakeup()、__invoke()、__toString()和__get()。这些方法在类的实例化、销毁、序列化前、序列化后、调用方法或访问私有变量时自动触发。
通过构建POP链,可以逐步调用类方法直至触发敏感函数。这通常需要对PHP魔术方法有深入理解,并且在实际应用中,构建POP链往往需要仔细分析代码,识别可能的触发点。
总结而言,PHP序列化与反序列化漏洞的利用依赖于对魔术方法的熟练掌握以及对代码逻辑的深入理解。尽管可以通过自动化工具来利用这些漏洞,但发现这类漏洞通常需要通过白盒审计或对流行的框架进行分析。如果网站使用了存在漏洞的开源框架且未进行相应的修补,就有可能成为攻击的目标。

PHP代码审计入门
代码审计目的旨在发现源代码中的bug与安全缺陷,需要掌握编程、安全工具使用、漏洞原理、修复方式与函数缺陷。小白应遵循从基础开始,逐步深入的学习路线。了解代码审计的基础知识,如HTML、JS与PHP语法、面向对象思想、项目开发与Web漏洞挖掘。
代码审计基础包括HTML、JS与PHP基础语法、面向对象编程、项目开发与Web安全工具的基本使用。掌握代码审计两种基本方式,即从开发者角度出发,利用面向对象编程与面向过程编程提升代码理解能力,独立挖掘与理解漏洞危害。
从个人角度出发,先做开发者,再转向代码审计。通过学习面向对象编程、编写项目、深入理解各种漏洞挖掘利用与PHP源码审计。审计思路应从代码理解、漏洞挖掘、修复策略等多维度进行。
PHP核心配置涉及文档存取限制、环境变量控制、外部程序执行限制、安全配置选项、敏感函数禁用、COM函数使用限制、全局变量注册、特殊字符处理、远程文件包含、错误显示控制等。
部署环境推荐使用PHPstudy 2018,集成开发环境选择Zend Studio/Phpstorm,数据库管理工具使用Navicat for MySQL 12,MySQL实时监控工具为MySQLMonitor,文本编辑工具使用Sublime_Text3,辅助工具包括Seay源代码审计系统、Search and Replace、Rips 0.55与渗透版火狐、BurpSuite、Sqlmap等。
手动调试代码、PHP的弱类型、学习漏洞函数、审计入门总结等内容覆盖了代码审计的实践与理论。弱类型特性、比较符号、数组函数、类型比较与转换等是理解PHP关键点。漏洞函数学习,包括全局变量/超全局变量、SQL注入、代码执行、命令执行、XSS攻击、文件上传、包含漏洞、任意文件操作、变量覆盖与反序列化等。
审计路线建议从简单开始,逐步深入:Demo-综合漏洞靶场-网上审计过的CMS-多入口CMS-单入口CMS-框架-函数缺陷。推荐Demo资源,了解实践与理论结合的重要性。
凡诺企业网站管理系统V3.0代码审计
我爱编程网(https://www.52biancheng.com)小编还为大家带来凡诺企业网站管理系统V3.0代码审计的相关内容。
0×00 前言
在掌控安全学院的聂风带领下,我们进行了一场关于凡诺企业网站管理系统V3.0代码审计的深入探讨。通过CNVD的发现,我们了解到该系统的后台存在SQL注入漏洞。自5月30日发布以来,这一漏洞已吸引了20多万的点击量,位列CNVD点击量排行榜的第三名。本文将带您一同深入审计该CMS,揭示其安全风险。
0×01 环境搭建
为了进行代码审计,我们采用了免费版源码(pcfinal.cn/channel/ecms...)和PHPstudy环境,以及Seay源代码审计系统作为工具。安装过程相对简单,只需正确配置数据库连接信息,导入默认数据,并将`index.php`重命名为`index.lock`,然后通过默认账号密码(admin admin)完成安装。
0×02 代码审计过程
安装完成后,审计工作正式开启。首先,我们分析了`install/index.php`文件中的函数调用,注意到数据会直接写入`/system/data.php`。尝试直接插入一句话木马时,发现CMS采取了相应的防御措施,即使连接失败,插入内容也被注释覆盖,故未能成功。
继续深入,我们发现`data.php`文件包含了数据库连接配置,确保了安全初始化。安装步骤包括正确配置数据库连接,导入默认数据,重命名`index.php`为`index.lock`。接下来,通过访问根目录`index.php`文件,我们观察到`inc.php`和`safe.php`文件在其中发挥了关键作用。
在`inc.php`中,我们关注到自定义函数`ism()`的实现,它实际上返回了`$dir.$t_path.index.php`。这表明系统的结构和文件引用是动态生成的。`safe.php`则引入了正则表达式,用于过滤GET、POST、Cookie参数,以防止SQL注入和XSS攻击。
在深入`index.php`文件时,我们注意到其中包含的`inc_head.php`和`inc_header.php`文件分别控制了Js、css链接方向和页面头部内容,这为可能的XSS攻击提供了入口。进一步探索`search.php`文件时,发现SQL查询语句中存在转译符号,这提示我们在后续审计中应特别关注编码问题。
通过审计,我们总结了以下几点关键风险点:
1. `s_path`的可控制性可能导致XSS攻击。
2. 多个表单和查询过程存在数据输出,可能成为XSS攻击的载体。
3. `search.php`中的SQL查询语句可能通过特殊构建的查询语句实现SQL注入。
4. 验证码机制存在绕过风险,密码字典破解可能有效。
5. 通过CSRF攻击配合DNS log注入,可实现密码获取。
0×03 总结
本文分享的代码审计过程和发现的漏洞仅是安全风险探讨的一部分。凡诺企业网站管理系统V3.0在设计与实现中,虽然采取了一定的安全防护措施,但仍存在多处潜在的安全风险。这些风险不仅限于本文所述,实际应用中,还需要对系统进行全面的安全评估和加固。审计过程不仅揭示了漏洞,也为开发人员提供了改进和加强系统安全性的方向。希望本文能为安全研究和实践提供有益的参考。
我爱编程网以上就是白说:php反序列化之pop链(PHP代码审计入门)全部内容,更多相关信息,敬请关注我爱编程网。更多相关文章关注我爱编程网:
www.52biancheng.com免责声明:文章内容来自网络,如有侵权请及时联系删除。