达梦数据库写文件的方式探索

0x01 前沿

这篇文章整体算是《达梦数据库手工注入笔记》的续集,达梦作为国内优秀的信创数据库,在关基单位中拥有越来越大的用户使用量。

通过SQL注入来写文件一直以来都是SQL注入漏洞深入利用的一种方式,对于不同的数据库通常写文件的方式也是不一样的。通过笔者的探索发现,达梦数据库(以后简称DMSQL)写文件的方式也与其它数据库存在较大的差异。

DMSQL默认情况下是支持堆叠注入的(笔者试了官方给的java版本的SDK,其它版本未尝试),也就是说在注入的时候支持多语句,支持多语句为攻击者提供了对SQL注入漏洞进行深入利用的遐想,也使得本文利用DMSQL写文件的研究具有实际意义。

0x02 探索

熟悉渗透的小伙伴都会有一些通过SQL注入写文件的技巧,我们首先通过两种经典的写文件方式来探索达梦写文件的不同。

1) 通过into outfile方式写文件

在MySQL数据库中可以通过经典的into outfile来把查询结果保存在文件中,但是在DMSQL中并没有相应的语法,也没有into dumpfile的语法,如下图所示:

图片

2) 通过backup database方式写文件

在MSSQL数据库中可以通过备份的方式来写文件,而且在DMSQL中也存在相似的语法,如下图所示:

图片

本以为应该是以与MSSQL相似的手法就可以直接备份写文件,但在实际使用过程中发现并非如此,DM数据库默认是不允许进行备份的,必须首先开启归档模式才能进行备份。

图片

在默认安装的DM数据库中,要通过备份数据库的功能实现文件写入,完整的代码如下:

-- 使数据库转变为OPEN模式alter database open; -- 先完整的对数据 进行一次备份,目录不存在会自动创建backup database backupset 'C:\phpstudy_pro\WWW\xxx\';-- 新建一张表并向表中写入一条带有webshell的数据。其中DEM换成实际可以建表的库名CREATE TABLE "DEM"."EXP14"("id" INTEGER NOT NULL,"name" VARCHAR(50),"content" VARCHAR(50)) STORAGE(ON "MAIN", CLUSTERBTR) ;insert into "DEM"."EXP14" values(1,'aaa', '<?php phpinfo(); ?>');-- 增量备份,,并定义保存文件路径和调试文件路径BACKUP DATABASE increment BACKUPSET 'C:\phpstudy_pro\WWW\121.php' TRACE FILE  'C:\phpstudy_pro\WWW\213.php' TRACE LEVEL 2;

使用上面的代码可以在系统上生成文件,由于DM备份时可以指定保存文件的路径,生成的文件名和路径有关,整体文件目录结构如下:

121.php  (目录)121.php.bak (文件)121.php.meta (文件)121.php_1.bak (文件)213.php (文件)

这里面C:\phpstudy_pro\WWW\121.php\121.php.bak文件中保存了备份表中内容信息,如果系统本身存在解析漏洞,可以通过这种方式来达到getshell的效果。

图片

C:\phpstudy_pro\WWW\213.php文件中保存了备份过程日志信息,虽然文件名可以自定义,但是内容并不能任意控制,导致并不能通过TRACE FILE来getshell。

图片

通过backup语句来写文件并不能完整的控制文件名和文件内容,导致只能在特定场景下可以使用,并不是一个好的写文件思路。

3) 通过自定义命名空间来写文件

创建表空间(tablespace)是为了更好地管理数据库的物理存储结构。不同的表空间可以存储在不同的磁盘上,有助于优化I/O性能,同时也可以实现数据的逻辑分组。目前许多数据库包括oracle、postgreSQL等都支持自定义表空间,达梦也支持自定义表空间,可以通过此种方式来写文件,具体的写法如下:

-- 创建表空间,自定义表空间保存的文件路径和名字create tablespace "xiao3" datafile 'C:\phpstudy_pro\WWW\xiao3.php' size 32;-- 向自定义的表空间创建一张表,并插入带webshell的内容CREATE TABLE "DEM"."EXP15"("id" INTEGER NOT NULL,"name" VARCHAR(50),"content" VARCHAR(50)) STORAGE(ON "xiao3", CLUSTERBTR);insert into "DEM"."EXP15" values(1,'aaa', '<?php phpinfo(); ?>');

访问生成的C:\phpstudy_pro\WWW\xiao3.php文件,可以实现代码解析。

图片

通过自定义命名空间的方式来写文件可以实现完全自主可控的文件名和文件内容,对用户权限要求也不是很高,但是缺点是文件太大(我默认安装的DM,最小的文件是32M)。

本以为通过这种方式就可以在存在SQL注入漏洞的点通过自定义命名空间来达到任意文件写入的效果,但在实际的环境中遇到了报错“语句类型不匹配”。

图片

这主要是因为针对不同类型的SQL语句,通常需要调用不同的方法来执行,在Java语言中,DM通过dm.jdbc.driver.DmdbStatement类提供数据操作方法。

方法

作用

示例

executeQuery

执行查询类语句,返回相应查询结果

SELECT * FROM users WHERE "id"=1

executeUpdate

执行修改类语句,返回是否修改成功

UPDATE users SET "name"=’xxx’ where "id"=1

execute

执行所有SQL语句,返回语句是否执行成功

CREATE TABLESPACE "namex" DATAFILE ‘/dbms/namex’ SIZE 32

从上表可以看出一般系统中存在的SQL注入漏洞是在executeQuery方法中,通过这个方法传入自定义命名空间的SQL语句,则会报“语句类型不匹配”的异常,导致写文件失败。

4) 通过dexp文件导出方式写文件

dexp是DM官方提供的文件导出的命令行工具,如下图所示。dexp提供了可以把数据表导出成本地文件的功能,并支持自定义导出的文件名。

图片

本来dexp是命令行的工具,在DM数据库SQL语句中并不能直接使用,但是DM提供了预定义的函数SF_START_EXE可以调用dexp方法,使用方法如下所示:

SF_START_EXE('dexp', 'SYSDBA/SYSDBA@127.0.0.1:5236 FILE=mi.php DIRECTORY=C:\tmp\ TABLES=EXY.EXP',0,'/');
TABLES=EXY.EXP 代表可控内容的一张表,表中包含有webshell信息FILE=mi.php 自定义文件名DIRECTORY=C:\tmp\ 自定义文件路径SYSDBA/SYSDBA@127.0.0.1:5236 DM数据库地址端口及对应的账号密码

模拟在executeQuery方法中存在的SQL注入漏洞,通过堆叠注入调用SF_START_EXE方法来写文件,如下图所示:

图片

通过SF_START_EXE来写文件不会触发“语句类型不匹配”的问题,并且支持完全可控的自定义文件名和路径,是目前为止最好用的通过DM数据库SQL注入来写文件的方式之一。

0x03 总结

DM数据库本身提供了很多写文件的方式,但是能在实际攻击场景中使用的写文件方法并不多。目前关于DM数据库特性研究的文章还不是很多,SF_START_EXE是目前笔者实际测试中最好用的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/663751.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索无限可能性——微软 Visio 2021 改变您的思维方式

在当今信息化时代&#xff0c;信息流动和数据处理已经成为各行各业的关键。微软 Visio 2021 作为领先的流程图和图表软件&#xff0c;帮助用户以直观、动态的方式呈现信息和数据&#xff0c;从而提高工作效率&#xff0c;优化业务流程。本文将介绍 Visio 2021 的特色功能及其在…

【管理咨询宝藏119】翰威特组织架构设计优化方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏119】翰威特组织架构设计优化方案 【格式】PDF版本 【关键词】人力资源、组织设计、组织架构 【核心观点】 - 城镇化建设和居民可支配收入的增长…

Python实现定时任务的方式

大家好&#xff0c;在当今数字化的时代&#xff0c;定时任务的需求在各种应用场景中频繁出现。无论是数据的定时更新、周期性的任务执行&#xff0c;还是特定时间点的操作触发&#xff0c;Python 都为我们提供了强大而灵活的手段来实现这些定时任务。当我们深入探索 Python 的世…

代理 模式

一、什么是代理模式 代理模式指代理控制对其他对象的访问&#xff0c;也就是代理对象控制对原对象的引⽤。在某些情况下&#xff0c;⼀个对象不适合或者不能直接被引⽤访问&#xff0c;⽽代理对象可以在客⼾端和⽬标对象之间起到中介的作⽤。 二、为什么使用代理模式 模式作…

MySQL各种锁

目录 1. 从粒度上区分锁 1.1 全局锁&#xff08;第一粒度&#xff09; 1.2 表级锁&#xff08;第二粒度&#xff09; 1.3 行锁&#xff08;第三最小粒度&#xff09; 2 从模式上区分锁 2.1 什么是乐观锁 2.2 什么是悲观锁 2.3 意向共享锁和意向排他锁 2.4 临键锁和记录…

【Python】 深入理解Python中的UnicodeDecodeError及其解决方案

基本原理 在Python编程中&#xff0c;我们经常需要处理各种类型的数据&#xff0c;尤其是文本数据。文本数据在计算机中通常以字节的形式存在&#xff0c;而字节需要被解码成我们能够理解的字符。这个过程涉及到编码和解码的概念。 编码是将字符转换为字节的过程&#xff0c;…

23 vue3面试重难点复习:响应式原理、特点、8大生命钩子、data数据定义、组件、全家桶

vue作为用的最为广泛的当前热门框架&#xff0c;总结如下重难点核心知识&#xff1a; 1.vue特点是什么&#xff1f; 1.1优点 渐进式 vue本身只提供数据响应式&#xff0c;需要全局缓存用 vuex&#xff0c;需要路由用 vue-router 组件化 封装组件&#xff0c;利于复用 响应式数…

k8s——Pod进阶(资源限制和探针)

一、资源限制 1.1 资源限制的定义 当定义Pod时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是CPU和内存大小&#xff0c;以及其他类型的资源。 当为Pod中的容器指定了request资源时&#xff0c;调度器就使用该信息来决定将Pod调度到哪个节点上。当还为容器…

汇凯金业:量化交易有风险吗

量化交易是一种通过复杂的数学模型和算法在金融市场中进行高频和自动化交易的方式。尽管量化交易在提高市场效率、减少人为错误等方面具有诸多优点&#xff0c;但它也同样存在着不少风险。以下列举了一些主要的风险因素&#xff1a; 1. 模型风险 模型缺陷&#xff1a;量化交易…

网络协议。

一、流程案例 接下来揭秘我要说的大事情&#xff0c;“双十一”。这和我们要讲的网络协议有什么关系呢&#xff1f; 在经济学领域&#xff0c;有个伦纳德里德&#xff08;Leonard E. Read&#xff09;创作的《铅笔的故事》。这个故事通过一个铅笔的诞生过程&#xff0c;来讲述…

数据安全之翼:天空卫士在汽车数据安全领域的卓越领航

近期&#xff0c;中国汽车网络安全与数据安全产业的积极倡导者谈思实验室发布首份《汽车网络与数据安全行业全景图》&#xff0c;天空卫士入选&#xff0c;并且位列榜首。 天空卫士在汽车数据安全领域有丰富的实践经验&#xff0c;曾为多家汽车行业用户提供数据安全产品与服务&…

LeetCode - 贪心(Greedy)算法集合(Python)[分配问题|区间问题]

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/139242199 贪心算法&#xff0c;是在每一步选择中&#xff0c;都采取当前状态下&#xff0c;最好或最优&#xff08;即最有利&#xff09;的选择&…

不同linux账户切换不同的cuda版本

原因 由于服务器中安装了两个版本的cuda&#xff08;cuda10.1和cuda11.1&#xff09;&#xff0c;不同项目可能需要应用不同的cuda版本&#xff0c;但是自己又没有root权限或者只想在使用指定conda环境时改为用指定的cuda版本。总结起来有三种方法&#xff1a; 1、修改软链接指…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-24.1,2 SPI驱动实验-SPI协议介绍

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Linux实验六:进程间通信(二)

目录 一、实验目的二、实验内容三、实验环境四、参考代码五、实验步骤步骤1. 编辑源代码test6.c步骤2. 编译源代码test6.c步骤3. 运行可执行程序test6步骤4. 进一步调试源代码test6.c 六、实验结果七、实验总结 一、实验目的 1、理解 POSIX 和 System V 提供的 IPC 相关概念&a…

安防监控视频平台LntonCVS视频监控汇聚平台遏制校园暴力保护校园学生安全应用方案

未成年人被誉为祖国的花朵&#xff0c;是我们国家的未来。然而&#xff0c;最近频繁曝出的未成年霸凌事件却引发了社会的广泛关注。这些事件手段残忍&#xff0c;事态恶劣&#xff0c;引发了全社会对如何保护未成年身心健康、规避霸凌事件发生的深刻思考。 为了更好地保障学生的…

从零开始:如何用Electron将chatgpt-plus.top 打包成EXE文件

文章目录 从零开始&#xff1a;如何用Electron将chatgpt-plus.top 打包成EXE文件准备工作&#xff1a;Node.js和npm国内镜像加速下载初始化你的Electron项目创建你的Electron应用运行你的Electron应用为你的应用设置图标打包成EXE文件结语 从零开始&#xff1a;如何用Electron将…

echarts学习:将echats实例代理为响应式对象可能带来的风险

1.起源 最近我在学习如何封装echarts组件&#xff0c;我所参考的其中一篇博客中提到了一个“图表无法显示的问题”。 根据其中的介绍&#xff0c;造成此种问题的原因是因为&#xff0c;使用ref接受了echarts实例&#xff0c;使得echarts实例被代理为了响应式对象&#xff0c;进…

[C#]使用C#部署yolov8的obb旋转框检测tensorrt模型

【测试通过环境】 win10 x64 vs2019 cuda11.7cudnn8.8.0 TensorRT-8.6.1.6 opencvsharp4.9.0 .NET Framework4.7.2 NVIDIA GeForce RTX 2070 Super 版本和上述环境版本不一样的需要重新编译TensorRtExtern.dll&#xff0c;TensorRtExtern源码地址&#xff1a;TensorRT-CShar…

3D视觉系统实现自动化上下料操作

在竞争激烈的汽车制造行业&#xff0c;提高生产效率、降低成本并保证产品质量是企业持续发展的关键。特别是在汽车制造过程中&#xff0c;各种零部件的上下料操作占据了大量的生产时间&#xff0c;因此如何实现这些操作的自动化、高效化成为了一个亟待解决的问题。 富唯智能3D视…