一些CTF中php可利用的函数和一些正则表达式的绕过方法
warning:
这篇文章距离上次修改已过459天,其中的内容可能已经有所变动。
在CTF中,PHP可能会有一些函数和正则表达式的限制,以至于我们需要找到绕过的方法。以下是一些常见的PHP函数和正则表达式的绕过方法:
preg_match()和preg_replace():- 利用点
.匹配换行符绕过,如果正则表达式中使用了s修饰符,点就会匹配换行符。 - 使用
\R来匹配所有的换行符,这在PHP 7.2.0以上版本中可用。 - 利用
(?s)来启用preg_match()中的.匹配换行符。
- 利用点
eval():- 使用其他代码执行函数如
assert()、create_function()、array_map()和call_user_func()替换eval()进行绕过。
- 使用其他代码执行函数如
disable_functions:- 如果
eval()或其他函数被禁用,可以使用base64编码来执行代码。
- 如果
shell_exec(),exec(),system(),passthru():- 使用PHP的内置函数如
pcntl_exec()(需要proc\_open函数开启),或者使用文件包含漏洞来运行外部程序。
- 使用PHP的内置函数如
file_get_contents(),fopen(),file(),readfile():- 使用PHP的内置函数如
fsockopen()配合file_get_contents()或者fopen()来读取远程文件。
- 使用PHP的内置函数如
parse_str():- 使用
%00截断的方法绕过,如?var=something&something=%00。
- 使用
escapeshellarg(),escapeshellcmd():- 使用特殊构造的字符串绕过,比如用单引号替代双引号,或者使用管道操作符(
|)和后台命令。
- 使用特殊构造的字符串绕过,比如用单引号替代双引号,或者使用管道操作符(
preg_replace()的e修饰符:- 在PHP 5.5.0以上,
preg_replace()的/e修饰符被移除,但可以使用preg_replace_callback()代替。
- 在PHP 5.5.0以上,
以上是一些常见的PHP函数和正则表达式的绕过方法,具体情况还需要根据CTF题目的具体限制来选择合适的绕过方式。
评论已关闭