继夫的玩弄H辣文的小说|女人与拘性猛交视频|精品欧美高清不卡高清|一起做亏亏的事情的视频|啦啦啦在线视频观看|望月直播下载ios版本|国产日韩欧美一区二区三区

Java-Tomcat Servlet內存馬

服務器是一個免費的開放源代碼的Web 應用服務器 , 是 軟件基金會()的 項目中的一個核心項目 , 它早期的名稱為,后來由、Sun 和其他一些公司及個人共同開發而成java中xml怎么提示,并更名為 。是一個小型的輕量級應用服務器,在中小型系統和并發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP 程序的首?。?蛭?技術先進、性能穩定 , 成為目前比較流行的Web 應用服務器 。是應用(java)服務器,它只是一個容器,是的擴展,但它是獨立運行的 。
從宏觀上來看,其實是Web服務器和容器的結合體 。
Web服務器:通俗來講就是將某臺主機的資源文件映射成URL供給外界訪問 。(比如訪問某臺電腦上的圖片文件)Servlet容器:顧名思義就是存放Servlet對象的東西,Servlet主要作用是處理URL請求 。(接受請求、處理請求、響應請求)
接口一共有五個類分別是init(對象初始化時調用)、(獲取web.xml中對應的init-param屬性)、(每次處理新的請求時調用)、(返回的配置信息 , 可自定義實現)、(結束時調用):
public interfaceServlet{voidinit(ServletConfig var1)throwsServletException;ServletConfiggetServletConfig();voidservice(ServletRequest var1,ServletResponse var2)throwsServletException,IOException;StringgetServletInfo();voiddestroy();}
.java
【Java-Tomcat Servlet內存馬】package memoryshell;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public classServletextendsHttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("Hello,Sentiment!");}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}}
web.xml
hellomemoryshell.Servlethello/hello
訪問/hello
生成
本地沒有,所以加了個依賴 , 可能是版本不對在調試時可能會有一丟丟代碼不匹配的問題,但不影響正常流程
依賴
org.apache.tomcattomcat-catalina9.0.19
整個棧在調用了 ?#()? ? 讀取 ? ?web.xml? ?
然后根據 web.xml 配置 調用了 ? ?()? ?
if (this.ok) {this.configureContext(webXml);}
跟進 ? ?()? ? 前邊依次讀取了 、的配置及其映射,我們直接看后邊的部分:
首先通過 ? ?#()? ? ,創建對象
(包裝器):代表一個  , 它負責管理一個,包括的的裝載、初始化、執行以及資源回收 。是最底層的容器,它沒有子容器了,所以調用它的將會報錯 。
publicWrappercreateWrapper(){ Wrapper wrapper = null;if (wrapperClass != null) {try {wrapper = (Wrapper) wrapperClass.newInstance();} catch (Throwable t) {ExceptionUtils.handleThrowable(t);log.error("createWrapper", t);return (null);}} else {wrapper = new StandardWrapper();
接著設置了啟動優先級,以及的Name 。
設置好優先級后就調用下邊的 ? ?()? ?,配置了的Class 。
wrapper.setServletClass(servlet.getServletClass());
最后通過 ? ?()? ? 將創建并配置好的添加到中 。通過循環遍歷所有地方完成了從配置到添加的全過程 , 接下來
來就需要添加-了(對應web.xml中的 ? ?? ? )
取出web.xml中所有配置的-,通過.oded()將url路徑和類做映射 。(這里的/hello、hello就是我們在中設置的值)
通過 .() 創建對象;設置的的值;設置的 Name;設置對應的 Class;通過()將創建并配置好的添加到中通過oded()將 url 路徑和類做映射 。加載
在 org...core.#() 下斷點調試:
回溯到 ? ?#? ? 同樣也是在處理完和后,處理,這也就體現了分析中提到的執行流程( ->-> )
首先調用了 ? ?()? ? ,將之前通過 ? ?()? ? 添加的所有傳入 ? ?()? ? 中處理
跟進 ? ?()? ?,的值就是通過 ? ?this.()? ? 傳入進來的
通過循環將中的值逐一賦給child,在賦值給中 , 之后有一段判斷:
if (loadOnStartup >= 0) {Integer key = loadOnStartup;ArrayList list = (ArrayList)map.get(key);if (list == null) {list = new ArrayList();map.put(key, list);}list.add(wrapper);}
如果 >= 0,就會將追加到list中 , 但 默認值是-1,
在的配置當中即(web.xml),? ?1? ? 的含義是:
標記容器是否在啟動的時候就加載這個 。
當值為0或者大于0時,表示容器在應用啟動時就加載這個;
當是一個負數時或者沒有指定時,則指示容器在該被選擇時才加載 。
正數的值越小java中xml怎么提示 , 啟動該的優先級越高 。? ?? ?
由于我們要注入內存碼,且沒有配置xml不會在應用啟動時就加載這個,因此需要通過反射將值修改為1 , 將其追加到list中
之后通過load()進行加載,根據具體請求進行初始化、調用、銷毀一系列操作
內存馬
首先通過doGet方法實現惡意類

之后還是老辦法獲?。?

反射修改 ? ?? ?

最后將 URL 路徑與惡意類做映射:

.jsp
Sentiment
訪問.jsp后注入成功
原文
本文到此結束,希望對大家有所幫助 。