一次DM达梦数据库注入记录

admin 2024年4月28日07:30:04评论8 views字数 1248阅读4分9秒阅读模式
0x00 文章背景
    一个临近到点下班的下午,同事测试时发现了一个注入,经过我们短暂的探测发现,过滤了不少东西,好嘛,好得很。然后我总感觉这数据库不是Mysql、Oracle之类的。于是,在报错信息中发现了一串……
一次DM达梦数据库注入记录
    经过搜索,发现这是DM达梦数据库:
一次DM达梦数据库注入记录
    我有一说一的,这玩意我第一次碰见。快下班了,于是在群里先简单问了一嘴:
一次DM达梦数据库注入记录
    后来看了下,确实跟Oracle差不多……
    结果我刚在外面吃完饭回家,同事跟我说出来了:
一次DM达梦数据库注入记录
    水一篇文章记录一下,刚好了解了解。嗯,我们先来看一下DM数据库的一些特性,方便我们理解后续内容。
0x01 关于达梦
    对于DM数据库,想要有一个初步且较为详细了解的话,大家可以看看这篇文章,我简单截图几张:
https://blog.51cto.com/u_15634773/6699722
一次DM达梦数据库注入记录
一次DM达梦数据库注入记录
0x02 过滤探测
    下面三张图分别是:正常响应、SQL报错和拦截页面,有符号不让被使用时则会返回400。此时,我们先探测出什么符号不让使用,再看看这个Payload,如何去构造:
一次DM达梦数据库注入记录
一次DM达梦数据库注入记录
一次DM达梦数据库注入记录
    开始是直接手测了一下,没编码。然后用BP一爆破发现,URL编码就直接过了……
一次DM达梦数据库注入记录
0x03 操作开始
    查看前面达梦的相关特性,我们可以看到if语句是可以正常使用的。那我们先来构造一个if语句,先看看能不能正常使用:
一次DM达梦数据库注入记录
一次DM达梦数据库注入记录
    接下来我们利用if来构造语句,用盲注。最后,经过测试,语句如下:
'||1/if(1=1,1,0)||'
    但是,||需要做url编码,否则这里就会返回400,当if中条件成立与条件不成立时的结果分别如下图:
一次DM达梦数据库注入记录
一次DM达梦数据库注入记录
    接下来更改一下expr,将1=1更改为语句,即可开始操作。
    根据了解可得,达梦数据库获取当前库名的函数为:
select cur_database()
    最后构造的语句为:
%27%7c%7c1/if(ascii(substr(cur_database(),1,1))=0,1,0)%7C%7C%27
一次DM达梦数据库注入记录
一次DM达梦数据库注入记录
一次DM达梦数据库注入记录
取库名
    接下来,BP跑一下,库名到手:
一次DM达梦数据库注入记录
取表名
    看了下,这玩意挺麻烦的,先在达梦在线试玩看一下语句结果:
一次DM达梦数据库注入记录
    用上述语句再试着跑一下,看看哪一条值是当前数据库名:
一次DM达梦数据库注入记录
    好嘛,语句中间有空格直接400,后续经过测试:%00、%20、%2b,这几个不会抛出400,但是会报错,说明这几个可能没被拦,但是在这用不了。
一次DM达梦数据库注入记录
    最后经过测试,可以使用%09、%0a代替空格,其他的没有尝试了。
    不过这里又有个问题,直接用如下方式在这里会报错:
一次DM达梦数据库注入记录
    直接报错,不知道为什么,有了解的师傅可以指点一二:
一次DM达梦数据库注入记录
    这个没用的话,我们就只能以视图的方式来获取了……

一次DM达梦数据库注入记录

    但是这时候又拉闸了,目前没解决,有什么骚东西在搞我?好像在查询列名或者条件里有符号的时候,在这个位置就G了。

一次DM达梦数据库注入记录

    好吧,先到这了,要是解决了的话,我再接一篇后续。
我要出门看美女了!
 

原文始发于微信公众号(犀利猪安全):首当其冲 | 一次DM达梦数据库注入记录

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月28日07:30:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一次DM达梦数据库注入记录https://cn-sec.com/archives/2692686.html

发表评论

匿名网友 填写信息