這里以 TurboMail 5.2.0 里的敏感信息泄露漏洞作為學(xué)習(xí)繁涂。
已知 TurboMail 5.2.0 的敏感信息泄露路徑為 /mailmain?type=pm
打開 TurboMail 的安裝目錄拱她,在 turbomail\web\webapps\ROOT\WEB-INF 下找到 web.xml 文件,發(fā)現(xiàn)以下配置信息
<servlet-mapping>
<servlet-name>mailmaini</servlet-name>
<url-pattern>/mailmain</url-pattern>
</servlet-mapping>
<servlet-name>mailmaini</servlet-name>
<servlet-class>turbomail.web.MailMain</servlet-class>
從這些配置信息不難看出 /mailmain 路徑對應(yīng)的 servlet-name 是 mailmaini扔罪,而 mailmaini 對應(yīng)的 servlet-class 是 turbomail.web.MailMain
那么這里就需要找到 turbomail.web.MailMain 類進行分析秉沼,假設(shè)這個類是在 turbomail.jar 文件里,通過搜索在 /turbomail/web/webapps/ROOT/WEB-INF/lib/ 下找到 turbomail.jar 文件
利用 jd-gui 或者 Intellij IDEA 對 turbomail.jar 進行反編譯矿酵,可以在 turbomail/web/ 文件夾內(nèi)找到 MailMain.java 文件唬复,這說明之前的假設(shè)是正確的。
在 195 行可以看到接收了 type 參數(shù)
195 String type = request.getParameter("type");
196 if (type == null) {
197 type = "";
198 }
在 543 行可以看到如果 type 參數(shù)為 pm全肮,則執(zhí)行 PMAdmin 的 show 方法
543 } else if (type.equals("pm")) {
544 PMAdmin.show(false, request, response);
查看該方法的代碼敞咧,可以看到并沒有對用戶身份進行驗證
public static void show(boolean bAjax, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PMInterface pm = null;
StringBuffer sb = new StringBuffer();
for(int i = 0; i < alPM.size(); ++i) {
pm = (PMInterface)alPM.get(i);
sb.append(pm.PM());
sb.append("\r\n");
}
String str = sb.toString();
response.getOutputStream().write(str.getBytes(SysConts.New_InCharSet));
}
}
因此直接訪問 /mailmain?type=pm 就可以看到已登錄的用戶郵箱信息。
這個地方除了泄露登錄用戶郵箱外辜腺,type 后面跟上不同的參數(shù)還會泄露郵箱用戶列表以及對管理員密碼重置等妄均,讀者可以自己嘗試去發(fā)現(xiàn)發(fā)現(xiàn)。
原文鏈接: