Написание инструмента обнаружения тестов на проникновение на Python

база данных Python контрольная работа модульный тест

В этой статье будут рассмотрены:

  • Обнаружение ресурсов
  • Полезный словарь
  • Первый детектор насилия

Статья впервые опубликована:Z Mister.com/archives/18…

Обнаружение ресурсов

Обнаружение ресурсов по-прежнему относится к этапу отображения ресурсов и сбора информации при тестировании на проникновение.
Существует три основных типа:

  • атака по словарю
  • Грубая сила
  • Фаззинг

Атака по словарю, при взломе пароля или ключа через настроенный файл словаря все словарные комбинации в файле словаря пробуются целенаправленным образом.

Взлом методом грубой силы, также известный как исчерпывающий метод, перечисляет все комбинации в соответствии с конкретной комбинацией. Проще говоря, пароли вычисляются один за другим, пока не будет найден настоящий пароль.

Фаззинг относится к обнаружению уязвимостей в целевой системе путем предоставления неожиданного ввода в целевую систему и отслеживания ее аномальных результатов.

Роль обнаружения ресурсов

Благодаря обнаружению ресурсов мы можем найти файлы, каталоги, действия, службы и связанные параметры в целевой системе, предоставляя информацию для следующего действия.

База данных фаззинга с открытым исходным кодом

GitHub.com/отвечает за представление только -pro, т.е....представляет собой словарь примитивов с открытым исходным кодом для внедрения уязвимостей и обнаружения ресурсов. Он предоставляет ресурсы для атаки, обнаружения ресурсов и анализа ответов.

Первый детектор насилия

В предыдущих главах мы узнали об использовании Python для создания HTTP-запросов, а в этой главе мы узнали о роли обнаружения ресурсов. Далее мы будем использовать Python для написания детектора ресурсов для обнаружения ресурсов веб-сайтов.

Мы клонировали или загрузили базу данных фаззинга с открытым исходным кодом FUZZDB, представленную выше, с github:

Эта база данных будет использоваться в качестве словаря для наших детекторов ресурсов для целевых веб-сайтов.

Создайте новый файл Python, чтобы начать писать наш детектор грубой силы.

Сначала импортируйте соответствующие модули:

# coding:utf-8

import requests
from threading import Thread
import sys
import getopt
  • запросы используются для запроса целевого сайта;
  • threading используется для включения многопоточности;
  • sys используется для разбора аргументов командной строки;
  • getopt используется для обработки аргументов командной строки;

Затем определите баннер для программы:

# 程序标识
def banner():
    print("\n********************")
    name = '''
  ______          _     _
 |___  /         (_)   | |
    / / _ __ ___  _ ___| |_ ___ _ __
   / / | '_ ` _ \| / __| __/ _ \ '__|
  / /__| | | | | | \__ \ ||  __/ |
 /_____|_| |_| |_|_|___/\__\___|_|
    '''
    print(name)
    print("州的先生-暴力发掘器 v0.1")
    print("***********************")

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

Определите другую функцию для отображения использования программы:

# 程序用法
def usage():
    print("用法:")
    print("     -w:网址 (http://wensite.com/FUZZ)")
    print("     -t:线程数")
    print("     -f:字典文件")
    print("例子:bruteforcer.py -w http://zmister.com/FUZZ -t 5 -f commom.txt")

Поскольку наша программа работает в командной строке, нам нужно установить некоторые параметры, здесь мы используем:

  • -w указать URL-адрес
  • -t указать количество потоков
  • -f указать файл словаря

Все три параметра обязательны.

После создания этих двух функций при запуске программы появится следующий интерфейс:

Разве это не кажется таким интересным.

Затем мы создаем класс request_performer(), который наследуется от Thread, чтобы создать поток и инициировать запрос к целевому сайту и получить ответ:

class request_performer(Thread):
    def __init__(self,word,url):
        Thread.__init__(self)
        try:
            self.word = word.split("\n")[0]
            self.urly = url.replace('FUZZ',self.word)
            self.url = self.urly
        except Exception as e:
            print(e)

    def run(self):
        try:
            r = requests.get(self.url)
            print(self.url,"-",str(r.status_code))
            i[0] = i[0] -1
        except Exception as e:
            print(e)

В методе run() класса request_performer() мы используем запросы для запроса URL-адреса и вывода кода состояния ответа. И это основная функция нашего детектора.

Создайте функцию launcher_thread(), которая запускает класс request_performer(), который используется для обхода ключевых слов в файле словаря, объединения их в URL-адреса и создания новых потоков.

def launcher_thread(names,th,url):
    global i
    i = []
    resultlist = []
    i.append(0)
    while len(names):
        try:
            if i[0] < th:
                n = names.pop(0)
                i[0] = i[0]+1
                thread = request_performer(n,url)
                thread.start()
        except KeyboardInterrupt:
            print("用户停止了程序运行。完成探测")
            sys.exit()
    return True

Идем дальше и создадим функцию start(), которая получает аргументы из командной строки и передает их функции launcher_thread():

def start(argv):
    banner()
    if len(sys.argv) < 5:
        usage()
        sys.exit()
    try:
        opts,args = getopt.getopt(sys.argv[1:],"w:t:f:")
    except getopt.GetoptError:
        print("错误的参数")
        sys.exit()

    for opt,arg in opts:
        if opt == '-w':
            url = arg
        elif opt == '-f':
            dicts = arg
        elif opt == '-t':
            threads = int(arg)

    try:
        f = open(dicts,'r')
        words = f.readlines()
    except Exception as e:
        print("打开文件错误:",dicts,"\n")
        print(e)
        sys.exit()

    launcher_thread(words,threads,url)

Наконец, в основной программе, разумеется:

if __name__ == '__main__':
    try:
        start(sys.argv[1:])
    except KeyboardInterrupt:
        print("用户停止了程序运行。完成探测")

Чем полезна наша программа?
Здесь мы должны упомянуть упомянутую выше базу данных FUZZDB. fuzzdb — база данных для фаззинга, похожая на огромный словарь. Содержимое этих словарей — это все каталоги или пути, поддерживаемые богами безопасности и найденные на практике, которые могут быть точками атаки.

Мы можем открыть текстовый файл в базе данных, чтобы увидеть:

Это словарь для плагинов системы блогов WordPress, которые представляют собой пути и каталоги плагинов.

Протестируйте детектор насилия

Помните среду виртуальной машины, описанную в той статье, в среде тестирования на проникновение?
Есть веб-приложение, полное уязвимостейwww.scruffybank.com/, мы можем использовать наш только…
Файл словаря мы сначала используем простой словарь:

Запускаем команду в командной строке:

python3 brutediscovery.py -w http://www.scruffybank.com/FUZZ -t 5 -f common.txt

получил ответ:

В словаре common.txt три удачных ответа, открываем один из нихwww.scruffybank.com/robots.txt, чтобы увидеть…

Он содержит три ссылки, которые запрещают поисковым системам сканировать, Буквально одна из них все еще является фоновым адресом admin, но на странице результатов мы знаем, что /admin — это ошибка 404, но есть одна /Admin, давайте откроем ее и посмотрим :

Появится окно входа в систему аутентификации, но у нас нет имени пользователя и пароля, поэтому пока мы можем только сдаться.

Проверим еще раз, используя словарь в базе данных FUZZDB. Выберите PHP.fuzz.txt в каталоге fuzzdb-master/discovery/predictable-filepaths/php:

Также запустите команду в командной строке терминала:

python3 brutediscovery.py -w http://www.scruffybank.com/FUZZ -t 5 -f PHP.fuzz.txt

получил ответ:

Хотя ошибок 404 много, мы нашли несколько успешных ответов:
Например, info.php, откройте информационный интерфейс, который изначально был PHP:

login.php — это страница входа:

phpmyadmin — это запись веб-управления для базы данных mysql:

На этапе обнаружения и сбора данных мы получили информацию об этих страницах через собственный детектор грубой силы, что очень помогает для анализа уязвимостей серверов и веб-приложений и проведения целевого проникновения.

В следующих статьях мы обогатим и улучшим функциональность написанного нами инструмента тестирования на проникновение.
Следите за обновлениями!

Публичный аккаунт WeChat: г-н Чжоу обновляет синхронно
Поисковый робот Python, анализ данных, машинное обучение, тестирование на проникновение, веб-разработка:zmister.com/