-
基本信息
引用:https://www.cnvd.org.cn/flaw/show/CNVD-2019-17294
補丁信息:該漏洞的修復補丁已於2019年6月25日發布。如果客戶尚未修復該補丁,可聯系齊治科技的技術支持人員獲得具體幫助。
-
漏洞復現
如下圖,通過在傳遞參數”service=`id`”,成功執行命令,並回顯命令執行結果。
-
源代碼分析
首先,定位到/audit/data_provider.php,直接查找$_GET[‘service’]或者$_REQUEST[‘service’]都找不到。原來在文件開頭包含的common.php中,已有全局配置。
代碼如下,不但給變量加了個前綴”req_”,還過濾掉了一些危險字符。
然后,搜索” $req_service”定位到data_provider.php文件的第99行。可見,將$GET[‘service’]賦值到$service變量中。
然后,跟進$service來到data_provider.php文件的第124行。可見,通過字符串拼接,將$_GET[‘service’]帶入到$cmd變量中。
然后,跟進$cmd來到data_provider.php文件的第133行。可見,$cmd被帶入exec函數中執行。至此,造成遠程命令執行漏洞。
-
漏洞利用
通過反單引號執行命令,寫入PHP一句話代碼到服務器。
原理如下圖所示,這樣就可以繞過過濾執行任意命令。實際上,還需要用${IFS}替換掉空格才行。
所以,最終方案如下。
- 引用
https://www.php.net/manual/en/function.exec.php
https://www.anquanke.com/post/id/84920
轉載請注明出處。