ElasticSearch Groovyリモートコード実行POCとexp



ElasticSearchのこの脆弱性の番号はCVE-2015-1427で、影響バージョンは1.3.0-1.3.7および1.4.0-1.4.2で、脆弱性の原因は詳しく見てください.http://drops.wooyun.org/papers/5107,本稿では,脆弱性の利用を具体的に検討する.
1.2.0バージョンのデフォルトでは、スクリプトの実行は無効です.この機能を使用する場合はelasticsearchにします.ymlでscriptを設定するdisable_dynamic:true.
バージョン1.3.0ではgroovyとsandboxを使用してスクリプト実行が開始され、ホワイトリストメカニズムが使用され、呼び出せるクラスやメソッドなどが制限されています.
しかしJavaの反射メカニズムのため,ホワイトリストのクラスからRuntimeを取得することができ,リモートコード実行の脆弱性をもたらし,威力が大きい.
くだらないことは言わないで、esのpythonクライアントを使ってテストします.
ElasticSearch Groovy远程代码执行POC和exp_第1张图片
ここで注意するには、groovyというスクリプトのタイプを指定する必要があります.これは、1.3バージョンではMVELがデフォルトの言語であり、効果は以下の通りであるためです.
ElasticSearch Groovy远程代码执行POC和exp_第2张图片
リモートコード実行である以上、攻撃面が広すぎて、酸っぱいです.
(1)サービス攻撃の拒否
ElasticSearch Groovy远程代码执行POC和exp_第3张图片
exitを呼び出せばいいです.
 
(2)getshell

テストの結果、リバウンドshellが正常に返されました.
ElasticSearch Groovy远程代码执行POC和exp_第4张图片
Linuxでは、多くのサーバがroot権限で実行されており、権限が省けています~~
 
(3)任意ファイル読み出し
入力ストリームを取得するとreadLineが表示されます.
(4)任意ファイル書き込み(shell書き込み)
Javaコードを使用して実装されただけで、ローカルテストに成功しましたが、簡単なjavaコードでは、反射を使用するとこんなに長いことができます.
 
java.lang.Math.class.forName(\"java.io.FileOutputStream\").getConstructor(java.io.File.class).newInstance(java.lang.Math.class.forName(\"java.io.File\").getConstructor(java.lang.String.class).newInstance(\"c:/1.txt\")).write(java.lang.Math.class.forName(\"java.lang.String\").getConstructor(java.lang.String.class).newInstance(\"fuck\").getBytes())

コマンドを使用してecho出shellを実行することもでき、考えが多い.
 
 
ここではexpプログラムは書かれません.簡単なので、esのpython apiは適用されません.自分でesサーバにリクエストを構築することもできます.1つのqueryは攻撃方法に対応します.
大量利用なら、IPセグメントの9200をスキャンして攻撃コードをつければいいので、楽しんでほしいです.
————————————2015—3—7—更新——————————————————————————————————————————
tang 3のhttp://drops.wooyun.org/papers/5142その後、実際には反射から始める必要はありません.黒い雲の上で誰かがこのようにしているのを見て、私から見れば、反射を使って砂箱を迂回してもgroovyコードを直接実行しても脆弱性を利用しても、本質的には悪くありません.ただ、オリジナルgroovyスクリプトを使うほうが柔軟です.公式のドキュメントやtang 3が文章で指摘しているように、バックドアの持続的な利用を実現できます.groovyはjavaの本来の機能を実現できるので、これは本当に命がけなのでgetshell、コマンド実行などは自然に話にならない.
まとめてみると、この脆弱性はカバーバージョンが広く、珍しいもので、非常に深刻な脆弱性と言える.elasticsearchを使用している友达は、イントラネットのこれらのホストをよく保護し、9200ポートを公開しないでください.できれば、イントラネットのどのホストもesホストへのアクセスをできるだけ避けなければなりません.また、公式サイトの説明によると、構成を変更します.script.groovy.sandbox.enabled: false false