bugku ezbypass


error_reporting(0);
highlight_file(__FILE__);

if (isset($_POST['code'])) {
    $code = $_POST['code'];
    if (strlen($code) <= 105){
        if (is_string($code)) {
            if (!preg_match("/[a-zA-Z0-9@#%^&*:{}\-<\?>\"|`~\\\\]/",$code)){
                eval($code);
            } else {
                echo "Hacked!";
            }
        } else {
            echo "You need to pass in a string";
        }
    } else {
            echo "long?";
    }
}

来自bugku  ezbypass   怎么做

这段代码存在一个漏洞,是利用了eval()函数执行了用户输入的代码,这意味着一个恶意用户可以在输入框中输入一些危险的代码来绕过此脚本的输入检查并执行他们的代码。因此,可以使用以下方法来绕过此脚本的检查:

  1. 将$code变量设置为数字类型并使用一种类型转换方法来转换它,例如intval()或(float)。
  2. 将$code变量设置为数组类型,并使用array_filter()函数将其过滤成一个空数组,从而避免执行用户输入的代码。

下面是一些绕过此脚本检查的例子:

1使用intval()函数来绕过输入检查,可以将其用于代码中的任何数字:

$_POST['code'] = "system('ls /');";  // malicious code
$code = $_POST['code'];
$code = intval($code);
eval($code);

2.使用数组类型绕过输入检查:

$_POST['code'] = "system('ls /');";  // malicious code
$code = $_POST['code'];
$code = array_filter($code);
eval($code);