簡體   English   中英

python套接字上的連接被拒絕(端口已打開,我可以與nc連接)

[英]Connection refused on python sockets (port is open, I can connect with nc)

因此出於個人原因,我想連接到通過telnetlib創建的套接字,我可以從netcat連接到它,但是當我從python嘗試時,它拒絕連接。

tn.write(b"/usr/bin/nc -l -p 3333 -e /bin/sh\n")
print("netcat listening on 3333 on target, trying to connect")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((tn.host, 3333))
s.send('ls')
print(s.recv(1024))
s.close()

如果我可以通過netcat連接到它(例如在tn.write()之后放置無限循環)

您的比賽條件很經典:

包含啟動nc命令的數據包僅在s.connect的連接請求(TCP SYN數據包)之前的十億分之一秒發送。 甚至可能在命令nc啟動之前SYN到達遠程主機。

您需要添加適當的同步。 根據您顯示的代碼,實際上首先不需要使用兩個通道,那么為什么不通過現有的telnet通道將ls發送到遠程主機呢?

如果您絕對必須使用第二個頻道,請嘗試以下選項之一:

  • 在調用s.connect之前添加import times.connect time.sleep(5) 這樣,連接嘗試將延遲5秒鍾。 但是,通常不能保證5秒就足夠了。
  • 發送附加命令以等待端口被占用 ,以表明nc已准備就緒。
  • 重試多次(並在之間等待)。

另請注意,您的代碼具有三個不同的安全漏洞:

  1. 您正在使用telnetlib,它不能確保命令,輸出和密碼的機密性或完整性。 請改用ssh。
  2. 您將以純格式連接到端口3333,該端口既不能確保命令和輸出的機密性也不完整。 請改用ssh。
  3. 在nc啟動和您的程序連接到它之間,任何人都可以連接到端口3333並運行任意命令。 請改用ssh。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM