劫持客户端套接字

时间:2016-02-18 17:12:48

标签: python sockets networking server scapy

我已经设置了一个监听port A的服务器套接字(普通原始套接字)。客户端现在连接到此服务器。操作系统为此目的为客户端打开了一个端口。假设port B已分配给此客户端。现在我的问题是,3 rd 脚本可以连接到此port B并发送数据。或者换句话说,我可以欺骗客户端的响应,就好像它来自服务器一样?我尝试用scapy欺骗它,但它没有用。

server.py

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", A))
s.listen(10)
ns, cli_addr = s.accept()
time.sleep(30) # so that i can trigger my 3rd script

goodclient.py

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", A))
print s.getsockname() # to get the local port of client - B
s.recv(1024)

badboy.py

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", B)) # connection refused error
s.send("hihihi")

scapybadboy.py

pack = IP(src="localhost", dst="localhost") / TCP(sport=A, dport=B) / "Hello"
send(pack) # Packet sent but not received by the client

1 个答案:

答案 0 :(得分:1)

由于服务器和客户端使用SOCK_STREAM套接字,他们都知道TCP会话(包括端口,IP和( SEQ_NUMBER ACK_NUMBER )),所以当会话已在进行中,您必须执行TCP hikackingIP spoofing才能以流方式发送消息。

换句话说,您必须猜测(或窃取)服务器的ACK号码,以便使用badclient向客户端发送虚假消息。

但是,如果您以某种方式goodclient回答您而不是服务器,则应运行以下命令:

iptables -A FORWARD -j NFQUEUE --queue-num 1,因为您的操作系统并不知道您刚刚打开过的会话"与goodclient,它将发送RST数据包。此命令将阻止它。