YiTk
2021-08-25 18:21
采纳率: 100%
浏览 125
已结题

CTF代码审计,有无解题思路

内容如下;因学艺不精一脸茫然,有没有大手子讲解一下思路,万分感激
题目描述:fl$@ag

<?php
#Try to read /flag
if(!isset($_GET['command'])&!isset($_GET['parameter'])) {
    show_source(__FILE__);
    die();
}
$command = $_GET['command'];
$parameter = $_GET['parameter'];

function filter($data) {
    $black_list = array('"', "'", " ","flag", "\n");
    foreach ($black_list as $key) {
        $data = str_replace($key, '', $data);
    }
    return $data;
}
$command = filter($command);
popen("$command",$parameter);
?>
  • 好问题 提建议
  • 收藏

1条回答 默认 最新

  • CSDN专家-showbo 2021-08-26 15:43
    已采纳

    这个代码总的来说就是用popen执行传入的命令(command),和popen的链接的模式(parameter),如果2个参数都未传入,则以php高亮语法显示当前这个脚本源代码。比较像后面,除非有特殊的需要。

    <?php
    #Try to read /flag
    //这里感觉应该是||,而不是一个&,要不只传递一个参数会跳过这个判断,下面的代码会出错
    if(!isset($_GET['command'])&!isset($_GET['parameter'])) {//这句判断不存在get提交的command和parameter参数执行下面的代码
        show_source(__FILE__);//__FILE__ 用于获取当前执行的php物理路径,如 E:\xxx\xxx\xxx.php,show_source使用 PHP 语法高亮程序中定义的颜色,输出或返回包含在当前php文件源代码语法高亮版本
        die();//结束后续代码执行
    }
    $command = $_GET['command'];//获取command参数
    $parameter = $_GET['parameter'];//获取command参数
    function filter($data) {//这个函数用于去掉参数$data中的指定内容,内容在$black_list数组中定义
        $black_list = array('"', "'", " ","flag", "\n");
        foreach ($black_list as $key) {
            $data = str_replace($key, '', $data);
        }
        return $data;
    }
    $command = filter($command);//去掉不合法的参数内容
    popen("$command",$parameter);//popen打开用于执行指定的命令,$parameter为popen的连接模式
    ?>
    
    
    
    已采纳该答案
    评论
    解决 2 无用 1
    打赏 举报

相关推荐 更多相似问题