【问题标题】:Hijacking a client socket劫持客户端套接字
【发布时间】:2016-05-31 00:12:40
【问题描述】:

我已经设置了一个监听port A 的服务器套接字(纯原始套接字)。客户端现在连接到此服务器。操作系统为此目的为客户端打开一个端口。假设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

【问题讨论】:

    标签: python sockets networking server scapy


    【解决方案1】:

    因为服务器和客户端使用SOCK_STREAM套接字,他们都知道TCP会话(包括端口,IP和(SEQ_NUMBERACK_NUMBER)),所以当会话是已经在处理中,您必须执行 TCP hikackingIP spoofing 才能在流中发送消息。

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

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

    iptables -A FORWARD -j NFQUEUE --queue-num 1 ,因为您的操作系统不知道您刚刚使用 goodclient “打开”的会话,它会发送 RST 数据包。这个命令会阻止它。

    【讨论】:

    • 所以我唯一需要添加的是确认号?
    猜你喜欢
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2015-02-08
    • 2012-02-19
    • 2011-01-27
    • 2013-12-15
    • 2012-03-29
    • 1970-01-01
    相关资源
    最近更新 更多