OpenSNS RCE分析
字数 1219 2025-08-05 08:19:35
OpenSNS 远程命令执行漏洞分析与利用
漏洞概述
OpenSNS 是一款基于 ThinkPHP3 开发的系统,仅支持 PHP5 环境。该系统存在一个远程命令执行漏洞,攻击者可以通过构造特定的请求实现任意代码执行。
漏洞分析
漏洞入口
漏洞入口位于 weibo/share/sharebox,通过 GET 请求提交 query 参数。
漏洞原理
-
变量覆盖漏洞:系统在处理
query参数时存在变量覆盖漏洞。 -
模板渲染流程:
- 通过
assign方法将$array数组存入$this->tVar['parse_array']中 - 使用
T函数获取模板文件 - 通过
display方法渲染模板
- 通过
-
W 函数调用:在模板渲染过程中调用
W函数,最终会调用weiboapp 下的widget控制层中的ShareWidget控制器的fetchshare操作。 -
模型调用:通过
D函数可以实例化任意模型并调用其 public 方法,且参数可控。
关键利用点
-
基类方法利用:
- 模型类继承自基类,可以调用父类的保护方法
- 当
D函数的第一个参数为空时,返回的是实例化的基类
-
危险方法:
_validationFieldItem方法中存在call_user_func_array调用- 通过控制参数可以实现任意函数调用
漏洞利用
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
参数解析:
app=Common:指定应用模块model=Schedule:指定模型method=runSchedule:指定方法id[method]:指定要调用的方法(_validationFieldItem)id[4]=function:设置验证类型为函数id[1]=assert:指定要调用的函数id[args]=jiang=phpinfo():函数参数id[0]=jiang:变量名
SSRF 利用
在 admin/curlmodel/curl 模型中存在 SSRF 利用点:
Payload:
?s=weibo/share/shareBox&query=app=Admin%26model=Curl%26method=curl%26id=http://127.0.0.1/
其他安全问题
后台任意文件下载
在后台下载主题功能中,$aTheme 参数可控,可导致目录穿越和任意文件下载。
后台任意文件上传
- 可以上传包含恶意文件的 ZIP 压缩包
- 文件会被解压到
Theme文件夹下
后台任意代码执行
系统存在自包含机制,无需攻击者访问即可执行恶意代码。
防御建议
- 对用户输入进行严格过滤和验证
- 限制模型方法的调用范围
- 升级到最新版本或使用 PHP7+ 环境
- 对后台功能加强权限控制
- 对文件操作进行路径检查和限制
总结
OpenSNS 的 RCE 漏洞源于不安全的参数处理和模型调用机制,结合变量覆盖漏洞,攻击者可以实现远程代码执行。系统还存在多个后台安全问题,建议管理员及时修复并加强安全防护。