SQL注入教程之报错注入

 更新时间:2022年02月22日 09:53:03   作者:.SYS.  
页面没有显示位,但有数据库的报错信息时,可使用报错注入,下面这篇文章主要给大家介绍了关于SQL报错注入的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

SQL报错注入概述

通过构造特定的SQL语句,让攻击者想要查询的信息(如数据库名、版本号、用户名等)通过页面面的错误提示回显出来。

报错注入的前提条件

  • Web应用程序未关闭数据库报错函数,对于一些SQL语句的错误直接回显在页面上
  • 后台未对一些具有报错功能的函数(如extractvalue、updatexml等)进行过滤

Xpath类型函数

extractvalue()

作用:对XML文档进行查询,相当于在HTML文件中用标签查找元素。

语法: extractvalue( XML_document, XPath_string )

  • 参数1:XML_document是String格式,为XML文档对象的名称
  • 参数2:XPath_string(Xpath格式的字符串),注入时可操作的地方

报错原理:xml文档中查找字符位置是用/xxx/xxx/xxx/...这种格式,如果写入其他格式就会报错,并且会返回写入的非法格式内容,错误信息如:XPATH syntax error:'xxxxxxxx‘

updatexml()

作用:改变文档中符合条件的节点的值。

语法: updatexml( XML_document, XPath_string, new_value )

  • 参数1:XML_document是String格式,为XML文档对象的名称
  • 参数2:XPath_string(Xpath格式的字符串),注入时可操作的地方
  • 参数3:new_value,String格式,替换查找到的符合条件的数据

报错原理:同extractvalue()

其他函数

floor()、rand()、count()、group by联用

作用

floor(x):对参数x向下取整

rand():生成一个0~1之间的随机浮点数

count(*):统计某个表下总共有多少条记录

group by x: 按照 (by) 一定的规则(x)进行分组

报错原理:group by与rand()使用时,如果临时表中没有该主键,则在插入前会再计算一次rand(),然后再由group by将计算出来的主键直接插入到临时表格中,导致主键重复报错

exp()(5.5.5<= MySQL数据库版本号<=5.5.49)

作用:计算以e(自然常数)为底的幂值

语法: exp(x)

报错原理:当参数x超过710时,exp()函数会报错,错误信息如:DOUBLE value is of range:

MySQL数据库报错功能函数总汇

报错注入实例

extractvalue()

依然用sqli/Less-1

直接用报错函数进行暴库操作

暴库

http://127.0.0.1/sqli/Less-1/?id=1' and extractvalue(1,concat('~',database())) --+

暴表

http://127.0.0.1/sqli/Less-1/?id=1' and extractvalue(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='security'))) --+

后面的步骤大致相同,不再演示

updatexml()

暴库

http://127.0.0.1/sqli/Less-1/?id=1' and updatexml(1,concat('~',database()),1) --+

暴表

http://127.0.0.1/sqli/Less-1/?id=1' and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1) --+

总结 

到此这篇关于SQL注入教程之报错注入的文章就介绍到这了,更多相关SQL报错注入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 最新Navicat 16  Mac版安装永久激活教程(亲测有效)

    最新Navicat 16  Mac版安装永久激活教程(亲测有效)

    这篇文章主要介绍了最新Navicat 16  Mac版安装永久激活教程(亲测有效),本文通过图文并茂的形式给大家介绍的非常详细,对Navicat 16 永久激活教程感兴趣的朋友一起看看吧
    2022-08-08
  • mysql与MongoDB性能对比,哪个更适合自己

    mysql与MongoDB性能对比,哪个更适合自己

    经常看到有人讨论,mongodb性能不如MySQL,MySQL能不能代替之类的说法 ,其实作为技术人,很不喜欢哪个比哪个好这种说法,基本就是挑事,我们今天一起
    2023-06-06
  • 数据库设计规范化的五个要求 推荐收藏

    数据库设计规范化的五个要求 推荐收藏

    通常情况下,可以从两个方面来判断数据库是否设计的比较规范。一是看看是否拥有大量的窄表,二是宽表的数量是否足够的少。
    2011-04-04
  • 简单聊聊SQL注入的原理以及一般步骤

    简单聊聊SQL注入的原理以及一般步骤

    所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令,下面这篇文章主要给大家介绍了关于SQL注入的原理以及一般步骤的相关资料,需要的朋友可以参考下
    2022-02-02
  • SQL大量数据查询的优化及非用like不可时的处理方案

    SQL大量数据查询的优化及非用like不可时的处理方案

    这篇文章主要介绍了SQL大量数据查询的优化及非用like不可时的处理方案,需要的朋友可以参考下
    2015-07-07
  • 站内群发消息三种不同用户量的数据库设计

    站内群发消息三种不同用户量的数据库设计

    很多SNS网站和一部分CMS网站都广泛地应用了站内信这一模块,这个看似简单的东西其实背后隐藏着很多需要设计师重视的设计细节,要做好这个“邮递员”是很不容易的,本文讲述站内群发消息三种不同用户量的数据库设计,逐渐设计一个百万级用户量的站内信群发数据库
    2023-12-12
  • 数据库 左连接 右连接 全连接用法小结

    数据库 左连接 右连接 全连接用法小结

    在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。
    2008-08-08
  • 将sqlite3中数据导入到mysql中的实战教程

    将sqlite3中数据导入到mysql中的实战教程

    最近因为工作的需求,需要将sqlite3中的数据导入到mysql中去,发现网上的一些教程都不够详细,索性自己写一篇,下面这篇文章主要给大家介绍了关于将sqlite3数据库中的数据导入到mysql数据库中的相关资料,需要的朋友可以参考下。
    2017-07-07
  • SQLServer中exists和except用法介绍

    SQLServer中exists和except用法介绍

    大家好,本篇文章主要讲的是SQLServer中exists和except用法介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下哦
    2021-12-12
  • 图文详解HTTP头中的SQL注入

    图文详解HTTP头中的SQL注入

    HTTP头字段是超文本传输协议(HTTP)中请求和响应的部分信息,它们定义了HTTP传输的操作参数,下面这篇文章主要给大家介绍了关于HTTP头中SQL注入的相关资料,需要的朋友可以参考下
    2021-12-12

最新评论