所谓盲注就是在服务器没有错误回显的时候完成的注入攻击。 服务器没有错误回显,对于攻击者来说缺少了非常重要的“调试信息”
布尔盲注 页面有回显,但是不会显示具体的内容 只会根据传参信息返回true和false
时间盲注 传参任何东西返回结果都一样 页面返回值只有一种,true,无论输入任何值,返回情况都会按照正常的进行处理 加入特定的时间函数,通过查看web页面返回的时间差来判断注入语句是否正确
常用函数
length() 函数 返回字符串的长度 substr() 截取字符串 substr(str,m,n) m 从第m个字符开始截取 n 截取后字符串长度为n concat() 字符串拼接函数 ascii() 返回字符的ascii码 [将字符变为数字] sleep() 将程序挂起一段时间n为n秒 if(expr1,expr2,expr3) 判断语句 如果第一个语句正确就执行第二个语句,如果错误执行第三个语句
布尔盲注
时间盲注
宽字节注入
目前多数网站使用的都为UTF-8编码,如果MySQL数据库的编码设置为GBK编码 此时就会产生宽字节注入攻击
UTF-8编码:一个中文字符占三个字节 GBK编码:一个中文字符占两个字节
如何绕过\ ?
utf-8编码是三个字节列如一个中文:和===>%fe%gt%hy
然而:和‘===>会自动转义 加入 \ ’ ,而\=%5c
故:和‘===>%fe %gt %hy %5c' 四个字节放入MySQl中使用GBK编码变成 %fe%gt==>变成一个中文 %hy %5c==>变成一个中文 以 ‘ 闭合
堆叠注入
堆叠注入从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。这样我们就想到了是不是可以多句一起使用
在SQL中,分号(;)是用来表示一条sql语句的结束。Select * from products where productid=1;DELETE FROM products 当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。