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

news2024/11/25 4:31:09

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是目前笔者实际测试中最好用的方法。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Check Point 安全网关任意文件读取漏洞复现(CVE-2024-24919)

Check Point 安全网关任意文件读取漏洞复现(CVE-2024-24919) 1.漏洞描述 Check Point Security Gateways 是 Check Point Sofware 提供的一系列 网络安全Q解决方案。这些解决方案包括下一代防火墙(NGFW)、数据中心安全网关和 A1驱动的量子网关&#xff0c;旨在为企业提供针对…

【自然语言处理】Transformer中的一种线性特征

相关博客 【自然语言处理】【大模型】语言模型物理学 第3.3部分&#xff1a;知识容量Scaling Laws 【自然语言处理】Transformer中的一种线性特征 【自然语言处理】【大模型】DeepSeek-V2论文解析 【自然语言处理】【大模型】BitNet&#xff1a;用1-bit Transformer训练LLM 【自…

【RuoYi】实现二级页面跳转

一、前言 在我们写项目的时候&#xff0c;很多时候都会用到二级页面的跳转&#xff0c;RuoYi框架中也不例外&#xff0c;RuoYi虽然前端用的是vue&#xff0c;但是因为其有权限设置&#xff0c;在实现二级页面跳转的时候和普通的页面跳转有所区别&#xff0c;博主这里进行记录&a…

基于朴素贝叶斯算法的新闻类型预测,django框架开发,前端bootstrap,有爬虫有数据库

背景 在当今信息爆炸的时代&#xff0c;新闻内容的分类和预测对于用户个性化推荐和信息检索至关重要。基于朴素贝叶斯算法的新闻类型预测系统结合了机器学习和自然语言处理技术&#xff0c;能够根据新闻内容自动进行分类&#xff0c;提高新闻处理效率和准确性。采用Django框架…

LeetCode-47 全排列Ⅱ

LeetCode-47 全排列Ⅱ 题目描述解题思路代码说明 题目描述 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 &#xff1a; 输入&#xff1a;nums [1,1,2]输出&#xff1a; [[1,1,2], [1,2,1], [2,1,1]] b站题目解读讲的不好&…

【机器学习】Transformer模型大小与性能探究

Transformer模型大小与性能&#xff1a;不仅仅是尺寸的问题 一、Transformer模型的挑战二、经验标度定律的局限性三、记忆过程与性能动态五、结论与展望 在人工智能和机器学习的领域里&#xff0c;模型的大小与性能之间的关系一直是研究人员关注的焦点。然而&#xff0c;最近的…

CUDA学习(2)

什么是CUDA CUDA&#xff08;Compute Unified Device Architecture&#xff09;&#xff0c;统一计算设备架构&#xff0c;英伟达推出的基于其GPU的通用高性能计算平台和编程模型。 借助CUDA&#xff0c;开发者可以充分利用英伟达GPU的强大计算能力加速各种计算任务。 软件生…

下载安装node.js,查看node.js版本

目录 一、下载安装node.js 二、查看node.js版本 三、使用nvm管理node.js版本 一、下载安装node.js 文档 nodejs中文网•学习教程•入门•如何安装 Nodejshttps://nodejs.cn/en/learn/getting-started/how-to-install-nodejs 步骤 1.进入node.js官网 nodejshttps://nodejs.…

解决:写路由文件时引入页面路径没有提示

1、首先安装插件&#xff1a; Path Autocomplete 2、配置settings.json 文件 复制下面代码到settings.json配置文件中&#xff1a; "path-autocomplete.pathMappings": {"": "${folder}/src/","views": "${folder}/src/views/&…

Python考试复习---day5

1.打印商品名 ainput().split() print("商品列表&#xff1a;") for i,name in enumerate(a):print("{}\t{}".format(i,name))enumerate----枚举--利用它可以同时获得索引和值 enumerate多用于在for循环中得到计数 例如&#xff1a; list1 ["这&qu…

centos7_VNC_install

文章目录 1. overview2, 开始安装3. VNC调试参考4. 常见错误 1. overview VNC&#xff0c;全称为Virtual Network Computing&#xff0c;它是一个桌面共享系统。它的功能&#xff0c;类似于windows中的远程桌面功能。VNC使用了RFB(Remote FrameBuffer&#xff0c;远程帧缓冲&a…

[数据集][目标检测]猫狗检测数据集VOC+YOLO格式8291张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8291 标注数量(xml文件个数)&#xff1a;8291 标注数量(txt文件个数)&#xff1a;8291 标注…

装饰画行业要怎么做

在当今社会&#xff0c;随着人们生活水平的提高和审美需求的多样化&#xff0c;装饰画行业迎来了新的发展机遇。面对激烈的市场竞争和消费者日益挑剔的眼光&#xff0c;装饰画行业需要不断创新&#xff0c;以适应市场的变化和满足消费者的个性化需求。 装饰画行业要紧跟时代潮流…

【深度学习】安全帽检测,目标检测,yolov10算法,yolov10训练

文章目录 一、数据集二、yolov10介绍三、数据voc转换为yolo四、训练五、验证六、数据、模型、训练后的所有文件 寻求帮助请看这里&#xff1a; https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tabBB08J2一、数据集 安全帽佩戴检测 数据集&#xff1a;https://github.com/njvi…

【力扣】LCR 130. 衣橱整理

一、题目描述 二、算法思路 这是⼀道非常典型的「搜索」类问题。 我们可以通过「深搜」或者「宽搜」&#xff0c;从 [0, 0] 点出发&#xff0c;按照题目的要求&#xff08;选择 向右移动一格 或 向下移动一格&#xff0c;但不能移动到衣柜之外 &#xff09;一直往 [m - 1, …

免费的VMware ?就是它了!【送源码】

在 Docker 没有出来之前&#xff0c;很多项目的的部署方案是使用虚拟机&#xff0c;在一台服务器上创建好几个虚机出来&#xff0c;配置一下网络&#xff0c;就可以把一台服务器当做多个服务器用了。 而作为开发者来说&#xff0c;我们经常碰到需要使用不同操作系统的需求&…

汇编:x86汇编环境搭建与基础框架(32位)

32位汇编代码编写环境&#xff1a;Visual Studio&#xff08;笔者用的版本为2017&#xff09;&#xff1b;先来说一下在Visual Studio 2017中编写汇编代码的准备操作&#xff1a; ①创建空项目 ②设置项目属性&#xff1a;平台工具集设置为Visual Studio 2015(v140)&#xff0…

初识Spring Cloud Gateway

文章目录 一、网关简介1.1 网关提出的背景1.2 网关在微服务中的位置1.3 网关的技术选型1.4 补充 二、Spring Cloud Gateway的简介2.1 核心概念&#xff1a;路由&#xff08;Route&#xff09;2.2 核心概念&#xff1a;断言&#xff08;Predicate&#xff09;2.3 核心概念&#…

【初阶数据结构】栈和队列(附题目)

目录 1.栈 1.1栈的概念及结构 1.2栈的实现 1.2.2实现结构的选择 a.数组 b.链表 c.更优的选择 1.2.3实现结构 a.栈的结构体 b.栈的初始化 c.栈的销毁 d.入栈 e.出栈 f.获取栈顶元素 g.获取栈中有效元素个数 h.检测队列是否为空&#xff0c;如果为空返回非零结…

BioVendor—sHLA-G ELISA试剂盒

人类白细胞抗原-G (HLA-G)与其他MHC类基因的不同之处在于它的低多态性和产生七种HLA-G蛋白的选择性剪接&#xff0c;这些蛋白的组织分布局限于正常的胎儿和成人组织&#xff0c;这些组织对先天和后天免疫细胞都具有耐受性。可溶性HLA-G是一种免疫抑制分子&#xff0c;诱导活化的…