某cms前台代码执行

某cms前台代码执行

0x1 漏洞分析

漏洞文件:Application/Weibo/Model/ShareModel.class.php

漏洞分析:

 

ShareController控制器的shareBox方法,获取到query参数进行urldecode,然后parse_str处理,然后设置模板变量,调用display。

控制器里面并没有对传入的$query参数进行处理,那么可能会在模板里面进行处理,我们去看一下模板内容。

 

第9行,将模板变量里面的$parse_array转入Weibo/Share/fetchShare方法。这里的$parse_array是由我们的$query进行parse_str处理的,所以这个值可控。然后去看一下调用的方法。

 

40行调用了getInfo方法,跟进去看一下

 

D方法是用于实例化自定义模型类,传入一个param数组,然后调用D方法获取实例化后的模型类,在调用到指定的方法传入指定的参数。那么就代表我们是可以用该方法调用任意模型类的需要传入一个参数的任意方法。那我们去找一找可以利用的模型类

先看一下thinkphp本身框架的model类

 

找到一个可以实现sql注入的一个方法。但是我们可以尝试去寻找能实现代码执行的方法。

 

找到一个可以实现代码执行的方法,该方法是需要传入两个参数的,如果$val[4]=function,就会从$val数组里面取得一些值,传入到call_user_func_array函数中,也就可以实现代码执行。但是因为要传入两个参数,所以并不能直接利用,先记录一下,可能后面会用到这个函数。

经过一段时间的查找,我们找到了一个model的方法可以让我们实现代码执行

 

该方法位于Common\Model\ScheduleModel类的341行。

这里传入一个schedule数组然后对其中的method值进行explode,args值进行parse_str,然后又是调用了D方法实例化model,再调用方法。这里我们是可以控制调用方法第二个参数的,结合我们上面找到的_validationFieldItem方法。构造poc,就可以实现代码执行。

0x2 漏洞验证

 

猜你喜欢

转载自www.cnblogs.com/flipfi/p/11228606.html
今日推荐