首页 > 后端开发 > 正文

白说:php反序列化之pop链(PHP代码审计入门)

2024-12-28 12:02:53 | 我爱编程网

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

本文目录一览:

白说: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反序列化之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

免责声明:文章内容来自网络,如有侵权请及时联系删除。
标签: PHP
与“白说:php反序列化之pop链(PHP代码审计入门)”相关推荐
白说:php反序列化之pop链(php array_pop 删除数组最后一个元素实例)
白说:php反序列化之pop链(php array_pop 删除数组最后一个元素实例)

白说:php反序列化之pop链最近在CTF比赛中注意到,PHP序列化与反序列化漏洞中的POP链似乎变得越来越频繁。因此,我决定撰写这篇文章,对POP链的构造进行一些探讨。本文旨在为那些希望了解这一主题的初学者提供一些参考,而非深入研究。如有不当之处,欢迎指正,共同进步。序列化与反序列化是PHP中两个重要概念。在PHP中,可以通过定义“类”来组织代码,类中可以包含变量和方法。当我们实例化

2024-12-06 22:36:35
php代码审计函数缺点 代码审计学php还是java
php代码审计函数缺点 代码审计学php还是java

php代码审计1、前期准备,安装相关软件,如Seay源代码审计系统;2、获得源码,在网上下载各种网站源码,安装网站;3、审计方法,通读全文法、敏感函数参数回溯法;4、定向功能分析,根据程序的业务逻辑来审计,用浏览器逐个访问,看看程序有哪些功能,根据相关功能推测可能存在的漏洞;5、审计的基本流程,先整体了解,再根据定向功能法针对每一项功能进行审计。代码审计学php还是jav

2024-08-19 15:39:38
php反序函数 几种反序列化漏洞
php反序函数 几种反序列化漏洞

PHP反序列化面向对象的PHP编程中,类和对象是核心概念。类可以看作是模板或蓝图,而对象则是基于类实例化的具体实体。对象封装了属性和方法,属性相当于变量,方法则类似于函数,它们共同构成了对象的功能和状态。序列化是将对象的状态信息转换为可以存储或传输的格式的过程。这个过程是针对对象的,而不是类。通过使用`serialize()`函数,可以将对象序列化为字符串,便于数据交换。序列化后

2024-09-24 08:28:10
PHP代码审计-sprintf函数中的安全问题(代码审计Day7 - parse_str函数缺陷)
PHP代码审计-sprintf函数中的安全问题(代码审计Day7 - parse_str函数缺陷)

PHP代码审计-sprintf函数中的安全问题在PHP代码审计中,对sprintf函数的安全问题进行探讨。sprintf与vsprintf相似,都是用于格式化字符串输出,但vsprintf在传参时使用数组,其余行为与sprintf相同。需要注意的是,sprintf具有自动类型转换功能。当格式与输入数据类型不匹配时,sprintf会自动截断输入。这就导致程序员可能忽视对特定格式的强制类型转换,

2024-12-26 02:12:56
php中函数的参数不可以设定默认值(php代码审计学习之函数缺陷)
php中函数的参数不可以设定默认值(php代码审计学习之函数缺陷)

php中函数的参数不可以设定默认值是可以设定默认值的。根据查询PHP中文网得知,php中函数的参数是可以设定默认值的,这样可以在调用函数时省略一些可选的参数,或者使用预设的值。php中函数的参数的默认值必须是常量表达式,不能是变量,类成员,或者函数调用等。另外,注意当使用默认参数时,任何默认参数必须放在任何非默认参数的右侧,否则,函数将不会按照预期的情况工作。php代码审计学习之

2024-12-05 20:11:04
python自动化入门需要多久?
python自动化入门需要多久?

python自动化入门需要多久?学习看个人基础,从经验来看,有如下建议:如果是自学,从零基础开始学习Python的话,依照每个人理解能力的不同,大致上需要一年半左右的时间,至于能不能学好要看你自己的领悟了,至于找到工作那就不好说了。一切要看你学的效果。当然,如果有其它编程语言的经验,入门还是非常快的,大概需要2~3个月可以对上手Python语言编写一些简单的应用。无论是新

2024-02-29 08:41:52
到底什么是PHP序列化?
到底什么是PHP序列化?

到底什么是PHP序列化?在PHP中,序列化用于存储或传递PHP的值的过程中,同时不丢失其类型和结构。本文讲述PHP序列化的四种方案,感兴趣的可以了解一下序列化是将变量转换为可保存或传输的字符串的过程;反序列化就是在适当的时候把这个字符串再转化成原来的变量使用。这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性。1、什么是PHP序列化——serialize和un

2024-07-30 19:25:07
编程小白怎么学习Python呀_python编程入门自学
编程小白怎么学习Python呀_python编程入门自学

编程小白怎么学习Python呀_python编程入门自学python学习的基本步骤如下:python基础,了解python的数据类型python爬虫,了解网页结构,了解python爬虫知识,了解数据库知识python数据分析,了解数据分析库python机器学习,了解建模知识这是学习python的基本学习框架,都是和数据在打关系,从收集数据,整理数据,到数据建模

2023-12-25 16:14:06