报错注入的原理分析
SQL报错注入就是利用数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。这种手段在联合查询受限且能返回错误信息的情况下比较好用。
使用报错注入的前提:
页面上没有显示位但是有sql语句执行错误信息输出位。
使用mysql_error()函数,可以返回上一个Mysql操作产生的文本错误信息。
MYSQL报错注入的分类:
- BIGINT等数据类型溢出
- xpath语法错误
- floor()报错
- 列名重复报错
- 参数不规范报错
数据类型溢出:
-
最大整型数据运算溢出:
适用版本:mysql版本号大于5.5.5
(Mysql处理整型数据如下表:)
报错原理:
无标志位的最大整型数据是2^64-1也就是18446744073709551615,当超过这个数值时,会产生数据溢出错误,并返回错误信息
(BIGINT UNSIGNED value is out of range in ‘xxxxxxxxxx’)
当然,在尝试注入的时候,尤其是对长度做了限制的时候,不需要输入完整的数进去,可以使用按位取反运算即可:
同时我们知道,当sql语句成功执行后会返回0值,这个值可以进行逻辑运算,也可以进行数学运算,也就是说我们可以利用这个值与最大整数做运算,由此可以绕过一些限制并实施sql注入。