В этой статье будут рассмотрены:
- Обнаружение ресурсов
- Полезный словарь
- Первый детектор насилия
Статья впервые опубликована: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/