酒鬼傳奇版本,Struts2漏洞分析,漏洞波及全系版本

 2023-10-21 阅读 23 评论 0

摘要:Struts漏洞分析 ? ?Apache Struts團隊已經發布了Struts 2.3.15.1安全更新版本。在Struts2.3.15.1版本之前,存在著嚴重的安全漏洞,如果現在一些比較大的網站是用JAVA做的,沒有把版本升級,還用的是Strtus2.3.15.1版本之前的話,那么你們就要小
Struts漏洞分析

? ?Apache Struts團隊已經發布了Struts 2.3.15.1安全更新版本。在Struts2.3.15.1版本之前,存在著嚴重的安全漏洞,如果現在一些比較大的網站是用JAVA做的,沒有把版本升級,還用的是Strtus2.3.15.1版本之前的話,那么你們就要小心,服務器被黑了哦。 下面就來說一下之前版本,Struts2的漏洞是如何產生的,我們自己去做,該如何的去解決這個安全漏洞:

? ? 我聽有人說: “這算什么漏洞”,我想說的是:“你在瀏覽器就能把別個服務器搞蹦掉,讓它停掉沒工作了,這能不是高危漏洞么”。

? ?1. 我用的是struts_2.1.8.1這個版本,如果你用最新的安全版本,是不會出現這個安全問題的。 在瀏覽器輸入如下地址:

http://www.xxxx.com/xxx.action?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&(asdf)(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1?

輸入以后,服務器端就會崩潰。http://www.xxxx.com/xxx.action這個就不說是什么了,你這都不知道就不要看了。
? ?【說明:? url中的\u0023實際上是代表#號,%20實際上是代表空格,\u003實際上是代表等于】

? ?2.產生漏洞的原因如下:
? ? ?上面的地址被瀏覽器會翻譯成:
?('#_memberAccess['allowStaticMethodAccess']')(meh)=true&(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new%20java.lang.Boolean("false")))&(asdf)(('#rt.exit(1)')( #rt=@java.lang.Runtime@getRuntime()))=1
? ? ?當提交這個url后,經過了一個攔截器名為ParameterInterceptor。 其中有這么一行源代碼: ??
try{newStack.setValue(name,value);
}
? ? 利用stack.setValue(“name”,”aaa”);就把name屬性的值改為aaa字符串。 在上述的url中,有兩個至關重要的值:
在map棧中: 下圖:
? ??

酒鬼傳奇版本。_memberAccess是OgnlContext中的一個屬性,這是一個權限類SecurityMemberAccess,該權限類中有一個方法allowStaticMethodAccess:是否允許訪問靜態方法。通過上面的url,把該屬性的值設置為了true(默認值為false),

?

java漏洞、context['xwork.MethodAccessor.denyMethodExecution']這個值為false,Ognl才能夠執行自定義的變量,在map棧中的其中一個值,這個是一個boolean值,設置為true,ognl表達式就能夠調用靜態的方法

(asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtime@getRuntime()))=1則是一個shellcoade,ognl表達式執行靜態方法,這樣就調用java中的命令了。當執行(asdf)(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1這個代碼的時候相當于java.lang.Runtime.getRuntime().exit(1);,執行完畢后,使得我們的整個程序停掉了。

struts2、? ?3.為什么會產生這樣的漏洞呢?

? ? ? struts2提供了存儲數據valueStack

? ? ? struts2提供了訪問數據的ognl表達式

? ? ?ognl表達式不但可以訪問到valueStack中的值,而且還可以改變valueStack中的值調用valueStack.setValue

? ? ? ognl表達式還能執行靜態方法,并且嵌入一些shellcoade代碼。

?4.如果我們去做,怎么去解決?

? ? 做一個自定義的攔截器,用攔截器過濾url,含有\u0023這個字符串,就不讓它執行以后的相應的操作。自定義的攔截器一定要在ParameterInterceptor執行之前執行就哦了。

? ??

@Override
public String intercept(ActionInvocation invocation) throws Exception(){String s = ServletActionContext.getRequest().getQueryString();if(s.contains("\\u0023")){return "error";}else{return invocation.invole();}
}
在struts的配置文件下配置一下就OK了,像這樣就行:

?

?

<interceptors><interceptor name="definitionInterceptor" calss=".....definitionInterceptor"></interceptor><intercpeotr-stack name="myStack"><interceptor-ref name="definitionInterceptor"></interceptor-ref><interceptor-ref name="defaultStackr"></interceptor-ref></interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"></default-interceptor-ref>
有不懂的地方,可以給我留言。

轉載于:https://www.cnblogs.com/suncoolcat/p/3400154.html

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/3/155772.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息