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:
id | price | name |
---|---|---|
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:
id | price | name |
---|---|---|
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结合起来,查询出更加令人容易理解的数据。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」