0

0

解析PHP对象流入漏洞

php中文网

php中文网

发布时间:2016-06-13 12:14:44

|

1204人浏览过

|

来源于php中文网

原创

解析PHP对象注入漏洞



0、前言

逛乌云知识库的时候看到一篇有趣的译文:http://drops.wooyun.org/papers/4820

说的是一种注入方式,叫对象注入。对象也能注入?

是的,只要是存在污染数据,没有什么是不可能注入的,但是这个漏洞有点太古怪了,所以我觉得有趣。

 

1、原理

在程序编写的时候,往往需要序列化一些运行时数据,所谓序列化就是按照一定的格式将运行时数据写入本地文件。这样做可以对数据进行本地保存,用的时候直接读文件就可以把运行时产生的数据读出。在PHP中就是serializeunserialize函数了。

能够注入的原理就是在反序列化的时候,引入了污染数据造成的,比如:

$obj = unserialize($_GET[injection]) ;

通过这个语句,我们可以自己按照序列化数据的格式进行构造,得到我们想要的对象$obj

有人就要问了,你仅仅得到这个对象$obj有啥用?先看看下面的实例。

 

2、情景

该情景也是来源于译文中的demo,这里还原一下:


" . $this->filename ;        return file_get_contents($this->filename) ;                    }} // Main User class class User{    // Class data     public $age = 0;    public $name = '';     // 允许对象作为一个字符串输出上面的data     public function __toString()    {        return 'User ' . $this->name . ' is ' . $this->age . ' years old. 
'; }} // 用户可控 $obj = unserialize($_GET['usr_serialized']); // 输出 __toStringvar_dump($obj) ;echo $obj;?>

上面的代码是从用户可控的数据获取一个序列化数据,然后调用unserialize方法对$_GET['usr_serialized']进行反序列化,那么这个$obj就可以被我们控制了。

正常的方式是提交:

http://127.0.0.1/code/objin.php?usr_serialized=O:4:"User":2:{s:3:"age";i:20;s:4:"name";s:4:"John";}

上面的序列化数据是一个User类的对象,其中$age=20, $name=John

这时,echo $obj ;直接echo对象,就能调用魔术方法__toString,在User类中已经对这个魔术方法进行了重载,即输出一段字符串,运行效果如下:


上面的代码是从用户可控的数据获取一个序列化数据,然后调用unserialize方法对$_GET['usr_serialized']进行反序列化,那么这个$obj就可以被我们控制了。

正常的方式是提交:

http://127.0.0.1/code/objin.php?usr_serialized=O:4:"User":2:{s:3:"age";i:20;s:4:"name";s:4:"John";}

上面的序列化数据是一个User类的对象,其中$age=20, $name=John

这时,echo $obj ;直接echo对象,就能调用魔术方法__toString,在User类中已经对这个魔术方法进行了重载,即输出一段字符串,运行效果如下:

 

3、漏洞挖掘

这类漏洞相当隐蔽,但是一旦出现效果很到位。挖掘主要是找找unserialize函数中的参数是否是污染数据。找到相应的控制位置,再看看哪个类可以利用起来完成我们的攻击,比如本情景中的FileClass类。



相关专题

更多
虚拟号码教程汇总
虚拟号码教程汇总

本专题整合了虚拟号码接收验证码相关教程,阅读下面的文章了解更多详细操作。

29

2025.12.25

错误代码dns_probe_possible
错误代码dns_probe_possible

本专题整合了电脑无法打开网页显示错误代码dns_probe_possible解决方法,阅读专题下面的文章了解更多处理方案。

20

2025.12.25

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

37

2025.12.25

word转换成ppt教程大全
word转换成ppt教程大全

本专题整合了word转换成ppt教程,阅读专题下面的文章了解更多详细操作。

6

2025.12.25

msvcp140.dll丢失相关教程
msvcp140.dll丢失相关教程

本专题整合了msvcp140.dll丢失相关解决方法,阅读专题下面的文章了解更多详细操作。

2

2025.12.25

笔记本电脑卡反应很慢处理方法汇总
笔记本电脑卡反应很慢处理方法汇总

本专题整合了笔记本电脑卡反应慢解决方法,阅读专题下面的文章了解更多详细内容。

6

2025.12.25

微信调黑色模式教程
微信调黑色模式教程

本专题整合了微信调黑色模式教程,阅读下面的文章了解更多详细内容。

5

2025.12.25

ps入门教程
ps入门教程

本专题整合了ps相关教程,阅读下面的文章了解更多详细内容。

4

2025.12.25

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

218

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 9.6万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.8万人学习

C# 教程
C# 教程

共94课时 | 5.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号