前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >由一条like语句引发的SQL注入新玩法

由一条like语句引发的SQL注入新玩法

作者头像
安全小王子
发布2020-08-28 15:47:22
4.9K0
发布2020-08-28 15:47:22
举报
文章被收录于专栏:betasecbetasec

声明:公众号大部分文章来自团队核心成员和知识星球成员,少部分文章经过原作者授权和其它公众号白名单转载。未经授权,严禁转载,如需转载,请联系开白!

请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与文章作者及本公众号无关!!!

注:本文首发于先知社区,https://xz.aliyun.com/t/8116

START

0x01前言

群里一位老哥发了一个挺有意思的SQL语句,使用like但是没有使用模糊查询,却匹配出了所有字段。

小菜比感觉很新鲜,所以简单进行了一番学习,在学习过程想起一个检测SQL注入的payload:

代码语言:javascript
复制
and 1 like 1

但是当时并没有跟进学习,所以应该也不算新技巧了

0x02跟进探索学习

首先从字段值的不同的类型来测试

1、int型

id存在且id=1

id存在且id=2

初识端倪:

当字段值类型为int时,字段值=后面的表达式为True,后面的值等于1,即效果为id=1,False则等于0,即效果为id=0,mysql中列值从1开始,因此返回为空,id=3 ,id不存在;进一步验证猜想

完全验证前面的猜想

2、字符串型

根据前面的测试,意识到可能存在运算符的优先级问题,like优先级高于=, 下面两条语句等价

代码语言:javascript
复制
select * from admin where name=1 like 2;
select * from admin where name=(1 like 2)

更直观的演示如下

当字段值类型为字符串时,字段值=后面的表达式为True,效果为or 1=0 ,False效果则为or 1=1

0x03其他玩法

下面的测试中新增了两行test数据

还可以用于判断列名是否存在:

当列名存在时,可通过赋值排除某一项

0x04进一步发现

同样还是like语句返回True或False,也就是1和0的问题,在列值为字符串类型时,这里能够实现or 1=1效果(也就是只能应用于列值类型为字符串的时候)

算是一种新型万能密码吧,可看后面的玩法应用

0x05玩法应用

1、检测SQL注入

此处id的字段值为int型(如前面验证的那样,此用法与注入类型无关,而与字段值类型相关)

代码语言:javascript
复制
id=1%27%20like%201%23
代码语言:javascript
复制
id=1%27%20like%200%23

2、新型万能密码

此处username字段值类型字符串,因此like后面的值是可以随意的,只要构造出(xx' like ...)为Fasle即可,如xx' like 0 、xx' like 2、xx' like “c”....

类型1:

类型2:

'+False# 有同样效果

3、判断列名是否存在

0x06总结

虽然不算新的东西了,但是能够从中发现一些新玩法也算不错。感觉更多的应用于SQL注入检测、盲注当中吧,脑袋瓜不太好,没有发现更多玩法,有其他玩法的师傅们来带带弟弟可以吗,嘤嘤嘤嘤嘤。。。

感谢先知社区@康同学丫丫丫大佬指出的一处错误!!

END


免费星球:要求每个人在两周内输出一篇文章发到星球里面,文章为星球成员自己整理的内容,如超过两周没有文章输出的将被拉黑一个月,超过3次将被踢出星球,永久禁止加入!

收费星球:进入的星球成员可以在里面学习一年,包括贝塔安全实验室整理好的学习资料,可让星球管理及合伙人邀请加入免费星球,可以不用发文章,加入的免费星球免踢一年!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 betasec 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档