SQL注入(一)

 Web应用程序三层架构:视图层+业务逻辑层+数据访问层

在这里插入图片描述

0x01数据库语言介绍

​数据库就是一个存储数据的仓库,数据库是以一定方式存储在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。

1、关系型数据库

指采用了关系模型来组织数据得数据库,其以行和列的形式存储数据,以便用于用户理解,关系型数据这一系列的行和列被称为表,一组表组成了数据库。存储的格式可以直观地反映实体间的关系。关系型数据库和常见的表格比较相似,关系型数据库中表与表之间是有很多复杂的关联关系的。

常见的关系型数据库有:MySQL,Oracle, PostgreSQL,SQL Server等

2、非关系型数据库

随着近些年技术方向的不断拓展,大量的 NoSQL数据库如MongoDB、 Redis、 Memcached出于简化数据库结构、避免元余、影响性能的表连接、摒弃复杂分布式的目的被设计。

NoSQL数据库适合追求速度和可扩展性、业务多变的应用场景。

相关链接:https://db-engines.com/en/ranking			#数据库排行

在这里插入图片描述

3、数据库服务器层级关系

服务器里面

​ :多个数据库

​ :多个数据库表

​ :多个行、列、字段

​ :数据

在这里插入图片描述

0x02SQL语句分类

1、数据查询语言(DQL)

​ 用以从表中获得数据。

常用保留字段:SELECT、WHERE、ORDER BY、HAVING

2、 数据操作语言(DML)

​ 用于添加、修改、删除表中得行。

常用保留字段:INSERT、UPDATE、DELETE

3、 事务控制语言(TCL)

​ 确保被DML语句影响得表中所有行及时得以更新

常用保留字段:COMMIT、SAVEPOINT、ROLLBACK

4、 数据控制语言(DCL)

​ 通过GRANT或REVOKE实现权限控制,确定单个用户和用户组对数据库对象的访问。

5、数据定义语言(DDL)

​ 在数据库中创建新表或修改、删除表。

常用保留字段:CREATE、ALERT、DROP

6、指针控制语言(CCL)

​ 通过DECLARE CURSOR、FETCH INFO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。

0x03SQL语句用法

1、创建/删除数据库、创建/删除表

CREATE/DROP DATABASE:创建/删除数据库

例如:CREATE/DROP DATABASE database_name

CREATE TABLE:创建表

例如:

CREATE TABLE table_name(

column1 type,

Column2 type,

......

);

DROP TABLE:删除表

例如:DROP TABLE table_name;

2、SELECT:从表中查询数据

WHERE:用于指定条件

例如:SELECT column1,column2,......FROM table_name WHERE condition;

AND/OR:用于逻辑运算

例如:SELECT column1,column2,......FROM table_name WHERE condition1 AND/OR condition2;

ORDER BY:用于排序字段名

例如:SELECT column1,column2,......FROM table_name WHERE ORDER BY column1,column2,......ASC/DESC;(升序/降序)

UNION:用于连接两个以上的语句结果,组合到一个语句中。

例如:SELECT column(s) FROM table1 UNION SELECT column(s) FROM table2;

CASE:构造盲注语句

例如:SELECT CASE WHEN condition THEN result1 else result2 END;

3、插入、更新、删除表中数据

INSERT:向表中插入新的行

例如:INSERT INFO table_name(column1,column2) VALUES(value1,value2,......);

UPDATE:更新表中的数据

例如:UPDATE table_name SET column1=value1,column2=value2,......WHERE condition;

DELETE:删除表中的行

例如:DELETE FROM table_name WHERE condition;

0x04MySQL逻辑判断优先级

关系型数据库逻辑运算符优先级高到低为:NOT >AND >OR
在这里插入图片描述

案例1:

idpricename
1 10 xx
1 9 pp
2 20 oo
2 30 ii
3 30 ee
4 40 yy

select * from table from id=1 or id=2 and price>=10

反馈结果:

条件1:id=2 and price>=10

结果1:oo ii

条件2:id=1

结果2:xx pp

最终结果:oo ii xx


案例2:

idpricename
1 10 xx
1 9 pp
2 20 oo
2 30 ii
3 30 ee
4 40 yy

select * from table from (id=1 or id=2) and price>=10;

反馈结果:

条件1:(id=1 or id=2)

结果1:xx pp ii oo

条件2:(xx pp ii oo ) and price>=10

结果2:xx ii

最终结果:xx ii

0x05系统库释意

提供了访问数据库元数据的方式

元数据是关于数据库的数据,如数据库名和表名,列的数据类型或访问权限。
在这里插入图片描述

1、information_schema 库

​是信息数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息,比如数据库名,数据库表,表字段的数据类型与访问权限等。Web渗透过程中用途很大。

SCHEMATA表:
	提供了当前MySQL实例中所有的数据库信息,show databases 结果取之此表。

TABLES表:
	提供了关于数据中表的信息。
	
COLUMNS表:
	提供了表中的列信心,详细描述了某张表的所有列已经每个列的信息。

在这里插入图片描述

2、mysql 库

mysql库是核心数据库,类似于SQL server中的master表,主要负责存储数据库的用户(账户)信息、权限设置、关键字等mysql自己需要使用的控制和管理信息。不可以删除,如果对mysql不是很了解,也不要轻易修改这个数据库里面的表信息。
常用举例:在mysql.user表中修改root用户的密码

3、performance_schema 库具有87张表

​MySQL 5.5开始新增一个数据库:PERFORMANCE_SCHEMA,主要用于收集数据库服务器性能参数。内存数据库,数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级。

4、sys 库具有1个表,100个视图

​sys库是MySQL 5.7增加的系统数据库,这个库是通过视图的形式把information_schema和performance_schema结合起来,查询出更加令人容易理解的数据。

posted @ 2022-06-27 15:11  RichardYg  阅读(51)  评论(0编辑  收藏  举报