SQL注入绕过WAF
SQL注入基础整理及Tricks总结
国光-高级注入姿势
用于过滤时没有匹配大小写的情况:
用于将禁止的字符直接删除的情况:
比如,使用或者是将、、、等关键词替换为空字符串。
这时,可以使用双写嵌套绕过,写成,写成、写成、写成。在删除一个关键字后,剩下的部分又可以重新组合成完整的关键字。
内联注释的作用是增加SQL语句的可移植性。比如,将MySQL特有的语法使用内联注释的形式来编写,在这种情况下,MySQL可以正常的解析并执行内联注释中的代码,但是其它的SQL服务器则忽略内联注释中的内容。
例如MySQL服务器可以在以下语句中识别关键字,而其他服务器则不能:
如果在!后面添加版本号,则仅当MySQL版本大于或者等于指定的版本号时,才会执行注释中的语法。例如,以下注释中的关键字仅由MySQL 5.1.10或者更高版本的服务器执行:
类型的注释,内部语句会被执行
可以用来绕过一些WAF,或者是绕过空格
但是,不能将关键词用注释分开,例如下面的语句是不可执行的(或者说只能在某些较老版本执行)
如果在查询字段名的时候表名被过滤,或者是数据库中某些特定字符被过滤,则可以使用16进制绕过。
为users的16进制编码
宽字节注入
以下是常用的URL编码
ASCII值 | URL编码 |
---|---|
\ | %5C |
' | %27 |
" | %22 |
# | %23 |
& | %26 |
宽字节注入的利用条件
查询参数是被单引号包围的,传入的单引号又被转义符转义,如在后台数据库中对接收的参数使用、或者是其他转义函数
数据库的编码为GBK
概括的说,就是单引号被转义,但编码为GBK。
利用方式
GET形式
在上述条件下,单引号被转义为,即。如果我们在单引号前加上,就会构成,而在GBK编码方式下,是汉字"連",所以单引号成功逃逸。
如果是在请求体中,需要使用POST参数。使用Burp Suite抓取请求,然后在单引号()之前添加。
宽字节注入原理
MySQL在使用GBK编码时,会认为两个字符为一个汉字,例如就是一个汉字。因为转义 *** 主要就是在敏感字符前面添加反斜杠,所以这里想办法去掉反斜杠即可。
吃掉
其实这里之一个字符并不局限为,只要是在到范围内都可以。具体原因是,,我们在前面添加,形成,MySQL在GBK编码方式的时候,会将两个字节当做一个汉字,这个时候就把当做是一个汉字,则作为一个单独的符号在外面,同时也就达到了我们的目的。
将中的过滤掉
例如可以构造的情况,后面的会被前面的给注释掉。这也是bypass的一种 *** 。
函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符 | 转义后 |
---|---|
该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。
在使用时,我们需要将设置为的方式,才能够防御此漏洞。
Latin1编码
Mysql表的编码默认为latin1,如果设置字符集为utf8,则存在一些latin1中有而utf8中没有的字符,而Mysql是如何处理这些字符的呢?直接忽略
于是我们可以输入?username=admin%c2,存储至表中就变为了admin
上面的%c2可以换为%c2-%ef之间的任意字符
and -> &&
or -> ||
空格 -> -> %a0 -> %0a -> +
# -> -- + -> ;%00(php<=5.3.4) -> or '1'='1
=-> like -> regexp -> <> -> in
注意:regexp为正则匹配,利用正则会有些新的注入手段
注意,因为是URL中不同参数之间的分隔符,所以,在前端中需要将进行URL编码,编码为。
过滤空格
使用或者函数,将空白字符替换为空字符串。
过滤了空格,使用编码绕过。可以使用如下符号来替代:
符号 | 说明 |
---|---|
%09 | TAB键(水平) |
%0a | 新建一行 |
%0c | 新的一页 |
%0d | return功能 |
%0b | TAB键(垂直) |
%a0 | 空格 |
过滤注释
使用或者函数,将多行注释,单行注释、替换为空字符串。
绕过方式:使用闭合绕过。
HTTP参数污染
由于没有相关的HTTP RFC定义HTTP参数操作的语义,因此每个Web应用程序可能会以不用的方式来处理多个相同名称的参数。
在单个HTTP请求中,攻击者使用多个具有相同名称的参数,将注入语句中的关键字拆分在每个参数的值中。
比如,
下表是不同的Web服务器如何管理多次出现的同一参数。
HTTP后端 | 总体解析结果 | 例子 |
---|---|---|
ASP.NET/IIS | 特定参数所有内容进行拼接 | par1=val1,val2 |
ASP/IIS | 特定参数所有内容进行拼接 | par1=val1,val2 |
PHP/Apache | 最后一次出现的参数内容 | par1=val2 |
PHP/Zeus | 最后一次出现的参数内容 | par1=val2 |
*** P,Servlet/Apache Tomcat | 之一次出现的参数内容 | par1=val1 |
当Web应用程序将多个参数的值拼接起来,就可以得到完整的注入语句。同时,如果WAF只单独检查每个参数的值,或者是将整个请求数据作为单个字符串处理,这样的安全机制将无法检测到HPP攻击。比如,将重复出现的参数的值拼接起来。
下面是两个SQL注入的场景:"常规攻击"和"使用HPP攻击"。
“常规攻击”演示了prodID参数中的标准联合注入语句。这种攻击方式会被Web应用程序防火墙(WAF)轻松识别。第二次攻击在prodID参数上使用HPP。在这种情况下,prodID参数多次出现,而注入语句被拆分在每个prodID的值中。为了使WAF能够识别完整的注入语句,还需要将所有的输入拼接起来检查。
常规攻击:
使用HPP攻击:
用join代替
limit
substr
from为从第几个字符开始,for为截取的长度
from 5表示从第5个字符开始截取
如果for也被过滤了
if
加限制条件
(user_id是表中的一个列)
可用运算符以及来代替
常用函数的替代
字符串截取/拼接函数:
摘自https://xz.aliyun.com/t/7169
函数 | 说明 |
---|---|
SUBSTR(str,N_start,N_length) | 对指定字符串进行截取,为SUBSTRING的简单版。 |
SUBSTRING() | 多种格式。 |
RIGHT(str,len) | 对指定字符串从最右边截取指定长度。 |
LEFT(str,len) | 对指定字符串从最左边截取指定长度。 |
RPAD(str,len,padstr) | 在右方补齐位的字符串,返回新字符串。如果长度大于,则返回值的长度将缩减到所指定的长度。 |
LPAD(str,len,padstr) | 与RPAD相似,在左边补齐。 |
MID(str,pos,len) | 同于。 |
INSERT(str,pos,len,newstr) | 在原始字符串中,将自左数第位开始,长度为个字符的字符串替换为新字符串,然后返回经过替换后的字符串。可当做截取函数。 |
CONCAT(str1,str2…) | 函数用于将多个字符串合并为一个字符串 |
GROUP_CONCAT(…) | 返回一个字符串结果,该结果由分组中的值连接组合而成。 |
MAKE_SET(bits,str1,str2,…) | 根据参数1,返回所输入其他的参数值。可用作布尔盲注,如:。 |
数字的代替:
使用、、、、、、、等数学运算函数的组合进行代替
函数/语句
说明
LENGTH(str) | 返回字符串的长度。 |
PI() | 返回π的具体数值。 |
REGEXP “statement” | 正则匹配数据,返回值为布尔值。 |
LIKE “statement” | 匹配数据,%代表任意内容。返回值为布尔值。 |
RLIKE “statement” | 与regexp相同。 |
LOCATE(substr,str,[pos]) | 返回子字符串之一次出现的位置。 |
POSITION(substr IN str) | 等同于。 |
LOWER(str) | 将字符串的大写字母全部转成小写。同:。 |
UPPER(str) | 将字符串的小写字母全部转成大写。同:。 |
ELT(N,str1,str2,str3,…) | 与类似,根据返回参数值。 |
NULLIF(expr1,expr2) | 若expr1与expr2相同,则返回expr1,否则返回NULL。 |
CHARSET(str) | 返回字符串使用的字符集。 |
DECODE(crypt_str,pass_str) | 使用 pass_str 作为密码,解密加密字符串 crypt_str。加密函数:。 |
比喻词有哪些(常用的150个比喻词)公文写作中常用的150个比喻词:不做“糊涂虫”不做“墙头草”不做“两面人”把握“保质期”算好“折旧率”警惕“迭代率”摘掉“穷帽子”栽下“摇钱树”捧上“金饭碗”守住“...
本文导读目录: 1、求推荐几下非常烧脑的电影 2、有那些经典的关于黑客的电影 3、有没有好的电影推荐,科幻或者烧脑的 4、有关电脑,网络,黑客,高智商犯罪的电影1推荐几个! 5、以“黑...
中小企业应收账款管理现状。...
大家在平常用手机新安装一个手机软件时,第一次打开该软件都会提示需要你允许该软件获取你的信息,但这样做真的安全吗?不允许的话是不是会导致软件无法打开呢?下面来分析一下。当软件提示‘获取手机存储信息’时,...
1.通告信息内容 2021年1月20日,安识高新科技A-Team精英团队检测到Oracle官方发布了很多安全更新,涉及到集团旗下商品(Database Server、Weblogic Server、...
今年的双十一已经在昨天告一段落了,那么小伙伴们在今年有没有进行消费剁手呢,可能很多人很好奇天猫双十一成交额2020,那么据最新消息报道天猫双11销售额超4982亿,并且在今年双11当天全国处理6.75...