网安筑基---数据库(2)

4 阅读6分钟

今天我们学习网络安全的工具还是使用navicat17,学习不是一蹴而就的过程,循序渐进才是提升技术和知识水准的王道。学习数据库的知识不仅是未来网络安全的渗透测试,还在于大家未来进入企业的安全岗位能懂数据库,知道以安全的视角进行安全防护。

sql注入实现数据库的操作的核心原理

数据库的基础知识

1、利用information_schema获取信息

MYSQL的information_schema是元数据库,存储了所有的数据库、表、列(字段)的信息。

information_schema的权限:只能进行select查询、不能进行insert/update/delete;

特点:全局访问(受限于自身权限),查询任何信息有权限的元数据库的元数据(metadata)

2、核心表结构

简单列举一些表中的字段名

<br>
字段名  -------------数据类型------------------------说明 <br>    
table_catalog ------varchar(512)-----------------目录名称<br>
table_schema --------varchar(64)-----------------所属数据库名<br>
table_name ----------varchar(64)-----------------表名<br>
column_name----------varchar(64)-----------------列名称<br>
collation -----------varchar(1)------------------排列方式<br>
cardinality----------bigint ---------------------基数(唯一值数量估计)<br>
comment -------------varchar(16)-----------------索引注释<br>

3、数据库基本操作

操作数据库:
创建数据库: create database +库名
使用数据库: use +库名
删除数据库: drop database 库名
查询当前数据库: select database();
使用数据库版本号:select version();

操作数据表

创建表名
create table 表名(
字段1 数据类型【约束】,
字段2 数据类型【约束】,
......

修改表名
alter table 旧表名 rename to 新表名;
添加字段
alter table 表 add 字段名 类型;
删除字段
alter table 表名 drop 字段名;
删除表 drop table 表名;

数据的操纵语言

新增数据
全部字段插入 insert into 表名 values (值1,值2 .....);
insert into 表名(字段1、字段2)values (值1,值2.....)

修改数据
update 表名 set 字段1=值1,字段2=值2where 条件;
<--不加where修改全表,慎用!!!!>

删除数据
delete from 表明 where 条件;
<-- 删除操作慎用,不加where会删全表>

* 查询语句语言

查询所有字段
select * from 表名;

查询指定字段
select 字段1,字段2,from 表名;

条件查询
select * from 表名 where 条件;
排序 select * from 表名 where 条件;
分页 select * from 表名 limit 起始索引,条数(索引:从0开始)

常用的约束:primary key :主键(唯一+非空) not null:非空;unique:唯一;
foregin key :外键; default:默认值

数据库信息--表

schemata表---数据库信息

功能:存储mysql服务器上的所有数据库的信息

表结构

字段名--------------数据类型----------------说明
catalog_name-------varchar ----------------目录名称
schema_name--------varchar ----------------数据库名称
defalut_character_set_name --varchar -----默认字符集
defalut_collation_name --varchar ---------默认排列规则

--获取所有数据库名
select schema_name from information_schema.schemata;
(shema_name:数据库名,information_schema.schemata:表;

获取数据库以及排列规则
select schema_name,default_collation_name from information_schema.schemata;

tables表 --- 表信息

查看所有表信息
select * from information_schema.tables;
字段名---------------数据类型--------------------------说明
table_catalog       varchar                         目录名称
table_schema        varchar                         所属数据库
table_name          varchar                         表名称
table_type          varchar                         表类型
negine              varchar                         存储引擎
version             int                             行格式版本号
row_format          varchar                         行格式
table_rows          bigint                          表中行数
table_comment       varchar                         表的注释
..........

查询示例:

获取某个数据库中的所有表
select table_name from information_schema.tables where table_schema ='shop';

获取所有表以及其行数(只统计InnoDB表)
select table_name,table_rows from information_schema.TABLES Where table_schema
='shop' AND engine ='InnoDB';

获取所有用户表(排除系统表)
select table_name,table_type from information_schema.tables where table_schema
='shop' AND table_type ='BASE TABLE';

columns表---列信息

查看所有列信息
select *from information_schema.columns;
字段名 ---------------数据类型--------------说明
table_catalog          varchar             目录名
table_schema           varchar             所属数据库名
table_name             varchar             所属表名
column_name            varchar             列名称
ordinal_position       int                 列表中的顺序位置
.....
获取所有users 表的所有列
select column_name ,data_type,is_nullable from information_schema.columns;

获取包含password列的所有表
select table_schema,table_name,column_name from informatiomn_schema.columns 
where column_name like "%password%";

获取某个表的所有以及其详细信息
select column_name,column_type,column_key,extra from information_schema.columns
where table_schema='shop' AND table_name ='users' order by ordinal_position;

SQL注入

注入语句:

' union select schema_name ,2 from  information_schema.schemata --
(在数据库中,空--就是注释,#也是注释)

解释:
schema_name从schemata 表获取的数据库名
2 是填充位
 -- 注释掉后面的内容
 

sql注入就是利用sql的操作语句进行语句的拼接,攻击者最终能够达到自己想要的目的; 问题在于前端用户的输入没有限制,传输到数据库中就会与被注入的语句进行拼接,多是通过 or 1=1 或者 -- # 注释后面的验证语句等操作。

学习心得: 学习网络安全,听老师讲课也好还是自己找资料也罢,这些都是提升自己的能力的一种方式! 学习都是一种循序渐进的过程,如果说你喜欢就会去学他。想要成功大家都知道学习不会是付出一时的精力就能够得到想要的效果,就像技术就是慢慢地沉淀才能在面对实际问题游刃有余。在学习数据库时,我并没有在课上就完全掌握,在自己在复习时有问题可以借助AI工具或者问自己地老师(我认为在没有必要地操作问题就是最好自己能够解决是最好的,这样能够培养自己的独立解决问题的能力和思维)。数据库的学习就是网络安全学习知识点中的一种,在学习其他的基础知识点也是可以通过课上听、下课实践、整理相关的知识点等。整理知识点的过程中,我想无论是AI给的知识还是老师课上讲,知识的梳理都能够让你对知识的印象更深一点。sql的增删改查的语句学习结合工具(navicat 17)就能够掌握十之八九的内容,经常讲的sql注入语句的练习就可以在navicat中学习,这样就能够化抽象为具体。知识点通过AI给的不一定完全是好的,AI只是一个工具,不要完全相信。



本文为网络安全科普、技术研究与安全意识教育用途,非入侵指导、非攻击教程、非商用实施方案,所有内容仅用于合法合规的安全防护、学习研究与攻防演练