【代码审计】反序列化漏洞复现
2020-02-27 09:00:00 Author: mp.weixin.qq.com(查看原文) 阅读量:209 收藏

声明:Tide安全团队原创文章,转载请声明出处!文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

一、前言

   之前看到关于thinkphp5反序列化链的分析,很多文章并没有公布payload,并且感觉有很多细节没有阐述清楚,跳跃性很大,今天站在前人的肩膀上,就探讨一下ThinkPHP的反序列化问题!这里详细分析一下5.1.37版本。

二、利用条件

有一个内容完全可控的反序列化点,例如:unserialize(可控变量)

三、环境搭建

1、直接GitHub下载所需版本。

2、更改composer.json


3、执行命令:

composer install【在composer.json的目录】

4、代码如下


5、页面效果如下


四、漏洞复现

1、通过构建get参数payload,执行反序列化,最终实现代码执行【不明白为啥大佬都不公布这个payload,所以这里也打下码】

五、漏洞分析

1、首先我们进入到入口文件,构造反序列化的入口点。


2、该框架有个非常好玩的点,file_exists函数触发类__toString方法,这个也算是漏洞的入口了。通过全局搜索file_exists,在windows.php的文件中,存在一个被动触发的点,这个点在对象销毁时会触发。


下面这张图实现了被动触发


3、当一个对象以字符串的形式被执行时,包含__toString魔术方法的类,便被执行,同样搜索关键词__toString,全局搜索到的 __toString 方法其实不多,这里有两处都可以利用。它们的区别在于利用 think\Collection 构造的链要多构造一步,我们这里只分析链较短的 think\model\concern\Conversion



通过代码的跳转,__toSting的最终落脚点在toArray()的方法体里。要利用的代码如下:


分析getAttr()方法的结构体,我们可以控制$relation的值。


跳转到getData里面


     这里的$this->append是可以赋值的,还有$this-data【提示:这个值是在payload里面构造的】,也就是完全可控,所以这个$key也是可控,如果$key可控,也就是$relation,因为它来自$this->data[$key]【转型后的样子】,总体变成$可控类->visible(可变变量)。

    这里通过发散思维,就可以调用visible方法和__call的方法,理论实践,__call的方法可行,所以全局搜索,这里选择request.php里的魔术函数。


    因为这里$this->hook是可控的,可以直接在payload中直接构建,在call_user_func_array()函数中,传达一个数组为[‘’类名:’方法名’]的形式,既可以调用任一类中的方法。

   在之前的漏洞中,该框架存在RCE的漏洞,这个位置在request类里的input中。里面存在一个call_user_func($filter,$data)的接入点,如果直接调用input方法,在$name = (string) $name;转换的时候就会报错,所以需要找其他的input调用点。在param    方法调用了input,如果直接调用param方法和input出现同样的错误,在接着找调用param的方法,这里有isAjax和isPjax,因为第一参数可控【固定值】如下图:



  通过触发这个函数,就可以顺利来到input方法中,执行下面一段代码


  在getFilter中,通过构建payload进行$filter赋值,这里的值一般是可执行的系统函数,如system。赋值过程见下图:


  那么上图中的$data是可以通过get传值来赋值的,它是通过param方法传值的,里面合并了get参数的值,并传递给input方法,如下图所示


  到这里,array_walk_recursive里的参数,都可以控制了,那filterValue这个函数附张截图简单说明下,


  其中,value的形参对应的为data的值,filters为payload中构建的system函数,那么通过修改data的值,就行执行不同的系统命令,比如文章的第一张图,传值为whoami。最后附上流程导图。


六、漏洞修复

控制反序列化参数的值,必要时可以使用白名单的方式进行过滤控制。

E

N

D

guān

zhù

men

Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,目前聚集了十多位专业的安全攻防技术研究人员,专注于网络攻防、Web安全、移动终端、安全开发、IoT/物联网/工控安全等方向。

想了解更多Tide安全团队,请关注团队官网: http://www.TideSec.com 或长按二维码关注公众号:


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA==&mid=2247485596&idx=1&sn=860e0b3788c3ff60b31dd3b43d8649cf&chksm=ce5e2afdf929a3ebc538c5e472153ff653f960749eb26c1f315b2ee16939d8085ec5a6ddb597#rd
如有侵权请联系:admin#unsafe.sh