《Spring 远程代码执行中文》.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《Spring 远程代码执行中文》.pdf

Remote Code with Expression Language Injection Spring Framework 脆弱性DanAmodio 翻译-CISRG Amu 全世界超过 22,000 组织已经下载了 131.4 万过时的 Spring Framework,使用在业务中 可能会存在风险。 在 2011 年,来自 Minded Security 的 Stefano Di Paola 和来自 Aspect Security 的 Arshan Dabirsiaghi 在 Spring Framework 中发现了一个有趣模式。Stefano 创造了 Expression Language (EL) 注入。他们的发现披露了某些双重的解析 EL 的 spring 标签可 以泄露服务器上的敏感数据。这是由于 spring 提供了独立于 jsp/servlet 容器的 EL 支持, 以此来作为向下兼容的一种方式。因此在 jsp2.0 之前,EL 是不被支持的。这个功能在当前 版本中是默认打开的,应用程序使用了此模式描述是易受攻击的。 由于每个应用程序并不都会出现反射 xss 这种弱点,虽然很难量化它的深度和广度,但 我们根据 Sonatype 最新的统计知道,全世界超过 22,000 的组织下载 Spring 3.0.5 以下版 本 已经超过 131.4 万。Point-in-fact, one large retail organization consumed 241 different artifacts, 4,119 total downloads。 这些版本不支持禁用 double EL resolution. 这个问题原来的影响是信息泄露,但是我将举例说明它如何在 Glassfish 和其他包含 EL2.2 容器上可能进行远程代码执行。 这是一个原始信息泄露的攻击例子: 请求: ttp:///foo?message=${applicationScope} 到达以下内容页面: spring:message text= code=${param[message]}/spring:message 结果将输出一些包含内部服务器信息 calsspath 和本地工作目录 你也可以做一些其他事情,如这样: ${9999+1} 还可以访问 session 对象和 beans ${employee.lastName} 发现 在执行 Glassfish 上客户端应用程序的渗透测试时,我遇到了同样的模式,知道大概是 EL 注入,做了额外的测试后,确认了这一发现,同时延续下去,我想挖掘一些有滋味的东 西,比如 XSS. 哎,应用程序的输入过滤终止了我的请求,因此去掉了” ”和””标签 突发奇想,我想“我可以在 JAVA 中进行字符操纵,为什么我不试试利用 EL 来绕过过滤 呢?” 因此,我尝试了如下: /app?code=${param.foo.replaceAll(“P”,”Q”)}foo=PPPP P 我注意到返回的错误代码时 QQQQQ,由于String.replaceall 方法已经被调用,所以返 回的文本被插入进了 spring:message 标签。 这里是一个最终绕过过滤的实例: /app?code=${param.foo.replaceAll(“P”,””).replaceA ll(“Q”,””)}foo=PscriptQalert(1);P/scriptQ 它运行的很好,接下来一个小时我什么都没想。然后我认识到他是真的真的糟糕的。为 什么可以在 EL 中像这样插入方法。接下来,我还可以做些其他好玩的事情呢? 经过一番研究,我学习到 EL2.2 增加了方法调用。 更近一步: 我写了一个快速测试应用程序代码并且检测一些功能 ${pageContext.request.getSession().setAttribute(account,123456)} ${pageContext.request.getSession().setAttribute(

文档评论(0)

ycwf + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档