码迷,mamicode.com
首页 > 数据库 > 详细

Mysql注入小tips --持续更新中

时间:2018-08-23 21:00:02      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:code   roo   owa   top   utf-8   遇到   from   als   name   

 

  学习Web安全好几年了,接触最多的是Sql注入,一直最不熟悉的也是Sql注入。OWASP中,Sql注入危害绝对是Top1。花了一点时间研究了下Mysql类型的注入。

    文章中的tips将会持续更新,先说说这些天研究的

    这里博主以数字类型注入类型进行讲解,字符类型同理,这里不在敖述。

    我们的环境:phpstudy+mysql+php

      我们的测试代码如下:

          

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
$id= $_GET[‘id‘];//接受get传递的参数名x的值并赋值给变量id  
$conn = mysql_connect(‘127.0.0.1‘,‘root‘,‘root‘);//连接mysql数据库  
mysql_select_db(‘shop‘,$conn);//选择$conn连接请求下的test数据库名 
$sql = "select * from product where pid=$id";//定义sql语句并组合变量id  
$result = mysql_query($sql);//执行sql语句并返回给变量result  
while($row = mysql_fetch_array($result)){//遍历数组数据并显示  
echo "ID:".$row[‘pid‘]."</br>";  
echo "pname:".$row[‘pname‘]."</br>";  
echo "info:".$row[‘pdesc‘]."</br>";  
}  
mysql_close($conn);//关闭数据库连接  
echo "<hr>";  
echo "Sql=";  
echo $sql;
?>

    这里sql语句直接代入查询,没有进行过滤,所以存在sql注入。

    Sql注入的测试过程我是这样理解的,从安全测试不影响企业的角度考虑出发,不从渗透测试角度出发。

    过程如下:

    判断数据库类型--->针对数据库类型进行Sql注入探测判断是否存在Sql注入--->简单注入证明出数据库名/版本号等--->提交安全漏洞

       在实战测试中,需要大家去进行判断数据库类型然后针对性注入。本篇文章都是以Mysql数据库为例子那么咱们就没必要浪费时间了。

      大家测试sql注入都知道,如果是数字类型的,我们一般都会尝试

          技术分享图片

 

 

  通过and 1=1和and 1=2进行简单测试。

    但是随着安全的快速发展,现在很少能遇到and 1=1和and 1=2就能简单判断出的sql注入,多数都有过滤。那么我们这时候就需要花样式的tips的进行简单的探测是否存在sql注入。

      发现漏洞你成功了70%,写出漏洞证明你就完善了后面的30%,所以发现Sql注入这个环节很重要。

      以数字类型为例子

        在Mysql注入中有哪些语句可以代替and 1=1和and 1=2进行判断的?

        这里先从if开始讲起~

        语法:select if(expr1,expr2,expr3)

        解释:当expr1为true,则执行expr2,反之执行expr3

        在Mysql中我们知道0 =false和null=true,非0的数字代表true

        那么我们可以这样判断:

            技术分享图片

 

    通过这种方法去判断是否存在sql注入,继续衍生下去,还可以怎么玩?

      技术分享图片

 

 

 

通过if我们的组合利用将会变得多种多样,这里不一一举例子了。

      Mysql中盲注有基本的两种姿势

          1.and sleep(3)

          2.and BENCHMARK(10000000,ENCODE(‘hello‘,‘mom‘))

        如果存在注入,这两个语句都会产生延迟

              技术分享图片

 

  在前面讲了if,以sleep(3)延迟为例子,benmark延迟同理不讲解了。     

        技术分享图片

 

 

可以通过这种方法进行盲注测试,然后再if上继续延生下去:  

  在Mysql中和and差不多意思的语句是哪个? like?

  使用like进行判断:

      技术分享图片

 

  如果把顺序换下会怎么样?

      技术分享图片

 

     如果过滤了and怎么办?我们如何进行Sql注入判断?

    技术分享图片

 

使用xor,xor用法详细:https://blog.csdn.net/csdn_0_001/article/details/79515643

这样判断等同于and 1=1和and 1=2

    因为不想文章内容太过啰嗦,先介绍几个关系点

    1.and和like用法相近

    2.or和xor用法相近

       and,like,or和xor这几个都是运算符,所以可以随便调换,所以在下面的文章中比如:and if(1,1,0)也可以like if那么同理也可以xor if(),也可以or if

    就是sql语句稍微有点差别罢了

 

        技术分享图片

 

 

继续往下:

    and /or/xor/like都能为我们所用,那between呢?事实证明可以。

    演示下:

    利用between进行盲注  

       陷入循环延迟中。。。这个延迟时间很长。。。

        技术分享图片

 

  这样也是可以判断sql注入的,那么还能怎么玩?

      技术分享图片

 

进行这样进行sql注入判断。。

      写到这里我有点累。。继续吧。。

        还是从Mysql if开始说起吧。。。

       Mysql中小数不代表false我们还可以怎么玩?

          技术分享图片

 

    通过这样尝试绕过某些限制。。

      好吧有点扯淡了。再一个要介绍Myql中的<>

    简单演示下,也能判断注入

      技术分享图片

 

那么之前就说过能and ,就能like,就能xor,就能or进行sql注入判断,实在是举例子起来太多。。

xor比较复杂点,以xor为例子吧。。。

    技术分享图片

 

 

  认真写一篇文章真的好累。。

      如果过滤了if我们还能怎么办。。好吧我们还有亲戚[想不到吧?]

       语法: ifnull(expr1,expr2)

       解释:如果expr1不是null就是expr1,如果expr1是null就是expr2

      简单演示下:

      技术分享图片

 

还是以xor为例子演示一遍,or like不说了

 

    技术分享图片

 

 如果ifnull也过滤了怎么办?还有好基友帮忙:

    语法:nullif(expr1,expr2)

    解释:如果expr1等于expr2返回null,如果expr1不等于expr2返回expr1

    以xor为例子

      技术分享图片

 

 

然后还能测试盲注。

 

  技术分享图片

 

 

技术分享图片

 

技术分享图片

 

改成1试试。

  技术分享图片

 

先写这么多,等会继续写。。。

 

 

 

 

 

 

 

 

 

        

 

 

        

 

 

 

 

 

 

      

 

 

 

 

            

            

    

    

    

Mysql注入小tips --持续更新中

标签:code   roo   owa   top   utf-8   遇到   from   als   name   

原文地址:https://www.cnblogs.com/piaomiaohongchen/p/9526006.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!