一次漏洞挖掘过程中的SQL注入浅浅绕过记录
消失的猪猪 渗透测试 107浏览 · 2025-02-27 23:52

0x00 文章背景

日常测试时发现客户网站存在注入,我看着这界面的样子就像是个CMS来的,搜集一会之后确认了,果然是。本来还想着以为可以捡到一本证书了,结果显然运气不够,开发厂商的注册资产没达标。

那怎么办了,挖都挖了,记录一下吧~~



0x01 报错出现

在瞎注的帮助下,发了有几个数据包出现了报错。同时,发现报错信息中返回了SQL语句。最后在逐步测试中,确认了这个包的参数存在注入:

image.png


哎,那很好了。通过上图的报错信息我们可得,最后面的报错信息是:in(''),说明呢,这一段语句原来应该是:

select * from xlz where id in ($id);

我就简单还原一下,大致是这样基本没有问题了。那么同时,单引号被转换成了反斜杠+单引号,说明这里有函数对单引号进行转义。经过测试呢,这个位置出现单引号、双引号、斜杠之类的会直接报错:

image.png


接下来,在数据库里造一下语句给大家展示一下:

image.png


那么我们后续的Payload,基于这个格式就包没有问题。



0x02 长度判断

经过构造构造构造,最后使用的Payload如下所示:

11)AND(CASE+WHEN(1=1)+THEN+1+ELSE+exp(710)+END

image.png


image.png


很显然没毛病,接下来二分法判断库名长度:14

image.png


image.png


接下来,尝试截取字符串,获取库名。但是,显然某个地方出现了问题,我盲猜一波,有东西被过滤了:

image.png




0x03 手拿把掐

依照我一坤年的注入经验来看,前面的语句都没有问题,但是来到substr()函数时爆炸了。那么,大概率是逗号被干掉了,那么我们可以:

image.png


可以用from for来代替逗号,如下:

image.png


让我们套进数据包,发包看看怎么事:

image.png


果然我的经验没毛病,接下来直接改一下再往里套:

image.png


又忘了件事,出现单引号会被转义。但是获取库名时,字符串是需要被引号包裹的。此时引号又不能用怎么办?那就改造Payload,加入Ascii码函数来转换为十进制:

11)AND(CASE+WHEN(ascii(Substr(database()+from+1+for+1))=1)+THEN+1+ELSE+exp(710)+END

image.png


没问题了,直接开爆:

image.png


库名已出,点到即止,噢耶~

image.png


0 条评论
某人
表情
可输入字

没有评论