作家
登录

MySQL False注入及技巧总结

作者: 来源: 2017-05-08 10:23:30 阅读 我要评论

MySQL False注入及技能总结

一、False Injection

起首我们常见的注入

  1. 11=1 
  2. 0<1 
  3. ''='' 

三、END

这些都是基于1=1如许的值得比较的通俗注入,下面来说说关于False注入,应用False我们可以绕过一些特定的WAF以及一些将来不肯定的身分,个中有些姿势之前懂得然则没有去深刻,此次做一个归纳总结。

起首抛出这么一个问题

t0136299e81cc00bf38.jpg

为什么username=0会导致返回数据呢?

这里是可以注入绕过的,在php关于MD5函数的介绍说:

这就是一个基于false注入的例子,下面在举一个例子

基于false注入的例子

和膳绫擎是同一个表,然则为什么这里只返回了两组数据呢?说到这里不得不说一说有关于MYSQL的隐式类型转换。

如不雅两个参数比较,有至少一个NULL,结不雅就是NULL,除了是用NULL<=>NULL 会返回1。不做类型转换

两个参数都是字符串,按照字符串比较。不做类型转换

两个参数都是整数,按照整数比较。不做类型转换

有一个参数是 TIMESTAMP 或 DATETIME,并且别的一个参数是常量,常量会被转换为时光戳

所有其他情况下,两个参数都邑被转换为浮点数再进行比较

最后那一句话很重要,解释如不雅我是字符串和数字比较,须要将字符串转为浮点数,这很明显会转换掉败

2. MYSQL隐式类型转换

在这里我试了试如不蚜?鲋符串和数字比较:

t0191dcf58436a0ef72.png

可以看到在进行类型转换的时刻,将字符串转换的时刻会产生一个warning,转换的结不雅为0,然则如不雅字符串开首是数字的时刻照样会大年夜数字部分截断,转换为数字。

如今可以很好懂得开首说的为什么username=0会导致返回数据了,就是因为这里会将数据转换为浮点数比较,然则字符串转换会出问题,大年夜而返回0使得0=0大年夜而为true获得结不雅,而后面passwd萌芽少一组数据的原因就是admin的passwd字段第一个字符是2 大年夜而返回2 并非为0。

如不雅不与数字进行比较,则将十六进制值视为二进制字符串。

2. 应用 

实际中我们接触到的语句都是带有引号的,类似于where username='+input+' 如许的,这时刻我们就须要做一些处理来构造false注入的应用点。

加:+

  1. '+', 拼接的语句:where username=''+'' 

减:-   

  1. '-' 拼接的语句:where username=''-'' 

乘:*

  1. '*' 拼接的语句:where username=''*'' 

除:/

  1. '/6# 拼接的语句:where username=''/6# 

取余:%

2.2. 位操作运算

我们可以应用当字符串和数字运算的时刻类型转换的问题进行应用

我们可以用的位运算符有:

和运算:&

  1. '&0# 拼接的语句:where username=''&0#' 

或运算:|

有一个参数是 decimal 类型,如不雅别的一个参数是 decimal 或者整数,会将整数转换为 decimal 落后行比较,如不雅别的一个参数是浮点数,则会把 decimal 转换为浮点数进行比较

异或运算:^

  1. '^0# 拼接的语句:where username=''^0#' 

移位操作:

位非(~):这里位非运算符因为是在表达式之前的

1. 引子

2.3. 比较运算符

安然等于:<=>

  1.  1/6    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      云端模糊测试挖洞实例

    一、简介Fuzzing(模糊测试)是一种用于辨认软件bug以及马脚的办法。就今朝的成长趋势来说Fuzzing正向着云端迈进,相较于传统Fuzzing方法,云端Fuzzing使得模糊测试速度加快也加倍灵活。在本>>>详细阅读


    本文标题:MySQL False注入及技巧总结

    地址:http://www.17bianji.com/lsqh/35045.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)