[英]Hijacking a client socket
我已經設置了偵聽port A
的服務器套接字(普通原始套接字)。 客戶端現在連接到該服務器。 為此,操作系統為客戶端打開了一個端口。 假設port B
已分配給該客戶端。 現在我的問題是, 第三個腳本可以連接到該port B
並發送數據嗎? 或者換句話說,我可以欺騙對客戶端的響應,就像它是來自服務器一樣嗎? 我嘗試使用船尾欺騙它,但是它沒有用。
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和IP欺騙才能發送消息。在流中。
換句話說,您必須猜測(或竊取)服務器的ACK編號,才能使用badclient
將虛假消息發送給客戶端。
但是,如果您將以某種方式使goodclient
回答您而不是服務器,則應運行以下命令:
iptables -A FORWARD -j NFQUEUE --queue-num 1
,因為您的操作系統不知道您剛剛與goodclient“打開”的會話,它將發送RST數據包。 此命令將阻止它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.