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

💡 原文中文,约3500字,阅读约需9分钟。
📝

内容提要

这篇文章探索了达梦数据库的文件写入方式,包括通过备份数据库和自定义命名空间来写文件。通过SF_START_EXE方法写文件是最好用的方式。

🔎

延伸解读

达梦写文件与常见数据库的差异

与MySQL支持into outfile、MSSQL支持备份写文件不同,达梦数据库(DMSQL)没有into outfile或into dumpfile语法,备份写文件又需先开启归档模式,且生成的文件名和内容受限。这些差异意味着针对达梦的SQL注入利用不能照搬其他数据库的经验,需要根据其特有功能寻找可行路径。

自定义表空间写文件的限制

通过创建自定义表空间并指定数据文件路径,可以完全控制写入的文件名和内容,且权限要求不高。但默认安装下最小文件为32M,体积较大;更关键的是,在SQL注入常见的executeQuery方法中执行创建表空间的语句会报“语句类型不匹配”错误,导致该方法在实际注入场景中难以直接利用。

SF_START_EXE为何成为首选

SF_START_EXE是达梦提供的预定义函数,可调用dexp命令行工具导出数据表为本地文件。通过堆叠注入执行该函数,能自定义文件名、路径和内容,且不会触发“语句类型不匹配”问题。相比备份和表空间方式,它绕过了语句类型限制,实现了更灵活的文件写入,因此被认为是目前最好用的方法之一。

❓

Q&A

达梦数据库支持哪些写文件的方式?

达梦数据库支持通过备份数据库、自定义命名空间和dexp命令行工具来写文件。

如何通过备份数据库方式在达梦数据库中写文件?

需要开启归档模式,然后使用备份语句指定文件路径进行备份,才能实现写文件。

自定义命名空间在达梦数据库中写文件有什么优缺点?

优点是可以完全控制文件名和内容,缺点是文件大小有限制且可能出现语句类型不匹配的问题。

使用dexp命令行工具写文件的最佳方法是什么?

通过SF_START_EXE方法调用dexp是最佳的写文件方式,支持自定义文件名和路径。

达梦数据库是否支持MySQL的into outfile语法?

达梦数据库不支持MySQL的into outfile语法,也没有类似的into dumpfile语法。

在达梦数据库中,如何处理SQL注入漏洞以写文件?

可以通过堆叠注入调用SF_START_EXE方法来写文件,这样不会触发语句类型不匹配的问题。

🏷️

标签

➡️

继续阅读