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

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的连接模式
    ?>
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 9月3日
  • 已采纳回答 8月26日
  • 专家修改了标签 8月26日
  • 修改了问题 8月25日
  • 展开全部

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条