zoukankan      html  css  js  c++  java
  • SQL学习之SQL注入学习总结

    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

    测试数据库

    我们本文就以如下数据库作为测试数据库,完成我们的注入分析。

    相关函数

    在学习盲注之前,首先要了解一下在sql盲注中所涉及到的函数以及使用方法。

    mid()---从文本字段中提取字符

    SELECT MID(column_name,start[,length]) FROM table_name;  

    column_name 必需。要提取字符的字段。

    start 必需。规定开始位置(起始值是 1)。

    length 可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。

     

    limit()---返回前几条或者中间某几行数据

    select * from table limit m,n;    

    其中,记录从index 0开始,m表示第m条记录 ,n指第m+1条开始取n条

     

     

    concat、concat_ws、group_concat

     MySQL的concat函数在连接字符串的时候,只要其中一个是NULL,那么将返回NULL

    和concat不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL

    group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

     

     

    Count()---聚集函数,统计元祖的个数

     

    rand()---用于产生一个0~1的随机数

     

    floor()---向下取整

     

     

    group by---依据我们想要的规则对结果进行分组

     

     

    length()---返回字符串的长度

     

    Substr()---截取字符串 三个参数 (所要截取字符串,截取的位置,截取的长度)

     

     

    Ascii()---返回字符串的ascii码

    报错注入

     基于floor,UpdateXml(有长度限制,最长32位),ExtractValue(有长度限制,最长32位)进行报错注入。

    floor报错

    • 获取数据库

    • 获取表名

    • 获取字段名

     

    • 获取内容

     

    UpdateXml报错注入

    • 获取表名

    • 获取字段

    • 获取内容

     extractvalue报错

    • 获取表名

    • 获取字段

     

    extractvalue报错注入

    • 获取字段

    基于布尔盲注

    通过构造sql语句,通过判断语句是否执行成功来对数据进行猜解。

    • 查看表名

    • 获取表名第一个字符

    • 获取表名第一个字符的ASCII

    获取字段名与字段内容原理一样。

    以Sqli-labs Less8为例,无论输入什么就只有正确和错误,于是可以判断基于布尔的盲注。

    • 先判断当前数据库的长度

    发现当值为8的时候,页面就没有显示。那么说明database()的长度是8

    • 获取数据库名

    可以使用如下脚本猜解数据库名字:

    • 获取表长度

    发现当值为6的时候,页面就没有显示。那么说明表的长度是6

    • 获取表名

    和上面类似,只需要把payload修改为下面即可:

    • 获取列名

    • 获取内容

     

    基于时间盲注

    基于的原理是,当对数据库进行查询操作,如果查询的条件不存在,语句执行的时间便是0.但往往语句执行的速度非常快,线程信息一闪而过,得到的执行时间基本为0。但是如果查询语句的条件不存在,执行的时间便是0,利用该函数这样一个特殊的性质,可以利用时间延迟来判断我们查询的是否存在。这便是SQL基于时间延迟的盲注的工作原理

    首先理解一下下面的语句:

    判断数据库名是否为security,正确返回1,错误返回2。基于时间的注入和基于布尔差不多,引入了if语句进行判断。

    以Sqli-labs Less8为例,无论我们怎么输入,输出结果都是You are in ,所以判断为基于时间的盲注。

    • 数据库长度判断

    • 使用二分法获得数据库名

     

    剩余步骤和基于布尔的差不多,只是加了一个if判断语句进行判断

    • 获取表名:

    • 获取列名:

    • 获取内容:

     

     

    总结

     本文总结了关于sql注入中的报错注入和盲注的一些原理以及测试方法。感谢Hello_C的总结分享。

    参考

  • 相关阅读:
    I.MX6 Surfaceflinger 机制
    理解 Android Fragment
    RPi 2B DDNS 动态域名
    RPi 2B IPC webcam server
    理解 Android MVP 开发模式
    I.MX6 system.img unpack repack
    can't set android permissions
    VMware Ubuntu 共享文件夹
    解决oracle数据库连接不上的问题
    perfect-scrollbar示例
  • 原文地址:https://www.cnblogs.com/JetpropelledSnake/p/9017218.html
Copyright © 2011-2022 走看看