2

これが可能かどうかはわかりませんが、疑問に思っていますか?

私はいくつかの内部侵入テストを行っており、ScapyとNetcatを使用しており、ペイロード「テスト」を使用してTCPパケットを作成しました。次のサンプルコードを使用して、ペイロードコンテンツをNetcatのリスニングポートにパイプ処理したいと思います。

test = IP(src="192.168.4.134")/TCP(dport=1234)/"testing"
send(test)

しかし、これまでに印刷されたのは次のとおりです。

.
Sent 1 packets

これは、Scapyがパケットを送信した後に吐き出すものです。私はこれを示すためにコードで何を使用する必要があるかを理解しようとしてきました。Netcatがstdinとstdoutを使用したことは知っていますが、Pythonでコーディングする方法がまだ適切にわからないので、練習しているだけです。

誰か助けてもらえますか?よろしく、

4

1 に答える 1

2

TCPはセッションベースです。通信したいマシンは、最初に相互に同期(セッションのセットアップ)する必要があります。

このプロセスは、SYN、SYN-ACK、ACKのステップを使用した3ウェイハンドシェイクと呼ばれるものです。

1.) Machine A ====SYN====> Machine B (Machines A, running scapy, tries to synch with B, running netcat)
2.) Machine B ==SYN-ACK==> Machine A (Machine B ACKs and SYNs with Machine A)
3.) Machine A ====ACK====> Machine B (Machine A ACKs the SYN-ACK from Machine B)

これで、マシンにセッション(接続)があり、相互にデータを送信できます。

リスニングマシンでnetcatを実行し、scapyから単一のパケットを送信しようとすると、マシン(A)がnetcatを実行しているマシン(B)と同期できないため、失敗します。

IP 10.22.4.45.20 > 10.1.2.3:1234: Flags [S], seq 0:7, win 8192, length 7
IP 10.1.2.3:1234 > 10.22.4.45:20: Flags [S.], seq 2668993358, ack 1, win 14600, options [mss 1460], length 0
IP 10.22.4.45:20 > 10.1.2.3:1234: Flags [R], seq 1, win 0, length 0

ご覧のとおり、マシンB(netcat)はマシンとsyn-ackを試みますが、単一のパケットを送信しただけで、返されるSYN-ACKをリッスンしていないため、マシンはRST(リセット)を生成し、試行された接続は、3ウェイハンドシェイクが完了する前にシャットダウンされます。

2つのオプションがあります。コネクションレスでこの接続設定を必要としないUDPを使用するか、完全なTCPハンドシェイクを実行します。Scapyには、TCPセッションの作成を管理するのに役立ついくつかの方法があります。後者を選択した場合:http://trac.secdev.org/scapy/wiki/TCP

于 2012-08-22T20:08:10.887 に答える