【web渗透基础练习】SQL整型报错注入​

admin 2022年4月26日06:41:52评论132 views字数 2364阅读7分52秒阅读模式

SQL注入整型报错注入


什么是整型报错注入?

1、整型

 我们遇到的GET型注入的URL一般为.php?id=x”,这个x一般为数字形式,但是在解析过程中并非如此。下面我们来看一种PHP文件中关联MySQL的语句:

$id = $_GET['id'];

$id = addslashes($id);

$query = 'select name,age,email from information where id = "'.$id.'" limit 0,1';

可以看出,$id实际上是以字符串的形式被解析的,因此需要加入闭合字符,使自己的查询语句可以执行。以上面的一段代码为例,为我们构建以下URL

.php?id=1 and 1=2 union select 1,2,database() %23

那么服务器的查询语句就会变成:

select name,age,email from information where id = "'. 1 and 1=2 union select 1,2,database() #.'" limit 0,1;

我们的查询语句就会变成查询的字段值。因此,我们需要闭合字符来隔开字段值和查询语句。

但是,在一种条件下,我们不需要使用闭合字符。我们先来看PHP语句:

$id = $_GET['id'];

$id = addslashes($id);

$query = 'select name,age,email from information where id = $id limit 0,1';

【web渗透基础练习】SQL整型报错注入​

可以看到,在这条语句中,$id是以整形数字的形式解析的,因此不需要闭合字符。我们输入URL:

.php?id=1 and 1=2 union select 1,2,database() %23

那么服务器的查询语句就会变成:

select name,age,email from information where id = 1 and 1=2 union select 1,2,database() # limit 0,1;

可以直接查询数据库数据。

简而言之,基于整型的SQL注入即存在SQL注入漏洞的URL参数为整数类型,而不是字符,因此不需要闭合字符。

【web渗透基础练习】SQL整型报错注入​

图2 闭合字符错误

【web渗透基础练习】SQL整型报错注入​


2、报错

 联合查询可以把我们想要的数据展示在网页上,替代网页上原有的数据内容;而今天我们要讨论的是,网页上没有展示查询结果的地方,也就是说select语句执行结果不能出现在网页上,我们需要让执行结果出现在其它地方,出现在哪呢?出现在报错语句中。

 数据库返回到页面上的唯一信息就是MySQL错误。因此,我们需要以一种方式处理我们的查询,以便通过错误获取数据库信息。查询条件必须是正确的,能被后端数据库解释执行,且需产生一个逻辑错误,让数据库信息伴随错误字符串返回。这种注入方法一般是在页面没有显示位、但用echo mysql_error()输出了错误信息的时候使用,它的特点是注入速度快,但是语句较复杂。不能用group_concat()一次性列出所有数据,只能用limit依次猜解。

【web渗透基础练习】SQL整型报错注入​

3、报错函数

 updatexml()

UPDATEXML (XML_document, XPath_string, new_value);

第一个参数:XML_document是String格式,为XML文档对象的名称,这一项可以输入一个十六进制形式的字符,如“0x23”等。

第二个参数:XPath_string是Xpath格式的字符串,报错注入时需要写入错误的格式来显示错误的信息。

第三个参数:new_value,String格式,替换查找到的符合条件的数据,在注入中可以加入任意字符。

该函数的作用是改变文档中符合条件的节点的值,改变XML_document中符合XPATH_string的值。

而我们的注入语句为:

Select updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1);

其中的concat()函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出

ERROR 1105 (HY000): XPATH syntax error: '~5.5.40~'

【web渗透基础练习】SQL整型报错注入​

extractvalue()

EXTRACTVALUE (XML_document, XPath_string);

第一个参数:XML_document是String格式,为XML文档对象的名称,这一项可以输入一个十六进制形式的字符,如“0x23”等。

第二个参数:XPath_string是Xpath格式的字符串,报错注入时需要写入错误的格式来显示错误的信息。

该函数的作用是从目标XML中返回包含所查询值的字符串。

而我们的注入语句为:

Select extractvalue(1, concat(0x5c,(select user())));

其中的concat()函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出

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

'root@localhost'是当前的用户,也就是user()的值。

【web渗透基础练习】SQL整型报错注入​


exp()

exp()函数返回e(自然对数的底)X次方的值。

我们先来看payload:select EXP(~(SELECT * from(select user())a));

当向exp()传递一个大于709的值时,函数exp()就会引起一个溢出错误。

【web渗透基础练习】SQL整型报错注入​


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

【web渗透基础练习】SQL整型报错注入​

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

【web渗透基础练习】SQL整型报错注入​






原文始发于微信公众号(学安全在路上):【web渗透基础练习】SQL整型报错注入​

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月26日06:41:52
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【web渗透基础练习】SQL整型报错注入​https://cn-sec.com/archives/596731.html

发表评论

匿名网友 填写信息