6
⌥
code
code
一次漏洞挖掘过程中的SQL注入浅浅绕过记录
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 没问题了,直接开爆: 库名已出,点到即止,噢耶~
没有评论