葡京游戏平台

安全事件
当前位置: 葡京游戏 >> 信息安全 >> 安全事件 >> 正文
thinkphp远程代码执行漏洞
发布时间:2018年12月11日 14:02  点击:[]

0x00前言

最近,thinkphp团队发布了版本更新https://blog.thinkphp.cn/869075,它修复了一个漏洞问题。

影响范围:5.x< 5.1.31,<=5.0.23

危害:远程执行代码

0x01漏洞原理

首先让我们看一下网址

http://localhost/public/index.html?s=index/\ think \ Container/invokeFunction

这是invokeFunction函数,它访问索引应用程序think \ Container控制器而不使用pathinfo

之所以不使用pathinfo,是因为如果使用pathinfo,控制器将自动转换为think,而Container将被视为一个函数。因为没有思考,所以绝对不可能(想想是命名空间)

让我们首先看看为什么控制器的名称是think \ Container

由于Container类不在控制器的目录中,因此无法使用Container直接访问它。它需要特殊操作

422302FB00878618D054E849DC7_6C0A7DFA_3B40.png

从上图中可以看出,Container类的名称空间是思考

让我们看看tp如何加载控制器

0A27E4CA99198C7AAFBAC208974_F86729B1_1709A.png

从上图中可以看出,该功能在控制器功能中。此功能位于App类

0828A31CBD605C98987083C4EE2_A9C5D6AD_30B2.jpg

因为在运行tp时会加载think \ Container,所以当你使用字符串think \ Container实例化控制器时,它将实例化Container类。然后我们将调用invokeFunction函数。

该功能有两个参数。

1146ECA62CCDA144CA9F781236C_F5C545AE_2F36.jpg

第一个参数是函数的名称。第二个参数是数组数组。函数在第一个参数中使用的参数,例如传递给aaa的函数,然后传递给vars [123,321]相当于调用aaa(123,321)

这里我们将函数传递给call_user_func_array,然后vars [0]传递我们想要执行的函数vars [1]的名称,以传递要执行的函数的参数。由于vars是一个数组,我们的get请求需要像这样写。

Vars []=函数名称& vars [1] []=参数

这是使用php的数组注入

此时,您可以开始使用远程代码来执行漏洞。例如,如果我们要执行系统函数,则其参数为whoami

我们的网址可以这样写成

http://localhost/public/index.html?s=index/\ think \ Container/invokeFunction& function=call_user_func_array& vars []=system& vars [1] []=whoami

然后你可以看到操作的结果

93CA8FB46D67814E441A7D6B7B0_5AC250B2_19CB.jpg

从上图中可以看出,系统('whoami')

已被执行。

上一条:2018安全事件汇编 下一条:ThinkPHP漏洞

关闭

办公地点:图书馆204、207;办公时间:周一至周五 8:00-11:30 14:30-17:30;
*办理个人业务请携带本人身份证件
0535-6903622(内线63622)网络故障
0535-6903644(内线63644)信息服务
0535-6885632(内线65632)一卡通
办公电话:
版权所有 山东葡京游戏平台工商学院 葡京游戏平台