频道栏目
首页 > 安全 > 网络安全 > 正文

Struts2 S2-052(CVE-2017-9805)远程代码执行漏洞bug研究

2017-09-08 09:19:17      个评论      
收藏   我要投稿

Struts2 S2-052远程代码履行漏洞bug和以往的Struts2漏洞bug存在差异的,S2-052操作的是Java反序列化裂缝,而不是美名昭著的ognl。
本次破绽触发点是REST插件在解析央求中的xml文件时,调用了XStreamHandler,传入的数据会被默许发展反序列化,要是当传入的xml是个经由过程XStream序列化的恶意对象时,便造成反序列化bug。
0x01 漏洞bug研究
本次bug的成理由两一部分形成,一个是 Struts2 REST插件本人没有对进入的数据进行保险检查,导致进攻者可以传入恶意的xml对象可以传入到XStream里。另外一个是XStream在反序列化传入的xml酿成的近程代码履行。
症结代码在org.apache.struts2.rest.ContentTypeInterceptor里。
public String intercept(ActionInvocation invocation) throws Exception {
    HttpServletRequest request = ServletActionContext.getRequest();
    ContentTypeHandler handler = sele首席技术官r.getHandlerForRequest(request);
 
    Object target = invocation.getAction();
    if (target instanceof ModelDriven) {
        target = ((ModelDriven)target).getModel();
    }
 
    if (request.getContentLength() > 0) {
        InputStream is = request.getInputStream();
        InputStreamReader reader = new InputStreamReader(is);
        handler.toObject(reader, target);
    }
    return invocation.invoke();
}
问题出在下列两点

ContentTypeHandler handler = sele首席技术官r.getHandlerForRequest(request);


handler.toObject(reader, target);
Struts2的马脚点本人没甚么难度,这个bug出在裂痕独霸方面。
0x02 哄骗阐发
本次漏洞bug,最劈脸的poc生成是独霸marshalsec器材生成ImageIO的远程代码序列化对象,这个poc适用的状况是java1.8以上,这是个非常尖刻的条件。
可是有无在另外版本java的哄骗代码呢,答案是有的。由于缝隙的本质是反序列化漏洞bug,而反序列化工具ysoserial供给了大批的反序列化代码。通过查看marshalsec东西生成XStream的代码,创造把持下面代码再群集ysoserial器械的代码,便可生成更多的把持代码。
public class XStream extends MarshallerBase implements CommonsConfiguration, Rome, CommonsBeanutils, ServiceLoader, ImageIO,BindingEnumeration, LazySearchEnumeration, SpringAbstractBeanFa首席技术官ryPointcutAdvisor, SpringPartiallyComparableAdvisorHolder, Resin, XBean {
 
    @Override
    public String marshal ( Object o ) throws Exception {
        com.thoughtworks.xstream.XStream xs = new com.thoughtworks.xstream.XStream();
        return xs.toXML(o);
    }
 
    @Override
    public Object unmarshal ( String data ) throws Exception {
        com.thoughtworks.xstream.XStream xs = new com.thoughtworks.xstream.XStream();
        return xs.fromXML(data);
    }
 
    @Override
    public Object makeComparatorTrigger ( Object tgt, Comparator cmp ) throws Exception {
        return JDKUtil.makePriorityQueue(tgt, cmp);
    }
 
 
    public static void main ( String[] args ) {
        new XStream().run(args);
    }
}
操纵commons.collections与XStream可以天生在java1.7情况下不变哄骗的poc。

操纵中,实行的代码为:
touch /tmp/manning_s2_052

上一篇:如何应用RDP跳转主机进入隔绝网络
下一篇:对MSOffice的新变种木马(毒藤)进行深入的研究
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站