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的总结分享。

    参考

  • 相关阅读:
    html pre 元素
    获取不重复随机数
    CSS查找匹配原理和简洁高效
    排序
    javascript 去数组重复项
    asp.net页面生命周期
    经典 Javascript 正则表达式
    深入理解JavaScript定时机制
    排序简介
    理解 JavaScript 闭包
  • 原文地址:https://www.cnblogs.com/JetpropelledSnake/p/9017218.html
Copyright © 2011-2022 走看看