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