OpenSNS RCE分析
OpenSNS 远程命令执行漏洞 漏洞分析 opensns是基于tp3开发的,仅支持php5 漏洞入口在 weibo/share/sharebox 通过 get请求提交query参数 这里存在变量覆盖的漏洞。 这里是 两个参数的示例。 跟进 assign 方法。 将 $array 数组,存进了 $this->tVar['parse_array'] 中,用于后续模板渲染中,提供对应的参
OpenSNS 远程命令执行漏洞
漏洞分析
opensns是基于tp3开发的,仅支持php5
漏洞入口在 weibo/share/sharebox

通过 get请求提交query参数
这里存在变量覆盖的漏洞。

这里是 两个参数的示例。
跟进 assign 方法。

将 $array 数组,存进了 $this->tVar['parse_array'] 中,用于后续模板渲染中,提供对应的参数。

T 函数就是获取模板文件,然后 display方法将其渲染呈现。
中间寻找并解析模板的就不看了,直接跟进到最后的php文件的地方。

这里又调用了 W 函数。

继续跟进

这里的A 函数有如下解释。


经过A 函数的处理,最后会去调用weibo app下 widget 控制层,ShareWidget控制器的fetchshare操作。
注意此处传入的 $param 参数,就是上面模板中传入的参数 $parse_array,也就是经过变量解析后的数组。


跟进 D函数

解释是实例化模型类,也就是 Model 文件夹下的,shareModel 模型,
跟进其getInfo 方法

注意这里,$param 我们完全可控,
我们是可以 实例化任意模型,并调用其public 方法的,并且可以 传入可控的参数。
寻找可以利用的模型的方法,但只限于一个参数的。
在所有app的模型文件下,全局搜一些危险函数,但都不太能利用,要么是私有的,但公有方法中把参数都写死了。
基本所有的模型类都继承一个基类,

可以在这里找找。


找到两个看起来可以用的,
再去其继承类里找实现,在 common/schedule/runschedule 中找到入口。

D 函数,如果提供第一个参数为空的的话,返回的是实例化的基类。

同时又因为此模型类继承基类,可以在其中调用父类的保护方法。
注意提供的参数
$return = D($method[0])->$method[1]($args, $schedule);
$schedule 是我们传入的 $param['id'],$arg 是 $schedule['arg'] 经过 parse_str 处理后的数组。
所以此处,并不能用 returnResult 方法来处理
_validationFieldItem 方法中,
$val[4] 可以控制为function
$val[6] 不传值,$arg 就会变成空数组,
然后在下面,
array_unshift($args, $data[$val[0]]);
这里 $data 是先前经过 parse_str 处理后的数组。
$val[0] 需要是解析前的变量名。

然后在下面的 call_user_func_array 处造成 RCE,由于使用 php5 的环境,直接用 assert 去任意代码执行。
利用
rce
payload
?s=weibo/share/shareBox&query=app=Common%26model=Schedule%26method=runSchedule%26id[method]=-%3E_validationFieldItem%26id[status]=1%26id[4]=function%26id[1]=assert%26id[args]=jiang=phpinfo()%26id[0]=jiang

SSRF
在 admin/curlmodel/curl 模型中,
有可控且可利用的 SSRF利用点。

但苦于此处即使将$result 返回,但没有显示位,不过可以ssrf并不依靠显示的其他利用,依然可以行得通。
?s=weibo/share/shareBox&query=app=Admin%26model=Curl%26method=curl%26id=http://127.0.0.1/
题外话
后台任意文件下载
后台的下载主题的地方,

$aTheme 可控,我们可以利用其穿越到任意目录,然后造成任意文件或文件夹下载。

后台任意文件上传
同时我们可以上传 zip文件,包里可以包含木马文件,

然后会解压到 Theme 文件夹下。
后台任意代码执行

这里他自产自销,都不用我们访问了,直接包含。

这三个点都是比赛时候审出来的,在日志中发现后台没有密码,操,都没继续往下看日志中有payload。后面两个也因为直接封掉了对目录写入的权限导致没法利用。
师傅能加一下你吗,我想学代码审计,请教你