SQL注入整形报错注入

1. 整形报错注入

所谓整型报错注入,整型是注入点的数据类型,报错是信息的显示方式。

1.1 整形

PHP文件中关联MySQL的语句,Id为字符型,需要使用闭合字符。其中 $ id是以字符串的形式被解析的。
在这里插入图片描述
闭合字符报错
在这里插入图片描述

字符型注入。id=1 后面有单引号了,为字符型注入
在这里插入图片描述

另一种PHP文件中关联MySQL的语句,Id为整型,不需要使用闭合字符。
在这里插入图片描述
整形注入
在这里插入图片描述

1.2 报错

在这里插入图片描述
联合查询可以把我们想要的数据展示在网页上,替代网页上原有的数据内容,但要是没有显示怎么办?
可以出现在报错中
数据库返回到页面上的唯一信息是MySQL报错,通过报错获取数据库信息

如下图所示,信息出现在报错语句中:
在这里插入图片描述
mysql_error()函数返回上一个MySQL操作产生的文本错误信息。
在这里插入图片描述
不能用group_concat()一次性列出所有数据,只能用limit依次拆解。
在这里插入图片描述

2. 报错函数

2.1 Updatexml()

UPDATEXML(XML_docement,XPath_string,new_value);

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

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

该函数的作用是改变文档中符合条件的节点的值,改变XML_document中符合XPATH_string的值。
在这里插入图片描述

2.2 Floor()

payload:select count(),floor(rand(0)2)as a from information_schema.tables group by a;

先来解释一下count()与group by是如何共同工作的。首先,系统会建立一个虚拟表:
在这里插入图片描述
假设有一个表
在这里插入图片描述
执行count(
) from … group by age的过程中,会形成这样的虚拟表:
在这里插入图片描述
由于group by的是age,第一次读取的就是18,在虚拟表中寻找是否已经存在18,由于表是空的,直接插入一条新数据,这时虚拟表变成下图这样,
在这里插入图片描述
下一个是19,由于虚拟表中依旧没有key为19的字段,故插入。再下一个是20,继续插入。再下一个又是20,由于已经有了20,故将key为20的字段的count(*)值加1,变为了2.剩下的以此类推,最后形成了这个虚拟表:
在这里插入图片描述
先来回顾一下payload:select count(), floor(rand(0)2) as a from information_schema.tables group by a;

总体是一个group by语句,只不过这里group by的是floor(rand(0)2)。这是一个表达式,每次运算的值都是随机的。还记得我刚刚说的floor(rand(0)2)的值序列开头是011011…吧?下面开始运算。

首先建立一张虚拟表
在这里插入图片描述
接着,进行group by floor(rand(0)2)。floor表达式第一次运算的值为0,在表中没有找到key为0的数据,故插入,在插入的过程中需要再取一次group by后面的值(即再进行一次floor运算,结果为1),取得了1,将之插入,并将count()置1。
在这里插入图片描述
再进行group by floor(rand(0)2)。进行floor表达式运算,由于这是第三次运算了,故值为1。刚好表中有了key为1的数据,故直接将其对应的count()加1即可。
在这里插入图片描述
继续进行group by。这是第四次floor运算了,根据刚刚那个011011序列,这次的值为0,在表中找是否有key为0的数据。当然没有,故应当插入一条新记录。在插入时进行floor运算(就像第一次group by那样),这时的值为1,并将count(*)置1.可是你会说,虚拟表中已经有了key为1的数据了啊。对,这就是问题所在了。此时就会抛出主键冗余的异常,也就是所谓的floor报错。
在这里插入图片描述

2.3 Extractvalue()

EXTRACTVALUE (XML_document,XPath_string);

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

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

该函数的作用是从目标XML中返回包含所查询值的字符串。
在这里插入图片描述

2.4 Exp()

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

当向exp()传递一个大于709的值时,函数exp()就会引起一个溢出错误。
在这里插入图片描述
~是一个位运算符,它的作用是按位取反。将0按位取反就会返回“18446744073709551615”,再加上函数成功执行后返回0的缘故,我们将成功执行的函数取反就会得到最大的无符号BIGINT值。

在这里插入图片描述

我们通过子查询与按位求反,造成一个报错,并借由此注出数据。
在这里插入图片描述
文章参考哔哩哔哩奇安信网络安全培训视频

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值