花里胡哨|又是个DM达梦数据库SQL注入?

admin 2026-06-18 05:57:07 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文记录了达梦数据库SQL注入实战过程,作者发现单引号注入点后通过除法报错和exp函数溢出实现盲注,详细演示了利用cur_database函数获取库名长度及ASCII码逐字符破解的方法,并强调技术仅限授权使用。 综合评分: 82 文章分类: WEB安全,漏洞分析,实战经验,代码审计


cover_image

花里胡哨 | 又是个DM达梦数据库SQL注入?

原创

犀利猪 犀利猪

犀利猪安全

2024年6月3日 17:52 湖南

在小说阅读器读本章

去阅读

0x01 发现注入

单引号插插插,哎,这不是有注入呢嘛:

然后在我一顿操作之下,我本来以为是if函数没权限用:

后来我发现是达梦不支持这么用,不管是用if还是case when,里面都不支持插入sleep,来看看达梦的数据库执行结果:

然而这个接口又没有数据,不能用延时怎么判断呢?

没关系,我们用别的方式。关于达梦数据库的简单介绍,可以看我之前发布的这篇文章:

首当其冲 | 一次DM达梦数据库注入记录

0x02 干就完辣

根据前面的步骤,我们构造别的语句来执行。这边的手法就是,利用除法来报错。当内容正确时,1无法除以0,此时就会整除失败。那么,这个值就是正确的值。

好的,接下来再把它更换成SQL语句,他就是这样的:

cur_database  #达梦数据库获取库名的函数
1/(length(cur_database)-判断内容)

这里打个比方,根据如上语句,假如length函数获取到库名长度是6位,而后面的判断内容的值也是6,此时先执行减法 6-6=0,而后执行除法 1/0,此时会爆出 除0错误,那么这个值就是正确的值:

接着我们构造语句:

'||(1/(length(cur_database)-6))||'

得出库名长度为6,接下来获取库名。由于是除法,判断的值它就只能是数字,所以需要用到ascii函数来转换:

'||1/(ascii(substr(cur_database,2,1))-65)||'

0x03 别的手法

除了上述的除法报错的方式,在这里也可以使用exp函数来让内容强制溢出报错,使其达到盲注的效果:

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

(

END

)

!扫码添加哦!

联系进群即可,群内可交流技术

免责声明

文章内容仅限授权测试或学习使用

请勿进行非法的测试或攻击

    利用本账号所发文章 进行直接或间接的非法行为 均由操作者本人负全责 犀利猪安全及文章对应作者

不为此承担任何责任

文章来自互联网或原创

如有侵权可联系我方进行删除

并诚挚的跟您说声抱歉


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:犀利猪安全 犀利猪 犀利猪《花里胡哨 | 又是个DM达梦数据库SQL注入?》

评论:0   参与:  0