一个临近到点下班的下午,同事测试时发现了一个注入,经过我们短暂的探测发现,过滤了不少东西,好嘛,好得很。然后我总感觉这数据库不是Mysql、Oracle之类的。于是,在报错信息中发现了一串……
我有一说一的,这玩意我第一次碰见。快下班了,于是在群里先简单问了一嘴:
水一篇文章记录一下,刚好了解了解。嗯,我们先来看一下DM数据库的一些特性,方便我们理解后续内容。
对于DM数据库,想要有一个初步且较为详细了解的话,大家可以看看这篇文章,我简单截图几张:
下面三张图分别是:正常响应、SQL报错和拦截页面,有符号不让被使用时则会返回400。此时,我们先探测出什么符号不让使用,再看看这个Payload,如何去构造:
开始是直接手测了一下,没编码。然后用BP一爆破发现,URL编码就直接过了……
查看前面达梦的相关特性,我们可以看到if语句是可以正常使用的。那我们先来构造一个if语句,先看看能不能正常使用:
接下来我们利用if来构造语句,用盲注。最后,经过测试,语句如下:
但是,||需要做url编码,否则这里就会返回400,当if中条件成立与条件不成立时的结果分别如下图:
接下来更改一下expr,将1=1更改为语句,即可开始操作。
%27%7c%7c1/if(ascii(substr(cur_database(),1,1))=0,1,0)%7C%7C%27
看了下,这玩意挺麻烦的,先在达梦在线试玩看一下语句结果:
用上述语句再试着跑一下,看看哪一条值是当前数据库名:
好嘛,语句中间有空格直接400,后续经过测试:%00、%20、%2b,这几个不会抛出400,但是会报错,说明这几个可能没被拦,但是在这用不了。
最后经过测试,可以使用%09、%0a代替空格,其他的没有尝试了。
直接报错,不知道为什么,有了解的师傅可以指点一二:
![首当其冲 | 一次DM达梦数据库注入记录 一次DM达梦数据库注入记录]()
但是这时候又拉闸了,目前没解决,有什么骚东西在搞我?好像在查询列名或者条件里有符号的时候,在这个位置就G了。
![首当其冲 | 一次DM达梦数据库注入记录 一次DM达梦数据库注入记录]()
原文始发于微信公众号(犀利猪安全):首当其冲 | 一次DM达梦数据库注入记录
评论