您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何通過JBoss反序列化淺談Java反序列化漏洞,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
前段時間學校學習J2EE,用到了jboss,順便看了下jboss的反序列化,再淺談下反序列化漏洞。
Java序列化,簡而言之就是把java對象轉化為字節序列的過程。而反序列話則是再把字節序列恢復為java對象的過程,然而就在這一轉一變得過程中,程序員的過濾不嚴格,就可以導致攻擊者惡意構造的代碼的實現。
舉個簡單的例子,jboss的反序列化漏洞出現在jboss\server\all\deploy\httpha-invoker.sar\invoker.war\WEB-INF\classes\org\jboss\invocation\http\servlet目錄下的ReadOnlyAccessFilter.class文件中的doFilter中。
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throw IOException,ServletException { HttpServletRequest httpRequest=(HttpServletRequest)request; Principal user=httpRequest.getUserPrincipal(); if((user=null)&&(this.readOnlyContext!=null)) { ServletInputStream sis=request.getInputStream(); ObjectInputStream ois=new ObjectInputStream(sis); MarshalledInvocation mi=null; try { mi=(MarshalledInvocation)ois.readObject(); } catch(ClassNotFountException e) { throw new ServletException("Failed to read MarshalledInvocation",e); } request.serAttribute("MarshalledInvocation",mi); mi.setMethodMap(this.namingMethodMap); Method m=mi.getMethod(); if(m!=null){ validateAccess(m,mi) } } chain.doFilter(request,response); }
程序獲取http數據保存到了httpRequest中,序列化后保存到了ois中,然后沒有進行過濾操作,直接使用了readObject()進行了反序列化操作保存到了mi變量中,這其實就是一個典型的java反序列化漏洞。
復現jboss反序列化漏洞(CVE-2017-12149)
靶機 xp_sp3 10.10.1.34
CVE-2017-12149的主要影響范圍是jbossas 5.x和6.x,下載jboss5.1.0 GA并安裝(需要有java環境)。運行時如果發現只能通過localhost或者127.0.0.1進行訪問,可以通過運行時增加命令 run.bat -b 0.0.0.0 ,或新建start.bat 內容run.bat -b 0.0.0.0
當出現這個的時候說明已經部署好了,可以進行訪問了
可以訪問到頁面,
訪問10.10.1.134:8080/invoker/readonly
出現此頁面則可以判斷含有java反序列化漏洞
進行漏洞利用,我使用的是香草反序列化工具,網上還有很多工具,包括ysoserial,都可以進行漏洞利用
列出了文件目錄
關于修復漏洞,建議如果不使用此組件,可以刪除。或添加代碼,進行監控。
看完上述內容,你們對如何通過JBoss反序列化淺談Java反序列化漏洞有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。