赞
踩
sql注入是指当web应用程序对用户输入数据的合法性没有添加判断和过滤,导致攻击者可以在web应用程序的查询语句结尾添加额外的sql语句实现对数据库和服务器非法操作的一种行为。这种技术随着时间的积累衍生出了很多种注入方式。
数据库就是一个存储数据的仓库,数据库是以一定方式存储在一起,能与多个用户共享,具有尽可能小的冗余,与应用程序彼此独立的数据集合。
关系型数据库,存储的格式可以直观地反映实体间的关系,和常见的表格比较相似
关系型数据库中表与表之间有很多复杂的关联关系的
常见的关系型数据库有MySQL,Orcale,PostgreSQL , SQL Server等。
随着近些年技术方向的不断扩展,大量的NoSQL数据库如 Mon goDB,Redis出于简化数据库结构,避免冗余,影响性能的表连接。摒弃复杂分布式的目的被设计。
服务器里面
:多个数据库
:多个数据表
:多个行 列 字段
: 数据
以mysql为例,使用过mysql数据库必然在show databases时都会发现mysql返回的库名中并不是单一的库名,其中还包含了:
information_schema 库
是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息;
例如数据库或表的名称,列的数据类型或访问权限。有时用于此信息的其他术语是数据字典和系统目录。web渗透过程中用途很大。
其中:
SCHEMATA 表:提供了当前MySQL实例中所有数据库信息, show databases结果取之此表。
TABLES表:提供了关于数据中表的信息。table_name
COLUMNS表:提供了表的列信息,详细描述了某张表的所有列以及每个列的信息。column_name
performance_schema库
具有87张表。
MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。内存数据库,数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级。
mysql库
是核心数据库,类似于sql server中的master表,主要负责存储数据库的用户(账户)信息、权限设置、关键字等mysql自己需要使用的控制和管理信息。不可以删除,如果对mysql不是很了解,也不要轻易修改这个数据库里面的表信息。
常用举例:在mysql.user表中修改root用户的密码
sys库
具有1个表,100个视图。
sys库是MySQL 5.7增加的系统数据库,这个库是通过视图的形式把information_schema和performance_schema结合起来,查询出更加令人容易理解的数据。
可以查询谁使用了最多的资源,哪张表访问最多等。
往往很多新手在刚学习SQL注入的时候,都需要拥有一个能SQL注入的网站,需要有SQL注入点 的。直接去互联网上找的话对新手未免有点太难了
Sqli-labs是一个印度程序员写的,用来学习sql注入的一个游戏教程。
Sqli-labs项目地址—Github获取:https://github.com/Audi-1/sqli-labs
在url中输入id值,执行查询sql语句。即可得到对应数据
less-2源码分析:
尝试手工注入:
SQL注入: 1.判断有无注入点 and 1 = 1; true 随便输入内容 == 报错 注入 == 没有注入 2.猜解列名数量 order by %20 空格 字段 4个 3.报错,判断回显点 union 4.信息收集 数据库版本 version() 高版本:5.0 系统库: infromation 。。。 数据库名称:database() 低版本:5.0 5.使用对应SQL进行注入 数据库库名:security . 下一级 infromation_schema.tables 查找表名 table_name 查询serurity库下面 所有的表名 database() = 前后 连到一起 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() 表: users 如何查询表里面有那些字段? user 字符 转行 16进制 union select 1,group_concat(column_name),3 from information_schema.columns where table_name=0x7573657273 username password 字段数据 select username,password from users 0x3a : union select 1,2,(select group_concat(username,0x3a,password)from users)
在数据库中区分有数据库系统用户与数据库普通用户,二者的划分主要体现在对一些高级函数与资源表的访问权限上。直白一些就是高权限系统用户拥有整个数据库的操作权限,而普通用户只拥有部分已配置的权限。
网站在创建的时候会调用数据库链接,会区分系统用户链接与普通用户链接;当多个网站存在一个数据库的时候,root就拥有最高权限可以对多个网站进行管辖,普通用户仅拥有当前网站和配置的部分权限。所以当我们获取到普通用户权限时,我们只拥有单个数据库权限,甚至文件读写失败;取得高权限用户权限,不仅可以查看所有数据库,还可以对服务器文件进行读写操作。
mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,
select * from user where user=‘root’ and host=‘localhost’\G;
mysql权限表的验证过程为:
先从user表中的Host,User,Password这3个字段中判断连接的ip、用户名、密码是否存在,存在则通过验证。
通过身份认证后,进行权限分配,
按照user,db,tables_priv,columns_priv的顺序进行验证。
即先检查全局权限表user,如果user中对应的权限为Y,则此用户对所有数据库的权限都为Y,
将不再检查db, tables_priv,columns_priv;如果为N,则到db表中检查此用户对应的具体数据库,
并得到db中为Y的权限;如果db中为N,则检查tables_priv中此数据库对应的具体表,取得表中的权限Y,以此类推。
2.1 系统权限表
User表:存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例,如果有全局权限则意味着对所有数据库都有此权限
Db表:存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库
Tables_priv表:存放表级别的权限,决定了来自哪些主机的哪些用户可以访问数据库的这个表
Columns_priv表:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问数据库表的这个字段
Procs_priv表:存放存储过程和函数级别的权限
3.查看mysql 有哪些用户:
mysql> select user,host from mysql.user;
4.查看用户对应权限
select * from user where user=‘root’ and host=‘localhost’\G; #所有权限都是Y ,就是什么权限都有
5.创建 mysql 用户
有两种方式创建MySQL授权用户
执行create user/grant命令(推荐方式)
CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass';
通过insert语句直接操作MySQ
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。