php发展

注册

 

发新话题 回复该主题

漏洞分析ThinkPHP5任意代码执 [复制链接]

1#

一、前言

ThinkPHP是为了简化企业级应用开发和敏捷WEB应用开发而诞生的轻量级PHP开发框架,具有免费开源、快速、简单且面向对象等特点。在ThinkPHP的5.*版本中存在安全隐患,由于ThinkPHP5框架对控制器名没有进行足够的安全检测,导致在没有开启强制路由的情况下,可能出现getshell漏洞。受影响的版本包括5.0和5.1。

本期安仔课堂,ISEC实验室的*老师将为大家介绍ThinkPHP5的相关知识点,欢迎感兴趣的朋友一起交流学习。

二、漏洞分析

该漏洞源于ThinkPHP5框架底层对控制器名过滤不严,允许黑客通过url调用Thinkphp框架内部的敏感函数,出现getshell漏洞。具体代码实现如下:图12.1

thinkphp/library/think/App.php

首先看到routecheck代码,由于没有在配置文件上定义任何路由,所以默认按照图一的方式进行解析调度。如果开启强制路由模式,会直接抛出错误,这时通过Route::import命令加载路由,继续跟进路由。图2

2.2

thinkphp/library/think/Route.php

可以看到tp5在解析URL的时候只是将URL按分割符分割,并没有进行安全检测。继续分析:图3其中,渗透测试人员最为关心的是Exchange对外提供的访问接口,以及使用的加密验证类型。

2.3

thinkphp/library/think/App.php

可以看到:由于程序并未对控制器进行有效的安全过滤和检查,因此测试人员可以通过引用“\”来调用任意方法。图4

2.4

跟进到module方法

图5在测试时注意使用一个已存在的module,否则会抛出异常,无法继续运行。此处直接从之前的解析结果中获取控制器名称以及操作名,无任何安全检查。图6

2.5

跟进到实例化Loader控制器方法

图7可以看到如果控制器名中有“\”,就直接返回。回到“thinkphp/library/think/App.php”的module方法,正常情况下应该获取到对应控制器类的实例化对象,而我们现在得到了一个“\think\App”的实例化对象,通过url调用其任意的public方法,同时解析url中的额外参数,当作方法的参数传入。我们可以调用invokeFunction这个方法,构造payload为:图8

三、漏洞利用

所有基于tp5.0框架建设的网站都受此漏洞的影响。

3.1

测试该漏洞点是否被修复

图9网址后面直接拼接以上代码,执行之后发现出现phpinfo页面,说明漏洞存在。图10

3.2

在public目录下创建insfo.php

图11

修改漏洞利用代码,直接在public目录下创建一个名为insfo.php的一句话木马。图12

3.3

删除insfo.php文件

图13

四、解决方案

直接添加补丁,升级ThinkPHP版本,开启强制路由,在ThinkPHP5.0版本的thinkphp/library/think/App.php,Module类的获取控制名处添加如下代码,正则过滤p>图14

互了个动

小伙伴们,本期内容到这里就结束啦,你Get到了吗?欢迎大家于文末留言,分享你的宝贵见解、疑问、补充~与ISEC实验室大神互动的机会来啦!速速行动起来撒!

安胜作为国内领先的网络安全产品及服务提供商,秉承“创新为安,服务致胜”的经营理念,专注于网络安全类产品的生产与服务;以“研发+服务+销售”的经营模式,“装备+平台+服务”的产品体系,在技术研究、研发创新、产品化等方面已形成一套完整的流程化体系,为广大用户提供量体裁衣的综合解决方案!

我们拥有独立的技术及产品的预研基地—ISEC实验室,专注于网络安全前沿技术研究,提供网络安全培训、应急响应、安全检测等服务。此外,实验室打造独家资讯交流分享平台—“ISEC安全e站”,提供原创技术文章、网络安全信息资讯、实时热点独家解析等。

承担全国两会网络安保工作;

承担青岛上合峰会网络安保工作。

承担全国两会网络安保工作;

承担金砖“厦门会晤”网络安保工作;

承担北京“一带一路”国际合作高峰论坛网络安保工作;

承担中国共产*第十九次全国代表大会网络安保工作;

承担第四届世界互联网大会网络安保工作。

承担全国两会网络安保工作;

为贵阳大数据与网络安全攻防演练提供技术支持;

承担G20峰会网络安保工作;

承担第三届世界互联网大会网络安保工作。

承担第二届世界互联网大会网络安保工作。

不忘初心、砥砺前行;未来,我们将继续坚守、不懈追求,为国家网络安全事业保驾护航!

预览时标签不可点
分享 转发
TOP
发新话题 回复该主题