记一次漏洞挖掘过程中的SQL注入浅浅绕过记录

华盟原创文章投稿奖励计划

文章首发在:先知社区

https://xz.aliyun.com/news/17077

0x00 文章背景

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

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

0x01 报错出现

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

自动草稿

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

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

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

自动草稿

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

自动草稿

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

0x02 长度判断

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

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

自动草稿

自动草稿

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

自动草稿

自动草稿

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

自动草稿

0x03 手拿把掐

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

自动草稿

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

自动草稿

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

自动草稿

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

自动草稿

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

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

自动草稿

没问题了,直接开爆:

自动草稿

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

自动草稿

黑白之道发布、转载的文章中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途及盈利等目的,否则后果自行承担!

如侵权请私聊我们删文


END

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容