web基础漏洞-sql注入绕过
前提:确实存在sql注入,换句话说未使用预编译,绕过才有可能。
这里阐述针对的是mysql语法。
1、大小写混杂
2、双写绕过
如果服务端检查到敏感词,对其删除后继续执行。那么可以提交数据时进行双写绕过,比如selselectect,提交后变为select
拓展来说,如果服务端最多检查n次,并且每次删除检查到的敏感词,那么可以进行n+1双写
3、逻辑关键词的相互替换
如果服务端检查禁止了其中一个逻辑关键词,可以用其它等价形式替代
- and true, and 1, or not 0等价
- and与&&、or与||、not与!等价
- where if(if()),if本身可以返回true或false,嵌套的if可以实现逻辑关系
4、注释的相互替换
--空格和#
多行注释
5、内部注释替代空格
6、内联注释
/*!*/,绕过对关键词组合的检查,以及绕过空格
7、二次注入
如果服务端的某个语句未进行预编译,但检查限制了某些字符或关键词的输入,且该sql语句中存在对数据库表的查询作为值或条件使用。
那么攻击者可以从其它接口,先将待使用的敏感字符作为值写入到数据库中,然后请求执行前面的sql语句,服务端读取进行填充
8、宽字节编码
数据库使用的编码和服务端程序的编码不同,使得服务端可以检查放行的安全字符,在数据库sql语句执行时变为了敏感字符。
一般是服务端使用多字节的编码,检查的是一个多字节字符,在数据库中被拆分为多个字节,其中某个字节转为敏感字符'或"
9、进制绕过替代引号