数据库基础知识
数据库:数据库是一个由一批数据构成的有序集合,这个集合通常被保存为一个或多个彼此相关的文件。用户可以对文件中的数据进行增删改查等操作。
数据库主要分为两类:关系型数据库和非关系型数据库。
关系型数据库:存储格式能直观反映实体间的关系,和创建的表格比较相似,表与表之间有着复杂的关联关系。有:Mysql,Oracle等等。
非关系型数据库:分布式、非关系型、不保证遵循ACID原则的数据存储系统,有MongoDB、Redis等等。
数据库管理系统是一种操纵和管理数据库的软件,是用于建立、使用和维护数据库。它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。
增:
INSERT INTO [TABLE_NAME] (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);
删:
DELETE FROM [table_name]
WHERE [condition];
改:
UPDATE [table_name]
SET column1 = value1, column2 = value2...., columnN = valueN
查:
SELECT column1, column2, columnN FROM table_name;
Order by排序,当order by后的数字大于当前列数时会报错
sql注入
一、sql注入产生的原因:当web应用向后台数据库传递sql语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的sql语句,直接输入数据库引擎执行,获取或修改数据库中的数据。
二、sql注入的本质:把用户输入的数据当作代码来执行,违背了“数据与代码分离”的原则。
三、sql注入的两个关键点:1.用户能够控制输入的内容 2.web应用把用户输入的内容带入到数据中执行
四、sql注入的分类:
1.根据注入位置分类:GET型、POST型、Head头注入
2.根究反馈结果分类:有回显(显错注入)、无回显(盲注)
3.根据数据类型分类:数字型:输入的参数为整形
字符型:输入的参数为字符串
数字型和字符型最大的区别在于:数字型不需要单引号闭合,而字符串型一般需要单引号闭合
五、sql注入的流程
1.寻找注入点
2.判断闭合方式
3.验证漏洞
4.判断列数及回显位(利用order by来判断列数)
5.取数据(取数据库名;根据数据库名取表名;根据数据库名、表名,取列名;取具体数据)
实际执行:
1.查询数据库类型:通过错误显示,已经知道是mysql
2.查询当前系统所使用的数据库名称是什么:
select * from 表名 where id = '1' union select 1,database()#
3.查询当前数据库的表有什么内容:information_schema查询表名
0‘ union select 1,table_name from information_schema.tables where table_schema = '数据库名
4.查询制定表的字段信息:information_schema查询字段信息
0’union select 1,column_name from information_schema.columns where table_name = '表名
5.查询想要的信息内容:
0‘ union select 字段名1,字段名2 from 表名#