Подробное руководство по httpx

Дата: 24.03.2022. Автор: Игорь Б. Категории: Статьи по информационной безопасности
Подробное руководство по httpx
Изображение: Nikita Belokhonov (Pexels)

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

Введение

Httpx был создан ProjectDiscovery. Благодаря множеству модулей, эффективных для обработки HTTP-запросов и фильтрации ответов, httpx представляет собой незаменимый набор инструментов для баг хантера. В то время как такие инструменты, как Curl, уже существуют и могут выполнять похожие функции, httpx занимает почетное место среди аналитических программ, поскольку отличается высокой скоростью работы и простотой использования. Скачать исходный код можно здесь.

Установка go (версия 1.17)

Установка и корректная работа httpx зависит от go (версии 1.17). Пользователь сможет загружать, извлекать, добавлять файлы для go в переменные среды следующим образом. Он использует Kali с архитектурой amd64. Следует скачать соответствующий пакет данных для своей системы:

wget https://go.dev/dl/go1.17.8.linux-amd64.tar.gz
tar -C /usr/local/ -xzf go1.17.8.linux-amd64.tar.gz

Необходимо убедиться, что пользователь добавил следующие строки в файл ~/.zshrc:

#go variables
export GOPATH=/root/go-workspace
export GOROOT=/usr/local/go
PATH=$PATH:$GOROOT/bin/:$GOPATH/bin

После того, как пользователь добавил эти строки, файл zshrc можно загрузить с помощью команды «source», после этого – можно продолжать дальше. Если все было сделано верно, команда «go version» выдаст пользователю результат – «1.17.8».

source ~/.zshrc
go version
Подробное руководство по httpx

Установка httpx

Установка инструмента также возможна путем клонирования репозитория github и использования «makefile» для компиляции, но есть и более простая альтернатива. Можно использовать команду «go install», чтобы сделать то же самое:

go install -v github.com/projectdiscovery/httpx/cmd/httpx@latest
Подробное руководство по httpx

После этого пользователь сможет запустить инструмент. Чтобы проверить тот факт, что установка прошла успешно, можно вызвать меню справки.

httpx --help
Подробное руководство по httpx

Основы

Инструмент принимает данные STDIN для сканирования. Можно запустить «пустую» проверку, которая просто доберется до сервера и ничего не сделает, а затем – такую же проверку, но изменив некоторые базовые параметры.

  • -title: показывает заголовок веб-страницы;
  • -status-code: отображает код ответа; код 200 – все в порядке, в то время как код 404 – ошибка при получении ответа;
  • -tech-detect: обнаруживает процессы, связанные с открытием и функционированием веб-страницы;
  • -follow-redirects: включает перенаправление – происходит сканирование следующей страницы.
echo "http://testphp.vulnweb.com" | httpx
echo "http://testphp.vulnweb.com" | httpx -title -status-code -tech-detect -follow-redirects
Подробное руководство по httpx

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

httpx -l list -title -status-code -tech-detect -follow-redirects
Подробное руководство по httpx

Перечисление субдоменов с помощью subfinder и сканирования

Subfinder – это еще один инструмент, разработанный ProjectDiscovery. Он обнаруживает субдомены (поддомены), используя пассивные методы (без обращения к целевому сайту), перечисляет их. Пользователь может передать STDOUT Subfinder в httpx и просканировать все субдомены следующим образом:

subfinder -d vulnweb.com | httpx -title -status-code -tech-detect -follow-redirects
Подробное руководство по httpx

Content probe

Существуют различные модули, которые могут улучшить способы отображения ответов, они называются пробами («probe»). Например, стоит взглянуть на эти пробы:

  • -sc: показать код состояния HTTP-ответа;
  • -path: проверить, существует ли указанный путь.
httpx -l list -path /robots.txt -sc
Подробное руководство по httpx

httpx также может быть запущен с помощью Docker. В данном случае пользователь передает список всех субдоменов как STDIN в httpx.

cat list | docker run -i projectdiscovery/httpx -title -status-code -tech-detect -follow-redirects
Подробное руководство по httpx

Есть различные пробы, которые помогают просматривать более подробные результаты:

  • -location: веб-сайт, на который был перенаправлен запрос; здесь можно проследить, как http становится https;
  • cl: отображает длину содержимого результирующей веб-страницы;
  • ct: тип содержимого результирующей веб-страницы; в основном HTML.
echo "http://google.co.in" | httpx -sc -cl -ct -location
Подробное руководство по httpx

Некоторые пробы будут полезны для аналитиков ИБ и проведения углубленного анализа:

  • -favicon: извлекает mmh3 хеш файла favicon.ico;
  • rt: показывает время отклика;
  • server: отображает версию сервера и сборку;
  • hash: показывает хеш содержимого веб-страницы.
echo "http://testphp.vulnweb.com" | httpx -favicon -rt -server -hash sha256
Подробное руководство по httpx
  • probe: отображает статус одного сканирования (успешное/неудачное);
  • ip: отображает IP-адрес веб-сервера;
  • cdn: отображает CDN/WAF, если есть.
echo "https://shodan.io" | httpx -probe -ip -cdn
Подробное руководство по httpx
  • lc: отображает количество строк на просканированной веб-странице;
  • wc: отображает количество слов на просканированной веб-странице.
echo "http://testphp.vulnweb.com" | httpx -lc -wc
Подробное руководство по httpx

Content comparers

В инструменте доступны различные компараторы, которые помогают сократить список выходных данных. Это очень полезно для ускорения и упрощения анализа. Вот некоторые из них:

  • -mc: сопоставляет код HTTP-ответа с кодами, указанными в списке;
cat list | httpx -mc 200,301,302 -sc
Подробное руководство по httpx
  • -mlc: соответствует количеству строк с предоставленными входными данными;
cat list | httpx -mlc 110 -lc
Подробное руководство по httpx
  • -cl: отображает длину содержимого веб-страницы;
  • -ml: сопоставляет длину содержимого с предоставленными входными данными и отображает только результаты, соответствующие длине содержимого.
cat list | httpx -ml 3563 -cl
Подробное руководство по httpx
  • -mwc: соответствует количеству слов и отображает только результаты с тем же количеством слов;
cat list | httpx -mwc 580 -wc
Подробное руководство по httpx
  • -ms: отображает только те результаты, в которых текст на странице соответствует указанной строке; в данном примере загружаются страницы с надписью «login» в тексте;
cat list | httpx -ms "login"
Подробное руководство по httpx
  • er: извлечь регулярные выражения; отображает только те результаты, в которых результирующие страницы соответствуют предоставленному шаблону регулярных выражений; примером регулярного выражения является \w, которое сравнивает предоставленную строку с выводом результирующей страницы.
echo "http://testphp.vulnweb.com" | httpx -er "\w test"
Подробное руководство по httpx

Можно увидеть выходные данные, такие как «u test» и «o test». Инструмент отфильтровал текст и отобразил его в выходных данных:

Подробное руководство по httpx

Content filters

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

  • fc: код фильтрации; инструмент отображает только коды состояния, не перечисленные в «fc» (в примере указан код 404, поэтому видно только код 200);
cat list | httpx -sc
cat list | httpx -sc -fc 404
Подробное руководство по httpx
  • fl: фильтрует длину содержимого; в примере указано, что следует показать все выходные данные, кроме 16 и 12401;
cat list | httpx -cl -fl 16,12401
Подробное руководство по httpx
  • fwc: фильтрует количество слов; в примере указано, что следует показать все выходные данные, кроме 3 и 580;
cat list | httpx -wc -fwc 3,580
Подробное руководство по httpx
  • flc: фильтрует количество строк; в примере указано, что следует показать все выходные данные, кроме 2 и 89;
cat list | httpx -lc -flc 2,89
Подробное руководство по httpx
  • fs: фильтрует выходные данные с помощью указанной строки; в примере указано слово «test», поэтому отображаются веб-страницы, не содержащие строку «test»; эта строка будет показана только в тексте на веб-странице;
cat list | httpx -fs test
Подробное руководство по httpx
  • -ffc: фильтрует фавиконы; отображаются выходные данные с символами, которые не соответствуют «-215994923»;
cat list | httpx -favicon -ffc -215994923
Подробное руководство по httpx

Скорость сканирования и паузы

Существуют различные модули, которые позволяют пользователю изменять скорость сканирования или регулировать ее.

  • t: указывает на количество потоков, используемых для сканирования; значение может достигать 150; по умолчанию установлено – 50;
  • -rl: определяет ограничение скорости в запросах в секунду;
  • rlm: определяет ограничение скорости в запросах в минуту.
cat list | httpx -sc -probe -t 10 -rl 1 -rlm 600
Подробное руководство по httpx
  • -timeout: для прерывания сканирования в указанные секунды;
  • -retries: количество повторных попыток перед прерыванием сканирования.
cat list | httpx -sc -probe -threads 50 -timeout 60 -retries 5
Подробное руководство по httpx

Просмотр ответов и запросов

Httpx обрабатывает и отправляет http-запросы в режиме реального времени, а затем анализирует результаты. Эти запросы и соответствующие ответы также можно просмотреть. Например,

  • debug: показывает запросы и ответы веб-страницы в CLI;
echo "http://testphp.vulnweb.com" | httpx -debug
Подробное руководство по httpx
  • debug-req: отображает исходящий HTTP-запрос;
  • debug-resp: отображает соответствующий HTTP-ответ.
Подробное руководство по httpx
  • stats: отображает текущий статус сканирования, включая процент его завершения;
cat list | httpx -stats
Подробное руководство по httpx

Фильтрация для осуществления SQL-инъекций

Как известно, некоторые типы SQL-инъекций отражаются в выводе кода. Можно обнаружить такие места, отфильтровав выходные данные веб-страницы. В SQLi, основанных на ошибках, происходит сбой, который отражается на странице с выходными данными. Как можно увидеть в приведенной ниже команде, пользователь применил фильтр «-ms» для сравнения и поиска таких страниц. В идеале хакер может воспользоваться списком входных данных и аналогичным образом найти уязвимости для внедрения SQL. В приведенном ниже выводе, где находится vuln, httpx отображает название этого веб-сайта.

echo "http://testphp.vulnweb.com" | httpx -path "/listproducts.php?cat=1’" -ms "Error: You have an error in your SQL syntax;"
Подробное руководство по httpx

Фильтрация для осуществления XSS

Возможность Reflected XSS отражается в выходных данных веб-страницы.

Подробное руководство по httpx

Хакер может указать целый список веб-сайтов, а затем список путей для проверки наличия Reflected XSS в группах. В приведенном ниже примере используется модуль «-ms», который сопоставляет текстовое содержимое выходной веб-страницы с предоставленными входными данными. Поскольку в выходных данных отображается Reflected XSS, инструмент отображает название веб-страницы, на которой наблюдается эта уязвимость.

echo "http://testphp.vulnweb.com" | httpx -path "/listproducts.php?cat=<script>alert(1)</script>" -ms "<script>alert(1)</script>"
Подробное руководство по httpx

Фаззинг веб-страниц

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

  • path: путь/список путей для проверки;
echo "http://testphp.vulnweb.com" | httpx -probe -sc -path "/login.php"
Подробное руководство по httpx

Вывод файлов

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

  • o: сохраняет результаты в текстовом файле;
cat list | httpx -sc -o /root/results.txt
cat results.txt
Подробное руководство по httpx

Те же результаты могут быть сохранены и в других форматах:

  • csv: сохраняет результаты сканирования в формате CSV; сканирование по умолчанию включает в себя почти все возможные проверки содержимого;
cat list | httpx -sc -csv -o /root/results.csv
cat results.csv
Подробное руководство по httpx
  • -json: сохраняет результаты сканирования в формате json; сканирование по умолчанию включает в себя почти все возможные проверки содержимого;
cat list | httpx -sc -json -o /root/results.json
Подробное руководство по httpx
  • -srd: сохраняет соответствующие HTTP-ответы (с именем: «URL.txt») в пользовательском каталоге;
cat list | httpx -sc -o /root/results.txt -srd /root/responses
cat /root/responses/rest.vulnweb.com.txt
Подробное руководство по httpx

Настройка TCP/IP

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

  • pa: проверяет все IP-адреса, связанные с одним и тем же предоставленным хостом; часто один и тот же веб-сайт использует несколько IP-адресов для разных целей;
echo "http://hackerone.com" | httpx -pa -probe
Подробное руководство по httpx
  • p: сканирует указанные порты либо в виде списка (в формате «80, 443), либо путем указания абсолютного диапазона (в формате «1-1023»);
echo "http://hackerone.com" | httpx -p 22,25,80,443,3306 -probe
Подробное руководство по httpx

POST Login

Httpx можно применять для отправки POST-запросов. Это пригодится для входа на страницу и просмотра ответов. Например, страница /userinfo.php – хакер может войти в систему с помощью учетных данных «test:test» и просмотреть данные. Соответствующий запрос в пакете burp suite выглядит следующим образом:

Подробное руководство по httpx

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

  • x: указывает параметры HTTP-запроса (GET, POST, PUT);
  • H: предоставляет пользовательские заголовки для отправки;
  • body: указывает дополнительные данные в «теле» запроса, которые будут отправлены.

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

echo "http://testphp.vulnweb.com" | httpx -debug-resp -x post -path "/userinfo.php" -H "Cookie: login=test%2Ftest" -body "uname=test&pass=test"
Подробное руководство по httpx

Проверка HTTP OPTIONS

Опция «-x all» проверяет все HTTP OPTIONS (методы запроса) и отображает, какие параметры разрешены на веб-странице. Это отличный метод для тестирования на проникновение. Как видно, все опции доступны для использования на веб-сервере.

echo "http://testphp.vulnweb.com" | httpx -x all -probe
Подробное руководство по httpx

Маршрутизация через прокси-сервер

Маршрутизация HTTP-запросов также может быть осуществлена через пользовательские прокси-серверы. Например, если бы пользователь отправлял запросы через burp suite, он мог бы использовать модуль «-http-proxy» и указать пункт назначения. То же самое можно сделать и с прокси-сервером socks в формате «socks5:127.0.0.1:9500».

И, как можно видеть, запрос теперь фиксируется посредством прокси.

echo "http://testphp.vulnweb.com" | httpx -x all -probe -http-proxy http://127.0.0.1:8080
Подробное руководство по httpx

Заключение

Цель статьи состоит в том, чтобы подробно рассказать о модулях и опциях, доступных в httpx. Читатели могут ознакомиться с официальным репозиторием для получения дополнительной информации здесь.

Автор переведенной статьи: Harshit Rajpal.

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

Об авторе Игорь Б

Представитель редакции CISOCLUB. Добавляю статьи на сайт.
Читать все записи автора Игорь Б

Добавить комментарий

Ваш адрес email не будет опубликован.