ClassPathXmlApplicationContext的不出网利用
💡
原文中文,约7300字,阅读约需18分钟。
📝
内容提要
本文讨论了Spring Boot中的代码审计挑战,重点在于通过ClassPathXmlApplicationContext类的构造函数,利用用户输入的类名和参数执行任意命令。文章分析了如何通过通配符和环境变量绕过安全限制,并分享了多种利用方法及参与者反馈。
🎯
关键要点
- 文章讨论了Spring Boot中的代码审计挑战,特别是ClassPathXmlApplicationContext类的构造函数的利用。
- 用户可以输入类名和参数,执行任意命令,存在安全隐患。
- ClassPathXmlApplicationContext类可以通过通配符和环境变量绕过安全限制。
- setConfigLocations()和refresh()函数是关键,refresh()函数执行任意命令。
- url支持通配符,利用PHP上传文件的方式可以构造Webshell。
- Tomcat处理multipart/form-data请求时,会将每个块保存在临时文件中,可以利用这一点执行任意命令。
- 使用环境变量${catalina.home}可以适配不同环境,避免临时文件位置差异。
- 通过差异化的url参数可以绕过全局filter的限制,成功执行命令。
- CVE-2022-21724漏洞可以通过socketFactory和loggerFile参数进行攻击。
- 利用ascii jar和PaddingZip可以绕过脏字符限制,成功加载XML文件。
- 文章总结了多个参与者的反馈和解决方案,展示了集体智慧的成果。
❓
延伸问答
ClassPathXmlApplicationContext的构造函数有什么安全隐患?
ClassPathXmlApplicationContext的构造函数允许用户输入类名和参数,可能导致执行任意命令,存在安全隐患。
如何通过通配符绕过ClassPathXmlApplicationContext的安全限制?
可以通过在URL中使用通配符,结合环境变量,绕过ClassPathXmlApplicationContext的安全限制,执行任意命令。
CVE-2022-21724漏洞是如何被利用的?
CVE-2022-21724漏洞可以通过socketFactory和loggerFile参数进行攻击,允许执行任意命令。
Tomcat如何处理multipart/form-data请求?
Tomcat在处理multipart/form-data请求时,会将每个块保存在临时文件中,这可以被利用来执行任意命令。
如何构造适配不同环境的Payload?
可以使用环境变量${catalina.home}来构造适配不同环境的Payload,避免临时文件位置差异。
参与者对代码审计挑战的反馈有哪些?
参与者反馈包括多种预期和非预期解法,展示了集体智慧的成果,促进了知识的分享和学习。
➡️