sql盲注讲解
盲注
有时候,开发⼈员不会把数据库报错信息显⽰在前端页⾯,这样就使我们想要通过union注⼊或报错注⼊的攻击⽅式难以实现。
当不显⽰报错信息的时候,我们还可以通过盲注的⽅式来对数据库进⾏注⼊攻击。
盲注,顾名思义,就是在页⾯没有提供明显信息的情况执⾏的注⼊⽅式。
盲注⼜分为两种,布尔型盲注和时间型盲注。
布尔型盲注,以sqli-lab第8关为例:
1、输⼊id=1正常显⽰,输⼊id=123456显⽰与正常不同,显⽰为空,输⼊id=1'不报错,但是显⽰也是为空
这⾥输⼊id=1' 的时候,可能是两种情况。⼀种就是1’被当做字符串处理,数据库查询的就是id="1'",这样数据库中没有这个值,所以查询为空,跟id=123456相同。
另⼀种就是单引号被拼接进数据库语句中,形成注⼊,然后前端没有报错信息显⽰,所以返回为空。
2、通过构造sql注⼊语法来尝试,发现这⾥就是存在sql注⼊。
我们已知的是1=1和1=2显⽰不同,没有其他任何信息。这种情况下就称为布尔型盲注。
3、布尔型盲注会利⽤到数据库中的⼀些表达式:
length() :字符串长度
substr():截取字符串
ascii():字符串的ascii编码
4、布尔型盲注的要点就是通过不停发送数据包,对结果进⾏真假判断,从⽽得到正确结果。
a.1' and length(database())=1--+ 对当前数据库名的字符串长度进⾏确认,只有当最后的长度为正确长度时候,页⾯就会返回id=1时候的正确页⾯。类似于1' and 1=1--+
通过burpsuite的fuzz⽅式得到数据库长度为8
5、知道长度之后,就需要对字符进⾏确认,实际上原理都⼀样
1' and substr(database(),1,1)='a'--+
通过database()这个表达式表现数据库名,然后从左起第1位开始截取1个字符,以此类推,直到得到所有结果为⽌。
6、通过burpsuite的⼿⼯⽅式可以让⼤家明⽩盲注的原理。但是盲注⼀般不推荐⼿⼯,但原理必需明⽩。只有明⽩了原理才能写出盲注的⾃动化利⽤脚本。除了⾃⼰写脚本外,也可以使⽤sqlmap之类的⼯具帮助你盲注。
时间型盲注
当不管我们如何输⼊,页⾯信息都没有任何变化的时候,不提供给攻击者任何有⽤的信息,这时候就只能尝试时间型盲注。
时间型盲注就是在布尔型盲注的基础上增加了时间的判断。
时间盲注的关键函数是if(),sleep(),通过对布尔型注⼊的判断,辅以时间延迟的⽅法,来最终获得注⼊结果。
以第9关为例:
1' and if(length(database())=1,sleep(5),1)%23
if(length(database())>1,sleep(5),1) 如果数据库名字符长度⼤于1为真,则mysql休眠5秒,否则查询1。
判定的⽅法就是根据请求响应的时间来判定,其他操作跟布尔型雷同。
>字符串截取 sql
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论