做题前,先在sqli-labs代码中加入:
echo $sql;
echo "<br>";
作用:将得到的SQL语句在页面上输出,便于浏览
Less-1
1、输入?id=1,有回显
2、将1改为2,3,仍有不同回显
在id=1后面加上单引号',得到报错信息,说明可能存在SQL注入漏洞
3、输入--+将后面的语句注释掉,回显正常
4、用order by语句测试有几列,输入4时回显不正常,改为3回显正常,说明该表一共有三列
5、接下来使用联合查询,输入联合查询语句,语句是正确的,但没有回显信息
6、 将前面的句子注释掉,再次执行,发现用户名和密码这两个位置有回显,说明页面有两个回显位,可以进行利用
7、 进行查库,得到第一个库名
8、使用limit语句,得到第二个数据,第三个数据
但是用limit语句查询比较慢,可以用group_concat函数进行查库,执行后得到所有数据库名
9、查表
Url编码,单引号'转化成%27,为避免单引号的问题 ,可将security转化为十六进制再执行
10、查列
11、查字段
分别取出用户名和密码
同时取出用户名和密码,可用concat_ws('连接符',字段1,字段2)函数
但此时只显示了一个数据
可用group_concat再次包裹进行显示,一次性取出所有数据
Less-2
1、输入?id=1,得到正常回显
2、在1后加上单引号',根据回显出来的语句可知多加了一个单引号,此题不需加'
3、 直接进行order by查询有几列
order by 3回显正常,order by 4报错,说明有三列
4、使用联合查询,查看有几个数据可以回显。查询后可以看到有两个回显位置
5、查库,得到所有数据库名
6、查表,此处查询security数据库中的所有表名
7、查列,此处查询users表
8、查字段,查出username和password中的数据
Less-3
1、输入?id=1,发现题目对id值进行了括号和单引号的包裹
平时做题需要先进行测试,输入?id=1',出现报错
输入?id=1')--+,回显成功
2、order by 语句测试该表有几列,输入4时回显不正常,改为3回显正常,说明该表一共有三列
3、使用联合查询语句,查看有几个回显点
4、查库
5、 查表
6、查列
7、查字段
与第一关第二关步骤相同
Less-4
1、输入?id=1,回显正常
输入?id=1",出现报错
根据报错语句,改为输入?id=1")--+ ,回显正常
接下来的步骤和注入语句均与之前的一样,order by测试有几列,联合查询查看有几个回显位置,
查库,查表,查列,查字段