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。后面两个也因为直接封掉了对目录写入的权限导致没法利用。
BY:先知论坛
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论