- 正则表达式一些常见方法
- 关于RCE绕过正则表达式的一些常见方法,可以从以下几个方面进行:
- 1. 利用特殊字符和编码:通过使用如URL编码、Unicode编码、十六进制编码等,可以绕过一些简单的正则表达式过滤。例如,将空格替换为%09、%0b或$IFS等,或者使用反引号(\`)和单引号(')来绕过对某些特殊字符的过滤。
- 2. 利用正则表达式的回溯限制:正则表达式在处理复杂模式时可能会使用大量的回溯,这可以通过构造特定的输入来使正则表达式进入无限回溯,从而导致拒绝服务攻击(ReDoS)。在某些情况下,可以通过控制回溯的次数来绕过正则表达式的过滤。
- 3. 利用逻辑运算符:通过使用逻辑运算符如异或(XOR)、或(OR)等,可以将不可打印的字符转换为可打印的字符,从而绕过正则表达式的过滤。例如,两个不可打印的字符异或可能得到一个可打印的字符,这样就可以构造出需要的命令或代码。
- 4. 利用PHP的特性:在PHP中,可以利用一些语言特性来绕过正则表达式的过滤。例如,使用变量变量($$var)、动态函数调用(call_user_func)等。
- 5. 利用WAF(Web应用防火墙)的配置错误:WAF的规则通常是基于正则表达式编写的,如果配置不当,可能会存在绕过的可能性。例如,某些WAF可能没有正确处理编码或特殊字符,或者没有考虑到所有的攻击向量。
- 6. 利用服务器特性:不同的服务器环境可能有不同的解析特性,例如IIS服务器对URL编码的处理可能与Apache不同,这可以被用来绕过WAF的过滤。
- 7. 无参数RCE:在某些情况下,RCE的利用可能被限制为无参数的函数调用。这时,可以利用PHP内置的无参数函数,如`phpinfo()`、`var_dump()`等,来读取或输出信息。
- 8. 利用正则表达式的缺陷:有些正则表达式可能存在缺陷,例如没有正确处理特定的字符或模式,这可以被用来绕过过滤。
- 正则表达式绕过
- 一些常见的绕过方法:
- 异或(XOR)绕过:通过异或操作,可以将不可打印的字符转换为可打印的字符,从而绕过正则表达式的过滤。例如,两个不可打印的字符异或可能得到一个可打印的字符,这样就可以构造出需要的命令或代码。可以通过编写脚本来生成所有可能的异或组合,并找到可以绕过正则表达式的字符对 。
- 取反绕过:取反操作可以将字符转换为其相反的ASCII值,从而绕过正则表达式的过滤。例如,对phpinfo进行取反urlencode编码,可以得到绕过正则的编码字符串 。
- 或(OR)绕过:与异或类似,或操作可以用来生成可打印的字符,以绕过正则表达式的过滤 。
- 递增递减运算符绕过:通过使用递增或递减运算符,可以从一个已知的字符开始,生成一系列的字符,包括所有字母和数字,从而绕过过滤 。
- URL编码和转义字符:使用URL编码或者转义字符来隐藏或转换过滤关键字,例如使用%09代替空格,或者使用反斜杠\\进行转义。
- 特殊变量和命令替代:使用Shell的特殊变量(如$*、$@)或替代命令(如使用tac代替cat)来绕过关键字过滤。
- 管道和重定向:利用管道符(|)和重定向符(>、<)来构造复杂的命令,或者使用重定向来绕过空格等字符的过滤。
- 包含漏洞和伪协议:利用文件包含漏洞或PHP的伪协议(如php://input、data://)来执行命令或读取文件。
- 编码绕过:使用Base64编码或其他编码方式来隐藏命令或代码,直到执行时才解码执行。
- 拼接法:通过变量拼接来构造命令,例如设置变量a='fl'和b='ag',然后通过cat $a$b来执行cat flag命令。
- 正则表达式回溯限制:通过构造特定的输入,使正则表达式进入无限回溯,可能导致拒绝服务攻击(ReDoS),在某些情况下,可以通过控制回溯的次数来绕过正则表达式的过滤。