3

どうすればscapyでパケットデータを変更できますか?

編集したパケットを使用sniff()してみましsend()たが、元のパケットがすでに宛先に到達しているため、機能しません。

4

4 に答える 4

4

iTayb、

scapyを使用してある種のサービスをプロキシすることに興味があるようですか?もしそうなら、どれですか?

ビジネスの最初の順序は、パケットがscapyを実行しているボックスをどのように通過するかです。これを行うには、リモートマシンのゲートウェイをスケープボックスと一致するように設定します。これが何らかの侵入テスト用である場合は、いくつかのMACアドレスをスプーフィングする必要があります。これは、arpcachepoisonメソッドを使用するscapy、またはettercapなどのサードパーティプログラムを使用して行うことができます。

これが完了すると、sniff()とsend()を使用するメソッドが少しうまく機能するはずです。送信部分に到達する前に、必ずパケットを変更してください;)これを行う方法の小さな例を次に示します。 。ここでは、IPヘッダーの宛先アドレスを変更するだけですが、必要に応じて変更できます。

from scapy import *

def chgSend(x):
    x[IP].dst = '192.168.1.1'
    send(x)
while 1:
    sniff(prn=chgSend)

DC

于 2012-04-19T10:50:20.330 に答える
4

「しかし、元のパケットがすでに宛先に到達しているため、機能しません。」

したがって、最初にMiTMソリューションを設定して、両端間のすべての通信がデバイスを通過するようにし、パケットデータを変更できるようにする必要があります。

この機能/attackの既知のソフトウェアパッケージには、ettercapとcain/abelがあります。

于 2012-04-14T20:56:13.257 に答える
2

私も同じ問題を抱えていました、

問題は、ip_forwardを有効にして、変更されたパケットがscapyによって送信される前に、元のパケットが元の宛先に転送されることだと思います。

理論的には、解決策は、変更したいパケットを別のポートに転送するルールをiptablesに作成することです(これは多かれ少なかれEttercapが内部で行うことです)。

      i.e = iptables -t nat -A PREROUTING -p tcp --destination-port "YourInterestingPort" -j REDIRECT   --to-port 1234

次に、scapyでそのポートをリッスンし、パケットを変更して、パケットを元のポートに送信します。

このソリューションは、フィルタリングのために実装が困難です。必要なパケットのみをリダイレクトおよび変更し、synackarpなどを除外する必要があります...

サーバーの応答を変更する場合、それを行うためのより簡単な方法は、パケットをその場で変更する代わりに、仲介者のように機能することです。

  • arpspoof
  • iptables
  • ソケットを開き、パケットを受信し、接続を開いて、元の宛先に送信します(クライアントであるかのように見せかけます)。次に、元の宛先から回答を受け取り、回答を変更して、元のクエリアに戻します。

    while True:
       c, addr = s_mb.accept()             # Establish connection with client.
       query = c.recv(BUFFER_SIZE)
    
       s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
       s.connect((IP, PORT))
       s.send(PACKET)
       response = s.recv(1024)
       if response = "THIS IS THE RESPONSE THAT I WANT TO MODIFY":
        if(real_simulation):
            fakeresponse = "MODIFIED RESPONSE"
            #print "The packet has beeb modified"
           else:
            fakeresponse = response
       s.close()     
       c.send(fakeresponse)
    

(汚いコードでごめんなさい)

于 2014-10-08T09:12:51.960 に答える
0

scapy send()関数を使用すると、新しいパケットが作成されますが、MITMfを使用すると、send関数は必要ありません。scapy構文などのパケットフィールドを変更するだけで、sendfuncを使用したり新しいパケットを作成したりする必要はありません...

これはMITMfに適したgithub レポジトリです。
このレポジトリはscapyのようなもので、ターゲットに対して完全な機能を備えたゼロから作成されています。
サンプルコード:

if packet.haslayer(ICMP):
   log.info('Got an ICMP packet!')
   packet.dst = '192.168.1.0'
于 2021-05-18T19:57:19.073 に答える