溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么實現(xiàn)Apache Tomcat樣例目錄session操縱漏洞

發(fā)布時間:2021-12-17 17:03:21 來源:億速云 閱讀:953 作者:柒染 欄目:安全技術

這期內容當中小編將會給大家?guī)碛嘘P怎么實現(xiàn)Apache Tomcat樣例目錄session操縱漏洞,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

0x00   背景

前段時間掃到的漏洞,研究了下,感覺挺有意思的,發(fā)出來和大家分享下,有啥不對的地方還請各位拍磚指正。

Apache Tomcat默認安裝包含”/examples”目錄,里面存著眾多的樣例,其中session樣例(/examples/servlets/servlet/SessionExample)允許用戶對session進行操縱。因為session是全局通用的,所以用戶可以通過操縱session獲取管理員權限。

0x01   漏洞分析演示

       首先,我們先來看看SessionExample的部分源碼

       //表單代碼

       out.println("<P>");

       out.print("<form action=\"");

       out.print(response.encodeURL("SessionExample"));

       out.print("\" ");

       out.println("method=POST>");

       out.println(rb.getString("sessions.dataname"));

       out.println("<input type=text size=20 name=dataname>");

       out.println("<br>");

       out.println(rb.getString("sessions.datavalue"));

       out.println("<input type=text size=20 name=datavalue>");

       out.println("<br>");

       out.println("<input type=submit>");

       out.println("</form>");

       //核心代碼

       HttpSession session = request.getSession(true);

       out.println(rb.getString("sessions.id") + " " +session.getId());

       out.println("<br>");

       out.println(rb.getString("sessions.created") + " ");

       out.println(new Date(session.getCreationTime()) +"<br>");

       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ù)的值來獲取網站管理員權限的目的。

       舉個例子:

       我們先來編寫login.jsp,login2.jsp,index.jsp這三個頁面,通過這三個頁面來模擬一般網站身份驗證的過程。

      login.jsp

      <formaction=login2.jsp method="POST" >  

      用戶名: <input type="text"name="username"><br> 

      密碼: <input type="text" name="password"><br> 

      <inputtype="submit" value="登錄"><br> 

      <form>

      login2.jsp

      <% 

      if(request.getParameter("username") != null && 

      request.getParameter("password")!= null) {  

      String username =request.getParameter("username"); 

      String password =request.getParameter("password"); 

      //驗證身份 

      if (username.equals("admin")&& password.equals("admin")) {  

        session.setAttribute("login","admin"); 

        response.sendRedirect("index.jsp"); 

        }else { 

           response.sendRedirect("login.jsp"); 

        }  

         } 

      %>

     index.jsp

     <% 

     if(session.getAttribute("login")!= null &&

     ((String)session.getAttribute("login")).equals("admin")){ 

        out.println("Login"); 

      } else{

       response.sendRedirect("login.jsp");

       }

      %>

我們直接打開網站后臺,即index.jsp

http://127.0.0.1:8080/examples/index.jsp

怎么實現(xiàn)Apache Tomcat樣例目錄session操縱漏洞

發(fā)現(xiàn)被重定向到login.jsp了,而且在不知道密碼的前提下,我們是無法登陸進去的。接下將演示如何通過操縱session進入網站后臺

打開SessionExample

http://127.0.0.1:8080/examples/servlets/servlet/SessionExample

在Name of Session Attribute: 里輸入login

在Value of Session Attribute:里輸入admin

怎么實現(xiàn)Apache Tomcat樣例目錄session操縱漏洞

提交后顯示login=admin已經寫入session

怎么實現(xiàn)Apache Tomcat樣例目錄session操縱漏洞

再次打開index.jsp,顯示成功登錄

怎么實現(xiàn)Apache Tomcat樣例目錄session操縱漏洞

0x02 修復建議

0x03 題外話

       不覺得這個挺適合做后門的嗎?

       <%setAttribute("request.getParameter("u")", " request.getParameter("a")%>

       “u”和”a”的值看后臺源碼

上述就是小編為大家分享的怎么實現(xiàn)Apache Tomcat樣例目錄session操縱漏洞了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI