前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入 unserialize() 函数之RCE漏洞身份验证绕过及注入

深入 unserialize() 函数之RCE漏洞身份验证绕过及注入

作者头像
字节脉搏实验室
发布2020-10-27 11:02:37
1.2K0
发布2020-10-27 11:02:37
举报
文章被收录于专栏:字节脉搏实验室

文章源自-投稿

作者-挽梦雪舞

继续我们上次的讨论,我们聊到了PHP的反序列化如何导致漏洞,以及攻击者如何利用POP链来实现RCE攻击。

今天我们接着讨论攻击者利用unserialize() 漏洞的其他骚操作。那么即使无法进行RCE攻击,攻击者仍可以使用该漏洞来实现身份验证绕过和SQL注入。

一、先来谈谈身份验证绕过:

除了RCE攻击,unserialize() 通常还被用于绕过应用程序的身份验证控制。目前我了解到的

有两种方法可以做到这一点:

1.通过控制用作访问控制的对象属性。

2.利用类型混淆问题来欺骗应用程序。

但是要注意这两种方法都取决于最终用户可以控制传递给unserialize()的对象的情况。

二、通过控制对象属性来绕过身份验证

其中,攻击者利用反序列化漏洞中最简单最常见的方法之一是控制对象属性来绕过身份验证,示例代码如下:

我们假设应用程序在注册过程中调用了一个名为User的类来传递用户数据,用户来填写一个表格,数据将通过序列化后的User对象传递给后端。

最终用户控制User对象,然后可以像下面这样简单地操作对象,并注册为admin。

三、使用类型变戏法(type juggling)绕过身份验证

这里继续介绍攻击者利用反序列化漏洞实现身份验证绕过的另一种方法:利用PHP的类型处理功能。

由于攻击者可以完全控制传递到应用程序中的对象,因此他还可以控制对象属性的变量类型。然后控制属性的变量类型来控制PHP输入变量,从而绕过访问控制。

例如这是应用程序用于登录admin的代码:

上那么对于上面的代码,攻击者可以提交如下的POST,以admin身份登录:

此时,当 (0 == “Admin_Password”) 在PHP中计算为True时,开始执行。而当PHP用于比较不同类型的变量时,它将尝试将它们转换为通用变量类型。在这种情况下, “Admin_Password” 将转换为整数0,此时 (0 == “Admin_Password”)与 (0 == 0) 等价。

四、SQL注入

如果条件允许,unserialize() 漏洞也可能导致SQL注入。下面是一个如何利用它的示例。

> 相关详细文献参考文末链接

这里具体谈下使用POP链实现SQL注入,假设某个应用程序在代码中的某处执行了此操作:

它定义了Example3类,并且从POST参数数据中反序列化了未经处理的用户输入

__toString() 是一个 magic 函数,对于它的用法,当将一个类视为字符串时会被调用。在这种情况下,将Example3实例视为字符串时,它会返回obj属性getValue() 的结果。

不仅如此,继续假设我们在应用程序中某处还定义了类SQL_Row_Value。它具有一个名为getValue() 的方法,并执行一个SQL查询。具体讲,SQL查询从SQL_Row_Value实例的 _table属性获取输入。

进行到这里已经到尾声了,攻击者可以通过控制实现SQL注入 obj到Example3:

下面提供的示例代码将会创建一个Example3与obj集到SQL_Row_Value,同时用_table设置为字符串“SQL Injection”

这样,只要将攻击者的Example3实例视为字符串,就会执行obj的get_Value()。攻击者现在可以限制SQL的注入,因为他可以控制传递到SQL查询 “SELECT * FROM { this->_table} WHERE id = “ . (int)

References:

图源自互联网

https://owasp.org/www-community/vulnerabilities/PHP_Object_Injection

https://owasp.org/www-community/attacks/SQL_Injection

https://medium.com/@vickieli/diving-into-unserialize-pop-chains-35bc1141b69a

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 字节脉搏实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档