记对OpenSNS的一次代码审计
字数 1357 2025-08-18 11:38:45

OpenSNS后台getshell漏洞分析与教学文档

1. 漏洞概述

OpenSNS是一款由想天科技开发的综合性社交软件,该软件在模板上传功能中存在安全漏洞,允许攻击者通过精心构造的zip压缩包实现后台getshell。

2. 漏洞环境

  • 软件名称: OpenSNS开源版
  • 漏洞类型: 后台getshell
  • 受影响文件: ./Application/Admin/Controller/ThemeController.class.php (第170行)
  • 下载地址: http://www.opensns.cn/home/index/download.html

3. 漏洞原理

漏洞存在于模板上传功能中,程序对上传的zip文件进行解压时存在以下问题:

  1. 虽然对上传文件后缀名进行了过滤,但仅进行了基础检查
  2. 解压过程中未对解压出的文件内容进行安全过滤
  3. 解压后的文件直接写入硬盘,导致恶意代码可被执行

4. 漏洞详细分析

4.1 漏洞代码位置

漏洞主要存在于ThemeController.class.php文件的模板上传功能中,关键问题在于:

  1. 文件上传后进行了两次后缀名检查
  2. 检查通过后直接解压zip文件
  3. 解压后的文件未经任何内容检查直接写入服务器

4.2 攻击面

攻击者可以通过以下方式利用该漏洞:

  1. 构造包含恶意代码的zip压缩包
  2. 通过后台模板上传功能上传该压缩包
  3. 系统自动解压并写入恶意文件
  4. 通过web访问该文件执行任意代码

5. 漏洞复现步骤

5.1 准备工作

  1. 搭建OpenSNS环境
  2. 获取后台管理员权限

5.2 复现过程

  1. 定位上传点:登录后台,找到模板上传位置
  2. 构造恶意zip
    • 创建一个包含webshell的php文件(如shell.php
    • 将该文件压缩为zip格式
  3. 上传zip文件
    • 通过模板上传功能上传构造的zip文件
    • 系统会自动解压并写入服务器
  4. 验证漏洞
    • 访问解压后的webshell文件(如http://target.com/upload/path/shell.php
    • 使用中国菜刀等工具连接验证

6. 漏洞修复方案

6.1 临时解决方案

  1. 禁止前台访问模板上传目录
  2. 限制后台模板上传功能权限

6.2 根本解决方案

  1. 文件内容检查:在解压后对文件内容进行安全检查
  2. 文件类型限制:限制解压后文件的类型,禁止.php等可执行文件
  3. 目录权限控制:设置解压目录不可执行权限
  4. 文件名过滤:检查解压后的文件名,防止目录穿越攻击

7. 代码审计技巧

通过该漏洞可以总结以下审计经验:

  1. 关注文件上传功能:特别是支持压缩包解压的功能
  2. 检查解压流程:解压后是否进行内容检查
  3. 权限控制:上传目录是否设置了适当权限
  4. 过滤完整性:检查过滤机制是否全面(不仅检查上传文件,还要检查解压内容)

8. 防御建议

对于开发类似功能的开发者,建议:

  1. 使用白名单机制限制上传文件类型
  2. 解压前验证zip文件结构
  3. 解压后对文件内容进行安全检查
  4. 设置上传目录不可执行
  5. 对上传文件进行重命名
  6. 记录上传操作日志

9. 总结

该漏洞是典型的文件上传漏洞,由于开发者在设计时只考虑了上传时的安全检查,而忽略了解压后的安全控制,导致攻击者可上传恶意代码。在代码审计时应特别注意这类"二次处理"环节的安全检查。

OpenSNS后台getshell漏洞分析与教学文档 1. 漏洞概述 OpenSNS是一款由想天科技开发的综合性社交软件,该软件在模板上传功能中存在安全漏洞,允许攻击者通过精心构造的zip压缩包实现后台getshell。 2. 漏洞环境 软件名称 : OpenSNS开源版 漏洞类型 : 后台getshell 受影响文件 : ./Application/Admin/Controller/ThemeController.class.php (第170行) 下载地址 : http://www.opensns.cn/home/index/download.html 3. 漏洞原理 漏洞存在于模板上传功能中,程序对上传的zip文件进行解压时存在以下问题: 虽然对上传文件后缀名进行了过滤,但仅进行了基础检查 解压过程中未对解压出的文件内容进行安全过滤 解压后的文件直接写入硬盘,导致恶意代码可被执行 4. 漏洞详细分析 4.1 漏洞代码位置 漏洞主要存在于 ThemeController.class.php 文件的模板上传功能中,关键问题在于: 文件上传后进行了两次后缀名检查 检查通过后直接解压zip文件 解压后的文件未经任何内容检查直接写入服务器 4.2 攻击面 攻击者可以通过以下方式利用该漏洞: 构造包含恶意代码的zip压缩包 通过后台模板上传功能上传该压缩包 系统自动解压并写入恶意文件 通过web访问该文件执行任意代码 5. 漏洞复现步骤 5.1 准备工作 搭建OpenSNS环境 获取后台管理员权限 5.2 复现过程 定位上传点 :登录后台,找到模板上传位置 构造恶意zip : 创建一个包含webshell的php文件(如 shell.php ) 将该文件压缩为zip格式 上传zip文件 : 通过模板上传功能上传构造的zip文件 系统会自动解压并写入服务器 验证漏洞 : 访问解压后的webshell文件(如 http://target.com/upload/path/shell.php ) 使用中国菜刀等工具连接验证 6. 漏洞修复方案 6.1 临时解决方案 禁止前台访问模板上传目录 限制后台模板上传功能权限 6.2 根本解决方案 文件内容检查 :在解压后对文件内容进行安全检查 文件类型限制 :限制解压后文件的类型,禁止.php等可执行文件 目录权限控制 :设置解压目录不可执行权限 文件名过滤 :检查解压后的文件名,防止目录穿越攻击 7. 代码审计技巧 通过该漏洞可以总结以下审计经验: 关注文件上传功能 :特别是支持压缩包解压的功能 检查解压流程 :解压后是否进行内容检查 权限控制 :上传目录是否设置了适当权限 过滤完整性 :检查过滤机制是否全面(不仅检查上传文件,还要检查解压内容) 8. 防御建议 对于开发类似功能的开发者,建议: 使用白名单机制限制上传文件类型 解压前验证zip文件结构 解压后对文件内容进行安全检查 设置上传目录不可执行 对上传文件进行重命名 记录上传操作日志 9. 总结 该漏洞是典型的文件上传漏洞,由于开发者在设计时只考虑了上传时的安全检查,而忽略了解压后的安全控制,导致攻击者可上传恶意代码。在代码审计时应特别注意这类"二次处理"环节的安全检查。