
一、False Injection
起首我们常见的注入
- 11=1
- 0<1
- ''=''
三、END
这些都是基于1=1如许的值得比较的通俗注入,下面来说说关于False注入,应用False我们可以绕过一些特定的WAF以及一些将来不肯定的身分,个中有些姿势之前懂得然则没有去深刻,此次做一个归纳总结。
起首抛出这么一个问题

为什么username=0会导致返回数据呢?
这里是可以注入绕过的,在php关于MD5函数的介绍说:
这就是一个基于false注入的例子,下面在举一个例子

和膳绫擎是同一个表,然则为什么这里只返回了两组数据呢?说到这里不得不说一说有关于MYSQL的隐式类型转换。
如不雅两个参数比较,有至少一个NULL,结不雅就是NULL,除了是用NULL<=>NULL 会返回1。不做类型转换
两个参数都是字符串,按照字符串比较。不做类型转换
两个参数都是整数,按照整数比较。不做类型转换
有一个参数是 TIMESTAMP 或 DATETIME,并且别的一个参数是常量,常量会被转换为时光戳
所有其他情况下,两个参数都邑被转换为浮点数再进行比较
最后那一句话很重要,解释如不雅我是字符串和数字比较,须要将字符串转为浮点数,这很明显会转换掉败
2. MYSQL隐式类型转换
在这里我试了试如不蚜?鲋符串和数字比较:

可以看到在进行类型转换的时刻,将字符串转换的时刻会产生一个warning,转换的结不雅为0,然则如不雅字符串开首是数字的时刻照样会大年夜数字部分截断,转换为数字。
如今可以很好懂得开首说的为什么username=0会导致返回数据了,就是因为这里会将数据转换为浮点数比较,然则字符串转换会出问题,大年夜而返回0使得0=0大年夜而为true获得结不雅,而后面passwd萌芽少一组数据的原因就是admin的passwd字段第一个字符是2 大年夜而返回2 并非为0。
如不雅不与数字进行比较,则将十六进制值视为二进制字符串。
2. 应用
实际中我们接触到的语句都是带有引号的,类似于where username='+input+' 如许的,这时刻我们就须要做一些处理来构造false注入的应用点。
加:+
- '+', 拼接的语句:where username=''+''
减:-
- '-' 拼接的语句:where username=''-''
乘:*
- '*' 拼接的语句:where username=''*''
除:/
- '/6# 拼接的语句:where username=''/6#
取余:%
2.2. 位操作运算
我们可以应用当字符串和数字运算的时刻类型转换的问题进行应用
我们可以用的位运算符有:
和运算:&
- '&0# 拼接的语句:where username=''&0#'
或运算:|
有一个参数是 decimal 类型,如不雅别的一个参数是 decimal 或者整数,会将整数转换为 decimal 落后行比较,如不雅别的一个参数是浮点数,则会把 decimal 转换为浮点数进行比较
异或运算:^
- '^0# 拼接的语句:where username=''^0#'
移位操作:
位非(~):这里位非运算符因为是在表达式之前的
1. 引子
2.3. 比较运算符
安然等于:<=>
推荐阅读
一、简介Fuzzing(模糊测试)是一种用于辨认软件bug以及马脚的办法。就今朝的成长趋势来说Fuzzing正向着云端迈进,相较于传统Fuzzing方法,云端Fuzzing使得模糊测试速度加快也加倍灵活。在本>>>详细阅读
本文标题:MySQL False注入及技巧总结
地址:http://www.17bianji.com/lsqh/35045.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示