linux struts2漏洞,Struts2漏洞分析,漏洞波及全系版本

linux struts2漏洞,Struts2漏洞分析,漏洞波及全系版本Struts漏洞分析ApacheStruts团队已经发布了Struts2.3.15.1安全更新版本。在Struts2.3.15.1版本之前,存在着严重的安全漏洞,如果现在一些比较大的网站是用JAVA做的,没有把版本升级,还用的是Strtus2.3.15.1版本之前的话,那么你们就要小心,服务器被黑了哦。下面就来说一下之前版本,Struts2的漏洞是如何产生的,我们自己去做,该如何的去解决这个…

大家好,又见面了,我是你们的朋友全栈君。

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栈中:下图:

92c2eb01f8bbcfb8008b7b0ec2cb5bea.png

_memberAccess是OgnlContext中的一个属性,这是一个权限类SecurityMemberAccess,该权限类中有一个方法allowStaticMethodAccess:是否允许访问静态方法。通过上面的url,把该属性的值设置为了true(默认值为false),

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);,执行完毕后,使得我们的整个程序停掉了。

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了,像这样就行:

有不懂的地方,可以给我留言。

相关阅读:

0b1331709591d260c1c78e86d0c51c18.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161718.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月19日 上午10:46
下一篇 2022年7月19日 上午10:46


相关推荐

  • 查询SQLSERVER执行过的SQL记录(历史查询记录)

    查询SQLSERVER执行过的SQL记录(历史查询记录)

    2021年11月17日
    149
  • JS兼容性处理

    JS兼容性处理

    2021年7月9日
    87
  • linux添加浮动地址,linux浮动IP

    linux添加浮动地址,linux浮动IP作用 服务主备 例如 本机 ip 地址为 192 168 2 5 6 要设置的浮动 ip 为 192 168 2 10 方法一 创建浮动 ip ifconfigeth1 1192 168 2 10netmask255 255 255 0broadcast19 168 2 255 将浮动 ip 写入本地开机启动 确保机器重启仍然生效 echoifconfig 1192 168 2 10net

    2026年3月16日
    0
  • 服务器性能监控工具软件Nmon和ServerAgent对比

    服务器性能监控工具软件Nmon和ServerAgent对比服务器性能监控工具软件 Nmon 和 ServerAgent 对比软件 Nmon nmon analyserServ Jemeter 范围 AIX 与各种 Linux 操作系统 Windows 和 Linux 操作系统安装 1 nbsp 下载 Nmon nmon analyserhttp download csdn net download zwliu6 nbsp 将 Nmon 部署到服务器上 拷贝过去

    2026年3月26日
    2
  • FM/FFM

    FM/FFMFM背景及相关算法对比(1)FM(factorizationmachine)是在LR(logisticregression)基础上,加入了特征的二阶组合项;(2)SVM和FM的主要区别在于,SVM的二元特征交叉参数是独立的,如wijw_{ij}wij​,而FM的二元特征交叉参数是两个k维的向量vi、vjv_i、v_jvi​、vj​,即<vi,vj>&lt…

    2022年5月2日
    51
  • nginx转发tcp请求保留ip_nginx请求转发

    nginx转发tcp请求保留ip_nginx请求转发在平时的开发中,可能有的服务在本地电脑是连接不上的,此时需要一个中间人来作为代理,帮助我们去转发请求比如现在本地可以链接某一台nginx服务器,域名为www.baidu.com,并且开放了端口8899,那么我们通过这台服务器,来转发我们链接不上的192.168.0.111:6379redis服务一、nginx.confdaemonoff;userwww;worker_processes8;worker_rlimit_nofile102400;events{useep.

    2022年10月10日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号