• 文件上传之结合phpinfo与本地文件包含利用


    背景

    某站点存在本地文件包含及phpinfo,可以利用其执行脚本。

    原理

    原理: 利用php post上传文件产生临时文件,phpinfo()读临时文件的路径和名字,本地包含漏洞生成1句话后门

    1.php在解析multipart/form-data请求时,会创建临时文件,并写入上传内容,脚本执行后即删除

    2.phpinfo可以输出$_FILE信息

    3.通过多种方式争取时间,在临时文件删除前进行执行包含

    1)通过在数据报文中加入大量的垃圾数据,似phpinfo页面过大,导致phpinfo页面过大,导致php输出进入流式输出,并不一次输出完毕

    2)通过大量请求来延迟php脚本的执行速度

    环境复现

    项目地址:http://github.com/hxer/vulnapp.git

    源码存在code目录下,利用docker进行复现

    漏洞利用

    php上传

    向服务器上任意php文件post请求上传文件时,都会生成临时文件,可以直接在phpinfo页面找到临时文件的路径及名字。

    • post上传文件

    php post方式上传任意文件,服务器都会创建临时文件来保存文件内容。

    在HTTP协议中为了方便进行文件传输,规定了一种基于表单的 HTML文件传输方法

    其中要确保上传表单的属性是 enctype="multipart/form-data"

    其中PHP引擎对enctype=”multipart/form-data”这种请求的处理过程如下:

    ‍1、请求到达;

    ‍2、创建临时文件,并写入上传文件的内容;

    ‍3、调用相应PHP脚本进行处理,如校验名称、大小等;

    ‍4、删除临时文件。

    PHP引擎会首先将文件内容保存到临时文件,然后进行相应的操作。临时文件的名称是 php+随机字符 。

    • $_FILES信息,包括临时文件路径、名称

    在PHP中,有超全局变量$_FILES,保存上传文件的信息,包括文件名、类型、临时文件名、错误代号、大小

    手工测试phpinfo()获取临时文件路径

    • html表单

    文件 upload.html

    <!doctype html>
    <html>
    <body>
        <form action="phpinfo.php" method="POST" enctype="multipart/form-data">
        <h3> Test upload tmp file</h3>
        <label for="file">Filename:</label>
        <input type="file" name="file"/><br/>
        <input type="submit" name="submit" value="Submit" />
    </form>
    </body>
    </html>
    • 浏览器访问 upload.html, 上传文件 file.txt

    <?php
    eval($_REQUEST["cmd"]);
    ?>
    • burp 查看POST 信息如下

    • phpinfo获得如下信息

    通过分析可见,php post上传文件时确实经历了:创建临时文件--->调用相关php脚本,在phpinfo中回显文件信息--->删除临时文件

    ps: 发现inotifywait确实是款好工具,它可以实时监测linux某一文件夹下的文件的实时变化

    安装:

    apt-get install -y inotify-tools

    使用:

    inotifywait -m /tmp
     
    inotifywait 命令参数说明:
    -m 选项表示 monitor ,即开启监视
    -r 选项表示递归监视,但是会比较慢一些,若监视/etc 目录,其中的子目录下修改文件也是能被监控到。

    -e 选项指定要监控的“事件”(events)包括了:access、modify、 attrib、 close_write、 close_nowrite、close、open、 moved_to、 moved_from、move、 move_self、 create、delete、delete_self、unmount。

    如果不加参数-e的话,默认就是监控所有的事件,在日常运维时,这个工具可以帮助你监控服务器上重要文件和重要目录的变化情况。

    GetShell演示

    参考:https://github.com/hxer/vulnapp/tree/master/lfi_phpinfo

  • 相关阅读:
    flex
    当前不会命中断点 源代码与原始版本不一致
    c setjmp longjmp
    VS 快捷键设置
    Lua C API 遍历 table
    lua class
    复习 C++ 中类的函数指针
    apache ab
    rabbitmq
    协程 coroutine
  • 原文地址:https://www.cnblogs.com/zzjdbk/p/14319110.html
Copyright © 2020-2023  润新知