preg_match函数绕过

<?php
error_reporting(0);
if(!isset($_GET['code'])){
    highlight_file(__FILE__);
}else{
    $code = $_GET['code'];
    if(preg_match("/[A-Za-z0-9_$@]+/",$code)){
        die('fighting!'); 
    }
    eval($code);
}

1.绕过数字和字母

首先,我们常见的CTF题代码如下,主要是绕过数字和字母。

1.绕过 preg_match("/[A-Za-z0-9]+/",$code)

preg_match函数绕过

上面这段代码绕过方法如下:

要是用非字母、数字的字符经过各种变换,最后能构造出 a-z 中任意一个字符,并且字符串长度小于40。然后再利用 PHP允许动态函数执行的特点,拼接一个函数,然后执行这个函数getshell。

在PHP中,两个字符串执行异或操作以后,得到的还是一个字符串。所以,我们想得到a-z中某个字母,就找到某两个非字母、数字的字符,他们的异或结果是这个字母即可。

上一篇:使用 PHP 正则表达式“preg_match”检查日本内容输入


下一篇:无参数RCE