zoukankan      html  css  js  c++  java
  • php文件包含漏洞(利用phpinfo)复现

     利用docker复现该漏洞,访问http://192.168.80.156:8080/phpinfo.php,可以看到页面出现phpinfo页面

    再访问http://192.168.80.156:8080/lfi.php?file=/etc/passwd,可以看到该页面是存在文件包含漏洞的。

    先讲一下利用phpinfo上传文件,然后在文件包含的原理:

    参考链接:https://github.com/vulhub/vulhub/tree/master/php/inclusion

    在给PHP发送POST数据包时,如果数据包里包含文件区块,无论访问的代码中是否有处理文件上传的逻辑,php都会将这个文件保存成一个临时文件(通常是/tmp/php[6个随机字符]),这个临时文件在请求结束后就会被删除,同时,phpinfo页面会将当前请求上下文中所有变量都打印出来。但是文件包含漏洞和phpinfo页面通常是两个页面,理论上我们需要先发送数据包给phpinfo页面,然后从返回页面中匹配出临时文件名,将这个文件名发送给文件包含漏洞页面。

    因为在第一个请求结束时,临时文件就会被删除,第二个请求就无法进行包含。

    但是这并不代表我们没有办法去利用这点上传恶意文件,只要发送足够多的数据,让页面还未反应过来,就上传我们的恶意文件,然后文件包含:

    1)发送包含了webshell的上传数据包给phpinfo,这个数据包的header,get等位置一定要塞满垃圾数据;

    2)phpinfo这时会将所有数据都打印出来,其中的垃圾数据会将phpinfo撑得非常大

    3)PHP默认缓冲区大小是4096,即PHP每次返回4096个字节给socket连接

    4)所以,我们直接操作原生socket,每次读取4096个字节,只要读取到的字符里包含临时文件名,就立即发送第二个数据包

    5)此时,第一个数据包的socket连接其实还没有结束,但是PHP还在继续每次输出4096个字节,所以临时文件还未被删除

    6)我们可以利用这个时间差,成功包含临时文件,最后getshell

    具体步骤:

    在网上找的脚本:https://github.com/vulhub/vulhub/blob/master/php/inclusion/exp.py

    利用该脚本上传我们的恶意文件

    接下来只要运行脚本就可以成功上传我们的文件了

    http://192.168.80.156:8080/lfi.php?file=/tmp/g&1=system(%27cat%20/etc/passwd%27);

  • 相关阅读:
    yzoj P2344 斯卡布罗集市 题解
    yzoj P2350 逃离洞穴 题解
    yzoj P2349 取数 题解
    JXOI 2017 颜色 题解
    NOIP 2009 最优贸易 题解
    CH 4302 Interval GCD 题解
    CH4301 Can you answer on these queries III 题解
    Luogu2533[AHOI2012]信号塔
    Luogu3320[SDOI2015]寻宝游戏
    Luogu3187[HNOI2007]最小矩形覆盖
  • 原文地址:https://www.cnblogs.com/xiaoqiyue/p/10158702.html
Copyright © 2011-2022 走看看