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

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.mzph.cn/web/19588.shtml

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

相关文章

刷代码随想录有感(86):贪心算法——跳跃游戏II(最小跳跃次数)

题干&#xff1a; 代码&#xff1a; class Solution { public:int jump(vector<int>& nums) {if(nums.size() 1)return 0;int curcover 0;int nextcover 0;int res 0;for(int i 0; i < curcover; i){nextcover max(i nums[i], nextcover);if(i curcover …

二叉树的链式存储

目录 1.二叉树的概念和性质2.二叉树的链式存储2.1二叉树的遍历2.1.1前中后遍历2.1.2层次遍历 2.2求节点的个数2.3求叶子节点的个数2.4求第k层节点个数2.5二叉树的销毁2.6怎样通过前序遍历构建二叉树2.7判断是否是满二叉树 1.二叉树的概念和性质 一&#xff0c;概念 1.五种形态…

掌握 JavaScript 基本输出方法

掌握 JavaScript 基本输出方法 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 JavaScript 是一种强大且灵活的编程语言&#xff0c;广泛用于 Web 开发。通过 JavaScript&#xff…

YOLOV8训练自己的数据集图文实战,包含voc数据集处理代码

yolov8官方链接: link 本文章是以labelimg标注好的voc数据集为基础,通过转换格式训练模型, 一,安装 pip install ultralyticsor pip install githttps://github.com/ultralytics/ultralytics.gitmainlink 二,数据集准备 数据集格式如下 ├── ultralytics └── datase…

RocketMq broker源码解析

broker 集群工作流程 NameSrv启动成功后&#xff0c;等待broker、Consumer和producer启动后也与NameSrv保持长连接, NameSrv相当于是路由控制中心。启动broker, broker与所有的NameSrv建立长连接, broker&#xff0c;通过定时线程定时向NameSrv发送心跳&#xff0c;broker信息…

LightDB pro*c迁移指南(游标模块)

文章目录 一、不使用SQLDA描述符范围的游标操作1.1 oracle 案例1.1.1 使用游标获取数据1.1.2 对于fetch结果集怎么去利用 1.2 LightDB 案例1.2.1 使用游标获取数据1.2.2 对于fetch结果集怎么去利用 3 总结&#xff1a;不同项 二、使用SQLDA描述符范围的游标操作2.1 Oracle样例2…

KMPlayer v2024.4.25.13 官方版 (万能播放器)

前言 KMPlaye通过各种插件扩展KMP可以支持层出不穷的新格式。KMPlaye强大的插件功能&#xff0c;直接从Winamp继承的插件功能&#xff0c;能够直接使用Winamp的音频&#xff0c;输入&#xff0c;视觉效果插件&#xff0c;而通过独有的扩展能力&#xff0c;只要你喜欢&#xff…

webman-admin多图上传预览和删除

前言 在webmen文档和论坛中都没找到多图上传的示例&#xff0c;自己找了一个&#xff0c;整合了一下凑合用 insert页面 引入css <link rel"stylesheet" href"/app/admin/admin/css/muti-upload.css" />muti-upload.css内容如下 .uploader-list .ha…

微信小程序学习

04.认识小程序项目的基本组成结构 把allow改成disallow,表示所有的页面不被微信进行索引。 比如修改首页的上面栏颜色

自制数据#国家2000投影带划分范围shp(高斯克吕格 3°/6°分带)

国家2000投影分带范围&#xff08;3&#xff09; https://www.123pan.com/s/lqEljv-xvCHA.html 国家2000投影分带范围&#xff08;6&#xff09; https://www.123pan.com/s/lqEljv-xvCHA.html 声明&#xff1a;转载此文不为商业用途。文字和图片版权归原作者所有&#xff0c;…

网络安全基础技术扫盲篇名词解释之“证书“

用通俗易懂的话说&#xff1a; 证书就好比是一张身份证&#xff08;类似&#xff0c;但不完全相同&#xff09;&#xff0c;用来证明一个网站的身份是否可信。就像你要确认一个陌生人的身份需要看他的身份证一样&#xff0c;电脑在连接一个网站时&#xff0c;也会查看网站的证…

延时性(过期/超时)和周期性的定时任务的实现方式

延时性&#xff08;过期/超时&#xff09;和周期性的定时任务的实现方式 一、延时性的定时任务&#xff08;例如订单超时30分钟后自动取消该订单&#xff09;1.使用DelayQueue实现任务即将到期提醒功能&#xff08;非分布式&#xff09;2.使用Redis实现任务即将到期提醒功能&am…

探索Web3工具:正确使用区块链平台工具的秘诀

在当今日新月异的数字时代&#xff0c;区块链技术正以惊人的速度改变着我们的生活和工作方式。尤其对于那些想要踏入区块链世界的人来说&#xff0c;正确使用区块链平台工具至关重要。本文将向您介绍一些关键的Web3工具&#xff0c;并以TestnetX.com为例&#xff0c;展示如何利…

数字化转型推动生物技术企业增长—纷享销客与集萃药康共探新动力

上周&#xff0c;在南京锦创书城&#xff0c;一场主题为“生物技术企业增长新动力&#xff1a;以客户为中心的数字化转型与创新”的研讨会圆满落幕。此次活动由纷享销客江苏分公司联合江苏集萃药康生物科技股份有限公司共同举办&#xff0c;吸引了众多生物技术领域企业的负责人…

斑消宝六周年大动作,斑小将将再迎高光时刻

如今&#xff0c;周年庆典已经成为众多品牌展示自身实力与影响力的重要舞台。这不仅仅是一个简单的庆祝活动&#xff0c;更是一次向外界展示品牌发展历程、未来规划以及团结合作伙伴的绝佳机会。在这样的背景下&#xff0c;广州斑消宝化妆品有限公司将打造别具一格的盛典&#…

npm安装依赖报错npm ERR! code ENOTFOUNDnpm ERR! syscall getaddrinfo

npm安装依赖报错 今天在学习vue的时候&#xff0c;在使用npm install vue -g来安装一个局部的vue时候&#xff0c;报出如下错误&#xff1a; npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/vue faile…

iphone内存满了开不了机怎么办?白苹果解决办法分享!

虽然苹果手机在使用时比较顺畅&#xff0c;但是手机用久了&#xff0c;照片、视频等资料累积过多&#xff0c;也难免会导致内存不足&#xff0c;出现无法开机卡在开机界面白苹果的情况。 内存不足导致iPhone白苹果的问题很常见&#xff0c;可以说是苹果最常见的故障之一。接下来…

【学习笔记】Windows GDI绘图(九)Graphics详解(上)

文章目录 Graphics 定义创建Graphics对象的方法通过Graphics绘制不同的形状、线条、图像和文字等通过Graphics操作对象坐标 Graphics属性Clip(裁切/绘制区域)ClipBounds获取裁切区域矩形范围CompositiongMode合成方式CompositingQuality渲染质量DpiX和DpiY 水平、垂直分辨率Int…

C++ 逻辑运算

一 逻辑运算 2 逻辑运算符 逻辑表达式 四 逻辑表达式 五 逻辑运算符的优先级 六 注意事项 注意 总结

JVM学习-字节码指令集(四)

异常处理指令 抛出异常指令 athrow指令&#xff1a;在Java程序中显示抛出异常的操作(throw语句)都是由athrow指令来实现除了throw语句显示抛出异常情况之外&#xff0c;JVM规范还规定了许多运行时异常会在其他Java虚拟机指令检测到异常状况时自动抛出&#xff0c;在之前介绍的…