目录
目录
web应用程序三层架构:视图层 + 业务逻辑层 + 数据访问层
1.什么是SQL注入?
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息
web应用程序三层架构:视图层 + 业务逻辑层 + 数据访问层
2.SQL注入中的一些小知识
1.)数据库服务器层级关系:
服务器里面
:多个数据库
:多个数据表
:多个行 列 字段
:数据
2.)SQL语句语法
1。查询当前数据库服务器所有的的数据库
show databases;
2。选中莫个数据库
use 数据库名字
3。查询当前数据库所有的表
show tables;
4。查询t1表所有数据
查询关键 select
*所有
from 表名
select * from t1;
条件查询 id=2
where 条件
select * from t1 where id =2 ;
查询id=2 pass=111
union 合并查询
2个特性:
(1)前面的查询语句 和 后面的查询语句 结果互不干扰!
(2)前面的查询语句的字段数量 和 后面的查询语句字段数量 要一致
select * from where id=-2 union select * from where pass=111;
select id from where id=2 union select * from where pass=111;
select id from where id=2 union select id from where pass=111;
order by 排序
order by 字段名字 id 也可以跟上数字1,2,3,4.。。。
来猜解表的列表 知道表里有几列
information_schema库:
schmata:show databases 取之
schema_name保持当前数据库服务器里面所有库名的信息
tables: 查询所有表的信息 table_name
colunms: 所有字段 列 colunms_name
3).SQL注入之MySQL数据库
1.information_schema库:是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息;例如数据库或表的名称,列的数据类型或访问权限。有时用于此信息的其他术语是数据字典和系统目录。web渗透过程用途很大。
SCHEMATA表:提供了当前MySQL实例中所有数据库信息,show databases结果取之此表。
TABLES表:提供了关于数据中表的信息,table_name
COLUMNS表:提供了表的列信息,详细描述了某张表的所有列以及每个列的信息。column_name是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息;例如数据库或表的名称,列的数据类型或访问权限。web渗透过程中用途很大
2,performance_schema库具有87张表
MySQL5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。内存数据库,数据放在内存中直接操作的数据库。相较于磁盘,内存的数据读写速度要高几个数量级
3.mysql库
是核心数据库,类似于sql serve 中的master表,主要负责存储数据库的用户(账户)信息,权限设置,关键字等mysql自己需要使用的控制和管理信息。不可以删除,如果对mysql不是很了解,也不要轻易修改这个数据库里面的表信息
4.sys库具有1个表,100个视图。
sys库是MySQL5.7增加的系统数据库,这个库是通过视图的形式把information_schema和performance_schema结合起来,查询出更加令人容易理解的数据。
可以查询谁使用了更多的资源,哪张表访问最多等
4).SQL注入完整思路
1.判断是否可以注入
2.获取数据库名
3.获取表名
4.获取列名
5.获取数据
3.如何高效的SQL注入
1).sql自动注入工具 ------sqlmap
https://sqlmap.org
sql注入练习靶场sqli-labs
官方代码不支持PHP7
https://github.com/Audi-1/sqli-labs
支持php7的代码
https://github.com/goldroad/sqli_labs_sqli-version