Error Based Injection和sql注入函数

文章目录

  • Error Based Injection和sql注入函数
    • 一、什么是Error Based Injection
    • 二、extractvalue()
    • 三、updatexml()
    • 四、concat()
    • 五、附录

一、什么是Error Based Injection

Error Based Injection是sql注入的一种,就像中文意思表述的一样是基于错误的注入。可以从两个层次去理解它:一是寻找注入点的方式,是通过构造恶意输入引发数据报错;二是在回显受到限制的时候,可以通过构造特定的报错来获取数据库中的特定数据。

1、 利用回显的报错注入

这个过程也是不断尝试,进行猜测目标数据库的基本信息和sql语句构造的形式。

可以进行"单引号"、“1 and 1=1”、“1’ and 1=1’”、“双引号”,根据回显错误来判断。

2、 利用报错信息的报错注入

双查询注入,就是在查询中再套一个子查询。而双查询注入就是在通过双查询语句精心构造一些报错,这些报错信息将泄漏数据库数据。

1) 函数rand()产生一个[0,1)之间的随机数

2) 函数floor()的作用是取整

3) 函数count()用于计数

双查询注入的巧妙的地方就是floor(rand()*2))产生的数只可能是0或1,而且会在插入前和插入时被执行两次,并且两次结果可能不同也可能相同。

?id=1' union select -1,count(*),concat(0x3a,0x3a,(select database()),0x3a,0x3a,floor(rand()*2))a from information_schema.columns group by a -- -

如果两次的键值一样,就产生的重复的键值,而报错信息会告诉我们哪个键值重复,也就泄露了我们所想要的信息。

但是,由于随机性如果运气不好,可能要多试几次才能得到理想报错。

3、 利用函数构造报错

这种方式灵活方便,如下介绍几个函数。

二、extractvalue()

extractvalue()是对XML文档进行查询的函数,类似于HTML中使用各种标签查找元素,比如<div><a></a></div>等,函数接收两个参数,第一个为目标xml文档,第二个参数是xml的路径。

语法:extractvalue(目标xml文档,xml路径)

其中第二个参数xml中的位置是可操作的地方,xml文档中查找字符位置是用/xxx/xxx/这种格式。当我们写入其他格式时就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容恰好就是我们想要查询的内容。

比如
正常查询:

select truename from wz_admin where uid=1 and (extractvalue('everything','/xs/xx'))

如下图所示,sql语句正常执行,无任何报错。

异常查询:

select truename from wz_admin where uid=1 and (extractvalue('everything','select database()'))

如下图所示,sql语句正常执行,无任何报错。

接下来巧用concat()函数,来获取所需要查询的内容。concat()函数下面进行介绍。

select truename from wz_admin where uid=1 and (extractvalue('everything',concat('!',(select database()))))

如下图所示,由于以!开头的不是XML格式的语法,sql语句执行异常报错,而报错后进行了异常回显,并且执行了拼接的第二个()的参数,如此可以进行信息获取,达到目的。

还可以进行拼接

select truename from wz_admin where uid=1 and (extractvalue('everything',concat('!',(select database()),(select version()))))

注意:
extractvalue()能查询字符串的最大长度为32,也就是说如果我们想要的结果长度超过32,就需要用substring()函数截取,一次查看32位。

select truename from wz_admin where uid=1 and (extractvalue('everything',concat('!',substring(hex((select database())),1,30))))

三、updatexml()

updatexml()函数与extractvalue()类似,是更新xml文档的函数。第一个参数XML_document是String格式,为XML文档对象的名称,
第二个参数XPath_string(Xpath格式的字符串),如果不了解Xpath语法,可以在网上查找教程,第三个参数new_value,String格式,替换查找到的符合条件的数据。

语法
UPDATEXML(XML_document, XPath_string, new_value)
UPDATEXML(目标xml文档,xml路径,更新的内容)

比如
正常查询:

select truename from wz_admin where uid=1 and (updatexml('everything','/xx/xx','everything'))

如下图所示,sql语句正常执行,无任何报错。

异常查询:

select truename from wz_admin where uid=1 and (updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1))

如下图所示,得到所需要的版本信息。

其他方式同理。

四、concat()

concat()函数是拼接多个字符串为一个字符串的函数,返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。注入中常用于可获取信息的字段进行拼接。

语法
concat(str1, str2,…)

select concat('first','second')

五、附录

参考链接:
https://zhuanlan.zhihu.com/p/74907340
https://blog.csdn.net/zpy1998zpy/article/details/80631036
https://www.jb51.net/article/125599.htm
https://www.jb51.net/article/125607.htm

Error Based Injection和sql注入函数相关推荐

  1. php 自带sql防注入函数,php 防Sql注入函数的简单示例

    这篇文章主要为大家详细介绍了php 防Sql注入函数的简单示例,具有一定的参考价值,可以用来参考一下. 传入用户提交的参数时使用这段代码提供的函数先对参数进行处理,然后传入sql语句, 用: mysq ...

  2. php 防止注入函数,php 防止SQL注入函数

    function inject_check($sql_str) { return eregi('select|insert|and|or|update|delete|\'|\/\*|\*|\.\.\/ ...

  3. SQL Injection(SQL注入)

    SQL Injection SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的.SQL注入漏洞的危害是巨大的,常常会导致整个数据库被" ...

  4. DVWA靶场SQL Injection(SQL注入)

    目录 一.有回显的SQL注入过程 二.Low 三.Medium 四. High 五.Impossible 一.有回显的SQL注入过程 1.找到注入点: 2.通过回显找到闭合方式: 3.使用order ...

  5. SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具

    1.关于SQL Injection 迄今为止,我基本没有看到谁写出一篇很完整的文章,或者说很成熟的解决方案(能做到 的人肯定很多,问题是没有流传开来,很遗憾) 我简单的说几点,希望启发大家思考,起到抛 ...

  6. mysql服务攻击检测_SQL Injection(SQL注入)介绍及SQL Injection攻击检测工具

    1.关于SQL Injection迄今为止,我基本没有看到谁写出一篇很完整的文章,或者说很成熟的解决方案(能做到 的人肯定很多,问题是没有流传开来,很遗憾) 我简单的说几点,希望启发大家思考,起到抛砖 ...

  7. mybatis以及预编译如何防止SQL注入

    SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者).[摘自] SQL injection - Wikipedia SQL ...

  8. mysql防注入原理_MyBatis如何防止SQL注入

    MyBatis如何防止SQL注入 SQL注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者).[摘自] SQL injectio ...

  9. DVWA靶场通关(SQL注入)

    SQL Injection(SQL注入)概念 就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意 ...

  10. PHP中SQL注入与跨站攻击的防范

    SQL injection即SQL注入是我们每个WEB程序员都需要面对的问题,一个WEB应用假如没有起码的安全性,那么其它的一切就可以免谈了.注入问题在ASP上可谓是闹得沸沸扬扬,当然还有不少PHP程 ...

最新文章

  1. junit--eclipse插件
  2. JSP 中使用Struts2的值
  3. 任意门怎么用团发_衣柜门选用什么材料好?小编在这里告诉你
  4. 任性!特斯拉又涨价了 Model S、Model X国内售价上调
  5. 中国操作系统变迁史,鸿蒙之前的尸骨
  6. 与卿共赴鸿蒙是什么意思,经典的爱情诗句
  7. 中国搜索20年:巨头百度的兴衰密码
  8. 【洞幺邦】基于python的咖啡店的销售额
  9. Game of Thrones : 权利的游戏
  10. 嵌入式工程师的日常是啥样的?就业现状如何?
  11. ADS设计不等分功分器
  12. 5G 频段 频率与Band对应表
  13. Elasticsearch:运用 Java 创建索引并写入数据
  14. MySQL数据操作与查询笔记 • 【第7章 连接查询】
  15. 对抗熵增 耗散结构 个人成长
  16. Python 《Hamlet》哈姆雷特英文词频统计
  17. 路由器显示不安全网络连接到服务器地址,wifi显示不安全网络怎么解决?
  18. 数据预处理 第3篇:数据预处理(使用插补法处理缺失值)
  19. 《软件方法》第六章 自测题
  20. XML文件的解析方式

热门文章

  1. AWS——API Gateway
  2. 汉字转拼音多音字java_汉字转拼音多音字解决方案 搜索引擎分词细胞词库更新 搜狗词库提取TXT PHP高性能输出UNICODE正则汉字列表...
  3. php文字滚动特效,js文字横向滚动特效_javascript技巧
  4. flex:1 代表了什么意思
  5. flex:1代表什么意思
  6. Chrome断点JS寻找淘宝签名sign
  7. 实现div元素在整个屏幕的的垂直居中之translateY(-50%)的利用
  8. jsp中页面间传汉字参数转码的方法
  9. ★用辩证数学解答“缸中之脑”
  10. Origin画法——简单的分布图画法