一些CTF中php可利用的函数和一些正则表达式的绕过方法
在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题目的具体限制来选择合适的绕过方式。
评论已关闭