当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2013-032632

漏洞标题:天津大学录取查询系统struts2漏洞(详细利用过程与修复方案)

相关厂商:天津大学

漏洞作者: b33

提交时间:2013-07-29 19:23

修复时间:2013-09-12 19:23

公开时间:2013-09-12 19:23

漏洞类型:成功的入侵事件

危害等级:中

自评Rank:8

漏洞状态:未联系到厂商或者厂商积极忽略

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-07-29: 积极联系厂商并且等待厂商认领中,细节不对外公开
2013-09-12: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:

天津大学录取查询系统存在struts2 s2-016漏洞,可导致学生信息及数据库内的所有信息泄露。若被非法利用,可添加录取数据进行诈骗。

详细说明:

漏洞原理:
Struts2下DefaultActionMapper中的handleSpecialParameters方法可以用action、redirect、 redirectAction对写入数据进行处理,从而改变前缀参数,这样操作的目的是方便表单中的操作。在2.3.15.1版本以前的struts2中,没有对action、redirect、 redirectAction等进行过滤处理,导致ongl表达式可以被执行。

图(0)

图(0)
天津大学的录取查询系统使用了2.3.15.1之前的版本,导致出现了上述的严重安全问题。

漏洞证明:

一、经检测,以下页面存在struts2命令执行漏洞
http://121.193.130.44/zs/search.action
root 权限(见图1),可执行任意命令(见图2),可上传webshell

图(1)

图(1)

图(2)

图(2)
二、利用该漏洞成功上传webshell

图(3)

图(3)
三、找到配置文件内的数据库信息并成功连接

图(4)

图(4)

图(5)

图(5)

图(6)

图(6)

图(7)

图(7)
四、成功写入HTML页面至该系统根目录下
http://121.193.130.44/zs/1.html

图(8)

图(8)

图(9)

图(9)

修复方案:

此方法可修补S2-016、S2-017漏洞
重写struts2 DefaultActionMapper的handleSpecialParameters方法,增加action、redirect、redirectAction等参数的过滤。
操作步骤:
1、新建com/website/struts2/MyDefaultActionMapper.java,代码如下:

/** * zhounenghua@163.com copyright */package com.website.struts2;/** * @author jason.zhou * @date 2013-7-18 */public class MyDefaultActionMapper extends DefaultActionMapper {    public void handleSpecialParameters(HttpServletRequest request, ActionMapping mapping) {        Set uniqueParameters = new HashSet();        Map parameterMap = request.getParameterMap();        for (Iterator iterator = parameterMap.keySet().iterator(); iterator.hasNext();) {            String key = (String) iterator.next();            if ((key.endsWith(".x")) || (key.endsWith(".y"))) {                key = key.substring(0, key.length() - 2);            }            // -- jason.zhou 20130708 add start -- //            if ((key.contains("redirect:")) || (key.contains("redirectAction:")) || (key.contains("action:"))) {                return;            }            // -- jason.zhou 20130708 add end -- //                        if (!uniqueParameters.contains(key)) {                ParameterAction parameterAction = (ParameterAction) this.prefixTrie.get(key);                if (parameterAction != null) {                    parameterAction.execute(key, mapping);                    uniqueParameters.add(key);                    break;                }            }        }    }}


2、复制MyDefaultActionMapper.class 到 /com/website/struts2/目录。
3、在struts.xml文件中添加如下代码:

<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="myDefaultActionMapper" class="com.website.struts2.MyDefaultActionMapper" />     <constant name="struts.mapper.class" value="myDefaultActionMapper" />


4、重启服务器。

版权声明:转载请注明来源 b33@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝