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,避免临时文件位置差异。

参与者对代码审计挑战的反馈有哪些?

参与者反馈包括多种预期和非预期解法,展示了集体智慧的成果,促进了知识的分享和学习。

➡️

继续阅读