劫持客户端套接字
Hijacking a client socket
我已经设置了一个监听 port A
的服务器套接字(普通原始套接字)。客户端现在连接到此服务器。 OS为此目的为客户端打开一个端口。说 port B
分配给这个客户。现在我的问题是,3rd 脚本能否连接到此 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
因为服务器和客户端使用SOCK_STREAM
套接字,他们都知道TCP会话(包括端口、IP和(SEQ_NUMBER,ACK_NUMBER)),所以当会话已经在进行中时,您必须执行 TCP hikacking and IP spoofing 才能在流中发送消息。
换句话说,您必须猜测(或窃取)服务器的 ACK 编号才能使用 badclient
向客户端发送虚假消息。
但是,如果您要以某种方式 goodclient
回答您而不是服务器,您应该 运行 以下内容:
iptables -A FORWARD -j NFQUEUE --queue-num 1
,因为您的操作系统不知道您只是 "opened" 与 goodclient 的会话,它会发送 RST 数据包。此命令将阻止它。
我已经设置了一个监听 port A
的服务器套接字(普通原始套接字)。客户端现在连接到此服务器。 OS为此目的为客户端打开一个端口。说 port B
分配给这个客户。现在我的问题是,3rd 脚本能否连接到此 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
因为服务器和客户端使用SOCK_STREAM
套接字,他们都知道TCP会话(包括端口、IP和(SEQ_NUMBER,ACK_NUMBER)),所以当会话已经在进行中时,您必须执行 TCP hikacking and IP spoofing 才能在流中发送消息。
换句话说,您必须猜测(或窃取)服务器的 ACK 编号才能使用 badclient
向客户端发送虚假消息。
但是,如果您要以某种方式 goodclient
回答您而不是服务器,您应该 运行 以下内容:
iptables -A FORWARD -j NFQUEUE --queue-num 1
,因为您的操作系统不知道您只是 "opened" 与 goodclient 的会话,它会发送 RST 数据包。此命令将阻止它。