這期內(nèi)容當中小編將會給大家?guī)碛嘘P(guān)怎么實現(xiàn)Apache Tomcat樣例目錄session操縱漏洞,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
網(wǎng)站設計制作過程拒絕使用模板建站;使用PHP+MYSQL原生開發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺管理系統(tǒng);成都網(wǎng)站建設、成都網(wǎng)站設計收費合理;免費進行網(wǎng)站備案等企業(yè)網(wǎng)站建設一條龍服務.我們是一家持續(xù)穩(wěn)定運營了十載的成都創(chuàng)新互聯(lián)網(wǎng)站建設公司。
0x00 背景
前段時間掃到的漏洞,研究了下,感覺挺有意思的,發(fā)出來和大家分享下,有啥不對的地方還請各位拍磚指正。
Apache Tomcat默認安裝包含”/examples”目錄,里面存著眾多的樣例,其中session樣例(/examples/servlets/servlet/SessionExample)允許用戶對session進行操縱。因為session是全局通用的,所以用戶可以通過操縱session獲取管理員權(quán)限。
0x01 漏洞分析演示
首先,我們先來看看SessionExample的部分源碼
//表單代碼
out.println("
");
out.print("
");//核心代碼
HttpSession session = request.getSession(true);
out.println(rb.getString("sessions.id") + " " +session.getId());
out.println("
");
out.println(rb.getString("sessions.created") + " ");
out.println(new Date(session.getCreationTime()) +"
");
out.println(rb.getString("sessions.lastaccessed") + "");
out.println(new Date(session.getLastAccessedTime()));
String dataName = request.getParameter("dataname");//獲取dataname參數(shù)的值
String dataValue = request.getParameter("datavalue");//獲取datavalue參數(shù)的值
if (dataName != null && dataValue != null) {
session.setAttribute(dataName, dataValue);//將dataname和datavalue寫入session
}
用戶通過表單提交dataname和datavalue參數(shù),然后通過request.getParameter()函數(shù)獲取這兩個參數(shù)的值,再通過session.setAttribute()函數(shù)將dataname和datavalue的值寫入session。因為session全局通用的特性,所以可以通過操縱session參數(shù)的值來獲取網(wǎng)站管理員權(quán)限的目的。
舉個例子:
我們先來編寫login.jsp,login2.jsp,index.jsp這三個頁面,通過這三個頁面來模擬一般網(wǎng)站身份驗證的過程。
login.jsp
用戶名:
密碼: