sql注入5-报错盲注

一、SQL注入渗透与攻防

1. SQL注入之前言

1)SQL注入概述
  • SQL注入定义
    • SQL注入定义: SQL注入是一种通过操纵SQL查询来访问、修改或删除数据库数据的攻击手段。
  • SQL注入场景
    • 场景举例:
      • 查询数据: 如在网站应用中通过select语句查询用户信息。
      • 删除数据: 如后台管理中通过delete语句删除文章或用户。
      • 插入数据: 如在网站应用中通过insert语句添加新用户。
  • SQL注入类型
    • 注入类型: 根据功能的不同,SQL语句的语法也会有所改变,对应的SQL注入方式也会有所变化。
2)SQL注入与功能语句
  • 功能语句与注入
    • 功能语句:
      • 查询: select * from user where id=1;
      • 删除: delete from user where id=1;
      • 插入: insert into user (id, name, pass) values (1, 'zhangsan', '1234');
    • 注入影响: 不同的SQL语句在执行时,若存在注入点,攻击者可以利用该点进行数据操纵。
3)无回显注入与盲注
  • 无回显注入
    • 无回显原因: 当SQL语句查询方式导致没有数据回显时,可能是因为查询语句本身不返回数据或页面不显示查询结果。
  • 盲注定义与分类
    • 盲注定义: 盲注是指在注入过程中,获取的数据不能显示到前端页面,需要通过其他方式判断或尝试。
    • 盲注分类:
      • 基于布尔的SQL盲注: 利用逻辑判断,如regexp、like、ascii、left、ord、mid等函数进行注入。
4)报错注入
  • 报错注入概述
    • 报错注入定义: 在没有回显点的情况下,通过构造特定的SQL语句使数据库报错,从而获取数据库信息。
  • 报错注入示例
    • 示例语句:
      • union select 1,extractvalue(1,concat(0x7e,(select version())))#
      • updatexml(1,concat(0x7e,database()),0) or
    • 作用: 通过报错信息获取数据库版本、库名等信息,为后续的注入攻击做准备。
5)注入过程中的数据操作
  • 数据插入与回显
    • 数据插入: 如执行insert into tl values(2,'wangwu', 2345);语句插入数据。
    • 回显与状态:
      • 查询回显: 如执行select * from tl where id=1;语句时,数据会显示到前端页面。
      • 插入状态: 执行插入语句时,页面通常只显示操作成功或失败的状态,而不显示具体数据。
  • 无回显情况下的处理
    • 无回显问题: 当执行插入等不返回数据的语句时,页面无回显,无法进行直接的情报收集。
    • 处理方法: 此时可利用报错注入等方式,通过构造特定语句获取数据库信息。
2. SQL注入之查询方式

1)基于报错的SQL盲注-报错回显

  • 函数解析

    
    •  extractvalue updatexml函数介绍

      

      UPDATEXML()EXTRACTVALUE() 都是 MySQL 中用于操作 XML 数据的函数,它们分别用于更新 XML 数据中的内容和提取 XML 数据中的值。以下是这两个函数的详细介绍:

      1. UPDATEXML() 函数

      UPDATEXML() 是 MySQL 中用于修改 XML 数据的函数。它通过指定一个 XPath 表达式来定位 XML 中的节点,并将该节点的值更新为提供的新值。

      语法
      UPDATEXML(xml_doc, xpath_expr, new_value)
      
    • xml_doc:要更新的 XML 文档,通常是一个包含 XML 数据的列或 XML 字符串。

    • xpath_expr:XPath 表达式,用于指定要更新的节点。

    • new_value:要更新的新值,用来替换 XPath 表达式所匹配的节点的内容。

    • 返回值
    • 如果更新成功,返回更新后的 XML 文档。

    • 如果指定的 XPath 表达式没有找到匹配的节点,或者发生了其他错误,则返回 NULL

    • 示例

      假设有以下 XML 数据:

      <bookstore>
          <book category="fiction">
              <title>XML for Dummies</title>
              <author>John Doe</author>
              <price>29.95</price>
          </book>
          <book category="technology">
              <title>Learning XPath</title>
              <author>Jane Smith</author>
              <price>39.95</price>
          </book>
      </bookstore>
      

      修改价格: 假设我们要将 category="fiction" 的书籍的 price 更新为 25.00

      SELECT UPDATEXML(
          '<bookstore>
              <book category="fiction">
                  <title>XML for Dummies</title>
                  <author>John Doe</author>
                  <price>29.95</price>
              </book>
              <book category="technology">
                  <title>Learning XPath</title>
                  <author>Jane Smith</author>
                  <price>39.95</price>
              </book>
          </bookstore>',
          '//book[@category="fiction"]/price',
          '25.00'
      ) AS updated_xml;
      

      返回结果

      <bookstore>
          <book category="fiction">
              <title>XML for Dummies</title>
              <author>John Doe</author>
              <price>25.00</price>
          </book>
          <book category="technology">
              <title>Learning XPath</title>
              <author>Jane Smith</author>
              <price>39.95</price>
          </book>
      </bookstore>
      

      在这个例子中,UPDATEXML() 函数将 category="fiction" 的书籍的价格更新为 25.00


      2. EXTRACTVALUE() 函数

      EXTRACTVALUE() 是 MySQL 中用于从 XML 文档中提取值的函数。它通过指定一个 XPath 表达式来定位 XML 中的节点,并返回该节点的文本值。

      语法
      EXTRACTVALUE(xml_doc, xpath_expr)
      
    • xml_doc:要提取值的 XML 文档,可以是一个包含 XML 数据的列或 XML 字符串。

    • xpath_expr:XPath 表达式,用于指定要提取值的节点。

    • 返回值
    • 如果 XPath 表达式匹配到一个节点,返回该节点的文本内容。

    • 如果没有找到匹配的节点,返回 NULL

    • 示例

      假设有以下 XML 数据:

      <bookstore>
          <book category="fiction">
              <title>XML for Dummies</title>
              <author>John Doe</author>
              <price>29.95</price>
          </book>
          <book category="technology">
              <title>Learning XPath</title>
              <author>Jane Smith</author>
              <price>39.95</price>
          </book>
      </bookstore>
      

      提取书籍的价格: 如果我们想提取 category="fiction" 的书籍的价格,可以使用如下查询:

      SELECT EXTRACTVALUE(
          '<bookstore>
              <book category="fiction">
                  <title>XML for Dummies</title>
                  <author>John Doe</author>
                  <price>29.95</price>
              </book>
              <book category="technology">
                  <title>Learning XPath</title>
                  <author>Jane Smith</author>
                  <price>39.95</price>
              </book>
          </bookstore>',
          '//book[@category="fiction"]/price'
      ) AS price;
      

      返回结果

      29.95
      

      在这个例子中,EXTRACTVALUE() 函数从 XML 文档中提取了 category="fiction" 的书籍的价格,即 29.95


      3. UPDATEXML()EXTRACTVALUE() 的区别

      特性UPDATEXML()EXTRACTVALUE()
      功能用于更新 XML 文档中的节点内容。用于从 XML 文档中提取节点的文本值。
      返回值返回更新后的 XML 文档。返回提取的节点文本值。如果没有匹配的节点,返回 NULL
      使用场景适用于需要修改 XML 数据的场景。适用于从 XML 文档中提取数据的场景。
      XPath 表达式支持通过 XPath 表达式来定位需要更新的节点。支持通过 XPath 表达式来定位需要提取的节点。
      示例UPDATEXML(xml_doc, '//book/price', '25.00') 修改价格为 25.00EXTRACTVALUE(xml_doc, '//book/price') 提取价格信息。

      4. 总结

    • UPDATEXML() 函数用于在 XML 文档中修改指定节点的内容。通过指定 XPath 表达式和新值,UPDATEXML() 可以更新 XML 文档中的某个节点的值。

    • EXTRACTVALUE() 函数用于从 XML 文档中提取指定节点的文本值。通过指定 XPath 表达式,EXTRACTVALUE() 可以从 XML 数据中提取特定的信息。

    • 这两个函数对于处理存储在 MySQL 中的 XML 数据非常有用,分别适用于修改和提取 XML 文档中的信息。

    • XPath语法简介

      XPath(XML Path Language)是用于在 XML 文档中查找信息的语言。XPath 允许你在 XML 文档中遍历节点、筛选节点以及对 XML 文档中的数据进行操作。它是许多 XML 相关技术的基础,如 XSLT(可扩展样式表转换)、XQuery 和许多数据库查询工具(如 MySQL 的 UPDATEXML())。

      XPath 提供了一种简洁的方法来查找和操作 XML 文档中的节点。

      1. 基本语法

      XPath 表达式通过路径选择符来访问 XML 文档中的节点,路径由斜杠 / 分隔。XPath 语法主要包括以下几个部分:

      1.1 路径语法
    • /:从根节点开始选择。

    • //:从文档的任意位置选择,表示"查找所有匹配的节点"。

    • .:当前节点。

    • ..:当前节点的父节点。

    • @:选择属性节点。

    • 1.2 选择节点的基本方式
    • 选择根节点/ 从根节点开始选择。

      • 例:/bookstore 选择根节点下的 bookstore 元素。

    • 选择子节点/ 用于选择当前节点的直接子节点。

      • 例:/bookstore/book 选择 bookstore 元素下的所有 book 元素。

    • 选择所有后代节点// 用于选择文档中任意位置的后代节点。

      • 例://book 选择文档中所有的 book 元素。

    • 选择当前节点. 代表当前节点。

      • 例:./price 选择当前节点的子节点 price

    • 选择父节点.. 代表当前节点的父节点。

      • 例:../bookstore 选择当前节点的父节点下的 bookstore 元素。

    • 1.3 选择属性节点
    • @ 用于选择属性。

      • 例:/bookstore/book/@category 选择 book 元素下的 category 属性。

      • 例://book/@category 选择文档中所有 book 元素的 category 属性。

    • 2. XPath 条件筛选

      XPath 还允许通过条件筛选特定的节点。筛选条件通常放在方括号 [] 中。

      2.1 根据节点值筛选
    • node_name[text()='value']:选择具有特定文本值的节点。

      • 例:/bookstore/book[price='29.95'] 选择 price 值为 29.95book 元素。

    • 2.2 根据属性值筛选
    • @attr_name='value':选择具有特定属性值的节点。

      • 例:/bookstore/book[@category='fiction'] 选择 category 属性为 fictionbook 元素。

    • 2.3 使用逻辑运算符

      可以结合多个条件使用逻辑运算符(如 andor)来进行筛选。

    • 例:/bookstore/book[price<30 and @category='fiction'] 选择 price 小于 30categoryfictionbook 元素。

    • 2.4 选择位置节点
    • [position()]:选择特定位置的节点。

      • 例:/bookstore/book[1] 选择 bookstore 下的第一个 book 元素。

      • 例:/bookstore/book[last()] 选择 bookstore 下的最后一个 book 元素。

      • 例:/bookstore/book[position() < 3] 选择 bookstore 下前三个 book 元素。

    • 3. XPath 运算符

      3.1 算术运算符
    • +-*div:执行算术运算。

      • 例:/bookstore/book/price + 5 计算每个 book 元素下 price 的值加 5。

      • 例:/bookstore/book/price div 2 将每个 book 元素下 price 的值除以 2。

    • 3.2 比较运算符
    • =!=<><=>=:比较运算符。

      • 例:/bookstore/book[price>20] 选择 price 大于 20book 元素。

    • 3.3 逻辑运算符
    • andor:逻辑运算符。

      • 例:/bookstore/book[price>20 and @category='fiction'] 选择 price 大于 20 且 categoryfictionbook 元素。

    • 4. XPath 函数

      XPath 提供了许多函数来增强查询能力。常用的函数有:

      4.1 text()

      text() 用于选择节点的文本值。

    • 例:/bookstore/book[price>20]/title/text() 选择 price 大于 20 的 book 元素的 title 文本。

    • 4.2 contains()

      contains() 用于检查某个字符串是否包含在节点值中。

    • 例:/bookstore/book[contains(title, 'XML')] 选择 title 中包含 "XML" 的 book 元素。

    • 4.3 normalize-space()

      normalize-space() 用于移除节点文本值中的前导和尾随空格。

    • 例:/bookstore/book[normalize-space(title)='XML Book'] 选择 title 文本值为 "XML Book"(去除空格后)的 book 元素。

    • 4.4 sum()

      sum() 函数计算节点集的总和。

    • 例:sum(/bookstore/book/price) 计算所有 book 元素中 price 的总和。

    • 4.5 last()

      last() 用来选择集合中的最后一个节点。

    • 例:/bookstore/book[last()] 选择 bookstore 下的最后一个 book 元素。

    • 5.4 选择价格大于 30 的 book
      /bookstore/book[price>30]
      
      5.5 选择第二本书:
      /bookstore/book[2]
      
      5.6 选择所有 book 元素的 title 文本:
      /bookstore/book/title/text()
      

      6. 总结

      XPath 是一种功能强大的查询语言,用于从 XML 文档中选择和操作节点。掌握 XPath 的基础语法和常用函数可以大大提高你在处理 XML 数据时的效率。XPath 在 XML 解析、数据抽取、Web Scraping、XSLT 转换等场景中具有广泛的应用。

      5. XPath 示例

      假设有以下 XML 数据:

      <bookstore>
          <book category="fiction">
              <title>XML for Dummies</title>
              <author>John Doe</author>
              <price>29.95</price>
          </book>
          <book category="technology">
              <title>Learning XPath</title>
              <author>Jane Smith</author>
              <price>39.95</price>
          </book>
      </bookstore>
      
      5.1 选择所有 book 元素:
      /bookstore/book
      
      5.2 选择所有 price 元素:
      /bookstore/book/price
      
      5.3 选择 categoryfictionbook
      /bookstore/book[@category='fiction']
      
      
    • XML文档与数据库文件读取

      
      • XML文档结构
      • 在数据库中处理 XML 数据,可以通过多种方式读取和操作 XML 文档。具体的实现取决于你使用的数据库系统,以及 XML 数据存储的方式(例如,存储为字符串类型、XML 类型列等)。以下将介绍如何在数据库中读取存储的 XML 数据,以及如何将 XML 文档从外部读取到数据库中。

        1. XML 文档在数据库中的存储方式

        数据库中可以以不同的方式存储 XML 数据:

      • 作为字符串:XML 数据可以作为普通的文本或字符串存储在数据库的 VARCHARTEXT 等字段中。

      • 作为 XML 数据类型:一些数据库(如 SQL Server、MySQL、PostgreSQL 等)支持专门的 XML 数据类型。这种方式允许你存储 XML 数据并对其执行 XPath 查询、XQuery 等操作。

      • 2. 在 MySQL 中处理 XML 数据

        2.1 存储 XML 文档为字符串

        假设你有一个 XML 文档,你可以将其存储在数据库中的某个字段中。首先,创建一个包含 XML 数据的表。

        CREATE TABLE xml_data (
            id INT AUTO_INCREMENT PRIMARY KEY,
            xml_content TEXT
        );
        

        然后将 XML 文档存储在 xml_content 字段中。

        INSERT INTO xml_data (xml_content)
        VALUES ('<bookstore><book><title>XML for Dummies</title><author>John Doe</author><price>29.95</price></book></bookstore>');
        
        2.2 读取 XML 字符串并查询

        你可以使用 EXTRACTVALUE()UPDATEXML() 等 MySQL 函数对存储的 XML 字符串执行 XPath 查询。

        例如,提取 price 的值:

        SELECT EXTRACTVALUE(xml_content, '//book/price') AS price
        FROM xml_data
        WHERE id = 1;
        
        2.3 读取 XML 数据类型字段(如果支持)

        在一些支持 XML 数据类型的数据库系统中(如 SQL Server、PostgreSQL 以及 MySQL 5.6 及之后的版本),你可以直接使用 XML 数据类型字段。例如,在 MySQL 中,可以使用 XML 数据类型存储 XML 数据,或者将其转换为合适的格式进行处理。

        首先,创建一个表,并使用 XML 数据类型(如果使用支持的数据库)。

        CREATE TABLE xml_data (
            id INT AUTO_INCREMENT PRIMARY KEY,
            xml_content XML
        );
        

        然后,插入 XML 数据:

        INSERT INTO xml_data (xml_content)
        VALUES ('<bookstore><book><title>XML for Dummies</title><author>John Doe</author><price>29.95</price></book></bookstore>');
        

        读取 XML 数据:

        SELECT xml_content
        FROM xml_data
        WHERE id = 1;
        
        2.4 使用 XPath 查询 XML 数据

        如果数据库支持 XML 数据类型,你还可以在查询中使用 XPath 查询。例如:

        SELECT EXTRACTVALUE(xml_content, '//book/price')
        FROM xml_data
        WHERE id = 1;
        

        3. 在 SQL Server 中处理 XML 数据

        SQL Server 提供了 XML 数据类型,使得处理 XML 文档变得更简单和高效。

        3.1 存储 XML 数据

        你可以将 XML 文档存储为 XML 数据类型。

        CREATE TABLE xml_data (
            id INT PRIMARY KEY,
            xml_content XML
        );
        

        然后插入一个 XML 文档:

        INSERT INTO xml_data (id, xml_content)
        VALUES (1, '<bookstore><book><title>XML for Dummies</title><author>John Doe</author><price>29.95</price></book></bookstore>');
        
        3.2 查询 XML 数据

        你可以使用 XML 数据类型提供的 .value() 方法来从 XML 数据中提取内容,或使用 .nodes() 方法进行更复杂的查询。

        例如,提取 price 节点的值:

        SELECT xml_content.value('(/bookstore/book/price)[1]', 'DECIMAL(10,2)') AS price
        FROM xml_data
        WHERE id = 1;
        
        3.3 使用 XQuery 查询 XML 数据

        SQL Server 还支持 XQuery 来进行复杂的查询操作。例如:

        SELECT xml_content.query('for $x in /bookstore/book/price return $x') AS prices
        FROM xml_data
        WHERE id = 1;
        

        4. 在 PostgreSQL 中处理 XML 数据

        PostgreSQL 也提供了对 XML 数据的原生支持。它提供了 xml 数据类型以及用于操作 XML 数据的函数。

        4.1 存储 XML 数据

        首先,创建一个包含 XML 数据的表:

        CREATE TABLE xml_data (
            id SERIAL PRIMARY KEY,
            xml_content XML
        );
        

        然后,插入 XML 数据:

        INSERT INTO xml_data (xml_content)
        VALUES ('<bookstore><book><title>XML for Dummies</title><author>John Doe</author><price>29.95</price></book></bookstore>');
        
        4.2 查询 XML 数据

        你可以使用 PostgreSQL 提供的 xpath() 函数从 XML 数据中提取节点。

        例如,提取 price 节点的值:

        SELECT xpath('//book/price/text()', xml_content) AS price
        FROM xml_data
        WHERE id = 1;
        

        5. 读取 XML 文件到数据库

        如果你的 XML 文档存储在文件中,并且希望将文件内容读取到数据库中,以下是常见的步骤:

        5.1 通过脚本读取 XML 文件并插入到数据库

        你可以编写脚本(例如使用 Python、PHP 或其他编程语言)读取 XML 文件并将其插入到数据库中。例如,使用 Python 和 MySQL:

        import mysql.connector
        from lxml import etree
        
        # 连接到 MySQL 数据库
        conn = mysql.connector.connect(
            host="localhost", 
            user="your_user", 
            password="your_password", 
            database="your_database"
        )
        cursor = conn.cursor()
        
        # 读取 XML 文件
        tree = etree.parse('your_file.xml')
        xml_string = etree.tostring(tree, pretty_print=True).decode()
        
        # 插入 XML 数据到数据库
        cursor.execute("INSERT INTO xml_data (xml_content) VALUES (%s)", (xml_string,))
        conn.commit()
        
        # 关闭连接
        cursor.close()
        conn.close()
        
        5.2 使用 SQL Server 读取 XML 文件并插入

        SQL Server 也提供了读取文件并插入 XML 的方法。可以使用 OPENROWSETBULK 语句来读取文件。

        INSERT INTO xml_data (xml_content)
        SELECT * FROM OPENROWSET(BULK 'C:\path\to\your\file.xml', SINGLE_BLOB) AS xml_data;
        

        6. 总结

        在数据库中处理 XML 数据有多种方式,主要依赖于数据库的 XML 支持:

      • MySQL、PostgreSQL 和 SQL Server 都支持 XML 数据类型,允许你对 XML 文档进行高效查询和操作。

      • 你可以将 XML 文档存储为普通字符串(如 TEXT 类型),并使用适当的函数(如 EXTRACTVALUE()UPDATEXML() 等)进行查询。

      • 如果需要将外部 XML 文件导入数据库,你可以使用脚本或数据库提供的功能来完成。

      • 这些方法使得在数据库中存储和处理 XML 数据变得非常方便,适用于需要处理结构化数据的场景。

        • 报错回显函数解析
          • updatexml()函数
            • 作用: 从目标XML中更改包含所查询值的字符串。
            • 参数:
              • 第一个参数:XML document,String格式,为XML文档对象的名称,文中为DOC。
              • 第二个参数:XPath_string(Xpath格式字符串)。
              • 第三个参数:new_value,String格式,替换查找到的符合条件的数据。
            • 利用方式: 如果第二个参数不是XPath格式,则会报错,可以利用此特性进行SQL注入。
          • extractvalue()函数
            • 作用: 从目标XML中返回包含所查询值的字符串。
            • 参数:
              • 第一个参数:XML_document,String格式,为XML文档对象的名称,文中为DOC。
              • 第二个参数:XPath_String(Xpath格式字符串)。
            • 利用方式: 同updatexml(),如果第二个参数不是XPath格式,则会报错,可以利用此特性进行SQL注入。
        • 报错回显实例演示
          • 演示环境准备
            • 数据库: MySQL
            • 工具: Burp Suite
          • 演示步骤
            • 步骤一: 启动Burp Suite,设置代理。
            • 步骤二: 访问目标网站(如SQL Labs的第11关)。
            • 步骤三: 提交表单,抓包分析。
          • 报错注入过程
            • 判断数据类型: 通过提交不同数据类型(如单引号、双引号)判断闭合符。
            • 构造报错语句: 利用updatexml()或extractvalue()函数构造报错语句,获取数据库信息。
            • 实例: 提交uname=mc' and extractvalue(1,concat(0x7e,database()))-- ,通过报错信息获取数据库名。
          • 注意事项
            • 闭合符判断: 如果不清楚闭合符,可以尝试单引号和双引号组合提交,通过报错信息判断。
            • 函数选择: updatexml()和extractvalue()均可用于报错注入,根据具体情况选择使用。
        • 报错注入的应用
          • 信息收集: 通过报错信息获取数据库版本、数据库名、表名、列名等敏感信息。
          • 攻击扩展: 结合其他SQL注入技巧,进一步获取或篡改数据。
          • 实例: 在获取数据库名后,可进一步构造语句获取表名、列名,甚至进行数据篡改。
    • 利用函数进行报错注入
      
      • 报错注入原理
        • 原理: 报错注入利用数据库在发生错误时返回的错误信息,通过构造特定的SQL语句使数据库报错,从而泄露数据库信息。
      • 使用函数进行报错注入
        • extractvalue函数
          • 函数作用: extractvalue函数用于从目标XML中查询包含特定值的字符串,如果第二个参数不是合法的XPath表达式,则会引发错误并返回错误信息。
          • 用法示例:
  • 此语句通过concat函数将版本号与特定字符(如波浪号)拼接,如果XPath语法错误,则会返回包含版本号的错误信息。
  • - updatexml函数
  • - 函数作用: updatexml函数用于更新XML文档中的特定字符串,同样,如果第二个参数不是合法的XPath表达式,会引发错误。
  • - 用法示例:
  • 此语句尝试更新XML文档,由于XPath表达式错误,会返回包含数据库名的错误信息。
    • 报错信息的利用
      • 信息收集: 通过构造引发错误的SQL语句,可以从返回的错误信息中提取数据库的版本号、数据库名等敏感信息。
      • 示例:
        • 获取版本号:
  • 返回的错误信息中包含数据库的版本号。
  • - 获取数据库名:
  • 返回的错误信息中包含数据库的名称。
    • 注意事项
      • 波浪号的使用: 在构造报错注入的SQL语句时,常在查询的字符串前后添加波浪号(~),这是为了方便后续使用自动化扫描工具进行数据处理。扫描工具通过正则表达式识别波浪号包围的内容,从而准确提取所需信息。
    • limit语句的使用
      • 作用: 当查询结果过多,一行显示不下时,可以使用limit语句进行分页显示。
      • 用法示例:
  • 此语句通过limit 0,1从查询结果中获取第一个表名。
    • 综合应用
      • 综合查询: 通过结合使用报错注入函数和limit语句,可以逐步获取数据库中的多个表名或其他信息。
      • 示例:
        • 获取多个表名:
  • 通过修改limit语句中的偏移量和行数,可以获取不同的表名。
    • updatexml函数参数解析

      
      • updatexml函数用法
        • 参数灵活性: updatexml函数的参数可以灵活修改,第一个和第三个参数不重要,重点是第二个参数,用于报错注入。
        • 函数作用: 通过构造特定的SQL语句,利用updatexml函数的报错信息,可以获取到数据库中的敏感信息。
      • 另一种用法
        • or查询: 除了使用union select进行联合注入外,还可以使用or来进行查询注入,同样可以利用updatexml函数的报错信息获取敏感数据。
        • 灵活性: 这种方法提供了更多的灵活性,可以根据实际情况选择最适合的注入方式。
        • 示例: 'or updatexml(1.concat(Ox7e,database()).0)or' 可以通过这种方式构造SQL语句进行注入。
      • 总结
        • 核心点: updatexml函数的参数解析和报错注入的利用是关键。
        • 灵活性: 函数的参数可以灵活修改,提供了多种注入方式的可能性。
        • 注意事项: 在使用前需要确认目标数据库中存在该函数,并注意参数的选择和构造。
    • or逻辑在SQL注入中的应用
      
      • or逻辑的基本用法
      • or逻辑在SQL注入中的应用
      • 实战演示:利用or逻辑进行SQL注入
      • 总结
        • or逻辑的重要性: 在SQL注入中,or逻辑是一种非常有用的工具,可以帮助攻击者绕过安全限制,获取敏感信息。
        • 安全建议: 对于开发者来说,应该加强对SQL注入的防范意识,采用参数化查询、预编译语句等安全措施来防止SQL注入攻击。同时,也需要定期对数据库进行安全审计和漏洞扫描,及时发现并修复潜在的安全漏洞。
二、知识小结

知识点

核心内容

考试重点/易混淆点

难度系数

SQL注入基础

SQL语句根据功能不同,语法有变化

SQL语句类型与功能对应关系

SQL注入类型

基于报错的SQL盲注

报错注入的原理与应用场景

函数应用

updateXML与extractValue函数

函数参数、功能及报错机制

数据类型判断

字符型与数字型判断

单引号与双引号闭合识别

联合查询与OR查询

利用union与or进行注入

两者在注入中的区别与适用场景

信息收集

通过报错回显收集数据库信息

版本号、库名、表名等关键信息获取

LIMIT用法

分页显示查询结果

limit参数设置与数据获取策略

字符串拼接

使用concat函数拼接字符串

拼接技巧与报错注入结合应用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值