-
-
[转载]Struts2再爆远程代码执行漏洞
-
发表于:
2013-5-23 13:38
3411
-
出处:51CTO
37dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3&6W2N6s2y4W2j5%4g2J5K9i4c8&6i4K6u0W2y4e0q4U0N6r3!0Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7Y4c8Q4x3V1j5J5x3o6p5K6x3o6g2Q4x3V1j5K6z5e0f1H3z5o6q4Q4x3X3g2Z5N6r3@1`.
摘要
Apache官方的struts2产品,最近出了一个远程代码执行漏洞,编号“S2-013”,目前是0DAY,官方没有修补方案出现。
c0bK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4@1M7Y4g2@1M7#2)9J5k6h3q4H3j5h3y4Z5k6g2)9J5k6h3!0J5k6#2)9J5c8X3c8W2N6X3g2D9L8%4m8E0k6h3&6@1i4K6u0r3x3W2)9J5k6i4S2Q4x3V1k6V1L8$3y4K6i4K6u0r3M7$3g2U0N6i4u0A6N6s2W2Q4x3X3c8T1N6h3I4D9k6i4c8A6L8Y4y4Q4x3X3g2Z5N6r3#2D9 — (公告)
官方安全公告给出了编号和简要介绍,“A vulnerability, present in the includeParams attribute of the URL and Anchor Tag, allows remote command execution”。
但是并没有说原理,也没有发布任何补丁。
分析
事实上,这次struts2官方一共发了两个漏洞,还有个叫s2-012,但是这个漏洞,看题目,应该是我之前在《Xcon2012 攻击JAVA WEB》时的已经爆出来了,所以本文只说另一个。
struts2官方的开发傻乎乎的,比如这个漏洞,要么官方就不要发出来,既然发出来了,就应该发补丁,但是官方仅仅发了这段话,对于详细内容,普通用户不开放访问。
从这段话可以大致总结一下几点:
1、未修补的远程代码执行漏洞
2、includeParams参数在URLTAG中出现了问题。
仅根据这两点,熟悉struts2运行机制和之前漏洞原理的人,都可以轻易分析出具体利用POC。
漏洞触发:
由于官方没有发补丁,所以最新版本的struts2还是有漏洞的,可以下载最新:Apache Struts 2.3.14 GA的示例应用。
经过简单测试,就看到了想要的结果。
根据官方给的信息,问题出在a标签,所以写个jsp页面,内容如下:
Click here.
这个是struts2标签库的a标签,该标签会在页面上显示当前URL,当includeParams=all时,就会显示具体参数内容。
唯一需要解的迷,就是如何让参数内容作为OGNL表示试执行,但是这个迷未免太好猜了,我随手测试就出结果。
访问url:
a8dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3I4G2j5$3q4D9K9r3!0K6N6q4)9K6b7e0R3H3z5o6m8Q4x3V1k6T1L8r3q4F1K9#2)9J5c8X3g2J5M7X3!0J5i4K6u0W2K9Y4y4H3i4K6y4r3j5h3q4S2i4K6y4p5i4K6t1@1i4K6N6n7M7%4c8J5N6i4c8K6x3W2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4g2!0n7z5q4!0n7z5q4!0q4y4#2)9&6y4q4!0m8z5q4m8a6b7#2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4q4!0n7c8q4!0m8x3q4!0q4y4W2)9^5y4#2)9^5x3W2!0q4y4g2!0n7c8g2)9&6y4#2)9%4c8l9`.`.
就可以直接弹计算器,POC代码大家都有的,我只截个图:
几乎没有什么分析过程,就拿到了POC,最终为了研究修补方案,只好被迫研究了漏洞原理。
漏洞原理:
Struts2标签库中的url标签和a标签的includeParams这个属性,代表显示请求访问参数的含义,一旦它的值被赋予ALL或者GET或者POST,就会显示具体请求参数内容。按照正常的需求,把参数urlEncode一下也就够了, 问题在于,struts竟然多做了一步,这丫把参数做了OGNL解析!
代码:
最终TextParseUtil.translateVariables会直接调用OGNL解析执行。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!