(一)SQL注入基本语法
SQL
database➡️table➡️column➡️键值(具体数据)
即:库➡️表➡️列(语句中最底层)
-
select
查询字符串(常量):select '字符串','字符串2'
最简单的查询语句:select 列名1,列名2 from 表名
默认返回主键
-
limit
限制返回行数
select 列名1,列名2 from 表名 limit 起始位置,条数
eg.
select apple from banana limit 0,2 #查询前两行
-
where
条件返回数据
select 列名1,列名2 from 表名 where 条件
eg.
select apple,banana from fruit where banana = 1
回显
| apple | banana |
|---|---|
| 0 | 1 |
-
union
将多条查询结果联合起来
select 列名1,列名2 union select 列名2,列名4
🌟union 要求前后查询的列数必须相同(用order by查询)
-
order by
select 列名1, 列名2 order by i(根据第i列排序,从1开始)
🌟若i大于查询列数,网页会报错,所以可以利用该表达式查询服务器后台查询了几列数据
-
alter
- alter table 表名 add 字段名 字段类型
- alter table 表名 rename to 修改后表名 (修改表名)
- alter table 表名 change 当前列名 修改后列名 字段类型; (修改列名)
eg.
ALTER TABLE users ADD phone VARCHAR(20);
绕过敏感表名/列名
eg.
alter table flag rename to test_table;
alter table words add id int unsigned not Null;
alter table words change flag data varchar(100);
🌟alter无法在查询语句中嵌套使用,所以一定要后台数据库支持堆叠注入(mysqli_multi_query),才能用‘;’隔开查询语句,然后进行添加
-
handle
(MySQL/MariaDB 特有)
- 打开表
HANDLER users OPEN (as 别名); - 读取第一行数据
HANDLER users READ FIRST; - 读取下一行数据
HANDLER users READ NEXT; - 关闭表
HANDLER users CLOSE;
- 绕过select
- 绕过敏感列名
HANDLER `column` OPEN;
HANDLER `column` READ NEXT;

浙公网安备 33010602011771号