起因

struts官方照例更新补丁,这次更新了061,从官方通告上来看与059相似,059的通告类似029与036,既然这样,那大胆猜测一下,059如果修复了,061大概率会是补丁绕过,这里贴一个官方通告地址,方便大家自行查阅:

https://cwiki.apache.org/confluence/display/WW/Security+Bulletins

跟踪

进一步跟踪struts版本改动,得到以下可能存在的漏洞点以及类似黑名单:

根据官方描述,上述为黑名单机制,匹配其中的包名,当然还有类名,由于太长了,这里就不贴了。OK,既然看到类似的漏洞点了,不分析一下怎么可以呢,到此打开idea,maven导入struts2.5.26版本,分析过029的对此类应该不陌生,属于二次ognl表达式执行,看一下官方对此方法的修复情况如何

public static boolean containsExpression(String expr) {
        return expr != null && expr.contains("%{") && expr.contains("}");
    }

对应上图可以看到如果expr中存在%{}时会返回true,就不会对expr进行嵌套。更一步确定了,这次修复肯定还与二次ognl表达式有关。由此可知,这次061为059的补丁绕过。接下来开始惊心动魄的构造poc阶段

构造

首先搭建环境,这里为了给广大白帽子一个福利,啥下载官方all包了,啥maven导版本然后再创建xml了,通通不用,直接使用idea官方maven create from archetype,如下图所示,直接一键操作搭建

创建完成后,需要对index.jsp进行一点点改造,写入特定标签

<!DOCTYPE html PUBLIC
点击收藏 | 1 关注 | 1
登录 后跟帖