概念
SQL 注入漏洞,本质是语句的混淆,对用户输入的语句过滤不严,导致语句拼接成新的语句,达到注入的目的。
原理
参数用户可控:前端传给后端的参数内容是用户可控的。
参数带入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询。
注入点类型
数字型
select * from tables where id = 1;
字符型
select * from tables where id = '1';
搜索型
select* from tables where id like '%1%';
基于 union 查询的注入
联合查询要注意的是后面查询的列数要与主查询的列数一致
主要步骤
1 通过 ?id=1 and 1=1 ,and 1=2 。如果输出的结果不一致,说明输入的语句被执行了。就可以开始下一步了。
2 观察报错信息来确定注入点的类型。
3 使用order by 来查询主查询列数。
4 用union select 查询,将主查询项改成负数。
select* from tables where id = -1 union select 1,2,3;
5 在回显的位置上替换成查询语句,database(),user()。
6 查到库名后查表名
-1 union select 1,(SELECT group_concat(COLUMN_NAME) FROM information_schema