2

我不知道这是否可能,但我想知道?

我正在做一些内部渗透测试并使用 Scapy 和 Netcat,我创建了一个带有有效负载“测试”的 TCP 数据包。我想使用以下示例代码将有效负载内容通过管道传输到 Netcat 的侦听端口:

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

但所有打印出来的是:

.
Sent 1 packets

这是 Scapy 在发送数据包后吐出的内容。我一直在试图弄清楚我需要在我的代码中使用什么来显示这一点。我知道 Netcat 使用标准输入和标准输出,但我还不知道如何用 Python 编码,我只是在练习!

任何人都可以帮忙吗?问候,

4

1 回答 1

2

TCP 是基于会话的。想要通信的机器必须首先相互同步(设置会话)。

这个过程就是所谓的 3 次握手,使用以下步骤:SYN、SYN-ACK、ACK。

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,因此您的机器会生成一个 RST(重置)并且尝试的连接在 3 次握手完成之前被关闭。

有两种选择。要么使用无连接且不需要此连接设置的 UDP,要么进行完整的 TCP 握手。如果您选择后者,Scapy 有几种方法可以帮助您管理 TCP 会话创建:http: //trac.secdev.org/scapy/wiki/TCP

于 2012-08-22T20:08:10.887 回答