• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Часть 1; fuzzing для сбора скрытых endpoints и дальнейшей эксплуатации API

akulapera

HDD-drive
Пользователь
Регистрация
28.08.2025
Сообщения
48
Реакции
57

Digital legacy это не просто наследие компании.
Это следы которые остаются и часто разрабами забываются.
Может они уже недоступны публично или вовсе деактивированы.

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

Некоторые админы оставляют очень важные /api/, /v1/, /v2/, /auth/, /oauth/, /token, /login, /openid/, /swagger, /openapi, /api-docs, /redoc, /docs и тп.

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

Содержание
  • Исторические paths
  • Фаззинг эндпоинтов
  • Проверка статусов
  • Вывод к следующей части
Исторические paths
В прошлых статьях я затрагивал уже поиск исторических путей.
Таргет у нас тот же.
Начинаем.

Сначала мы получим данные с помощью gau-
Bash:
~/go/bin/gau таргет.ком > *.txt


Лучше всегда сохранять в файл т.к. Массивы будут большие и мы будем как обычно дедуплицировать списки из разных источников.

Теперь таким же образом запускаем waybackurls-
Bash:
~/go/bin/waybackurls таргет.ком > *.txt


Теперь их необходимо уникализировать потому что результаты могут быть разными.
Очевидно но все же сортируем-
Bash:
cat 1.txt 2.txt | sort -u > 3.txt


Получается вот такое количество уникальных строк-


Мы использовали gau и waybackurls чтобы быстро собрать полный список исторических URL.
Они связанны с целевым доменом.
И еще собрали эндпоинты, которые больше не связаны с действующим сайтом.
Это помогает выявить скрытые; забытые или доступные для гостей пути к API, которые могут быть недоступны для обнаружения при стандартнм сканировании.

Фаззинг эндпоинтов


Получив все эти 9332 строк нам надо в первую очередь выделить те, которые педставляют вес в данном кейсе.
В самом начале мы выделили какие нас интересуют.
Выделяем строки по ключевым словам-
Bash:
egrep -i '/api/|/v[0-9]+/|/auth/|/token|/login|/oauth|/openid|/swagger|/openapi|/api-docs|/docs|/redoc|/admin' timetr.txt \
| sort -u > trurlstarg.txt


Такой манипуляцией на выводе получится уже 297 строк


Эти 2 шага нужны для того чтобы отсеить ненужные нам ендпоинты из 9к+ строк.
Это позволит сфокусироваться на тех, которые могут привести к документации; самим api хукам; функционалу.

Теперь можно перейти к самому фаззингу чтобы попробовать найти скрытые пути.
Для начала нам нужно создать вордлист, чтобы fuff мог пройтись по домену и субдоменам-
Bash:
cat <<EOF > apiwl.txt
swagger.json
swagger.yaml
openapi.json
openapi.yaml
v2/api-docs
api-docs
swagger-ui
docs
redoc
api
v1
v2
auth
login
token
openid
admin/api
internal-api
debug
EOF


Отличие от исторического поиска в том что fuff будет искать скрытые; нежелательные пути и фаззить нетипичные констркции путей.

Собрав спсиок ключевых слов мы переходим к активной эннумирации директорий по каждому домену и субдомену таргета-
Bash:
ffuf -u https://targ.com.tr/FUZZ -w apiwl.txt -mc 200,301,302 -t 40 -o trapipth.json


Если были собраны субдомены в список как у меня в прошлой статье то пускаем в работу весь список-
Bash:
while IFS= read -r sub; do
[ -z "$sub" ] && continue
echo "FFUF -> root on $sub"
/usr/bin/ffuf -u "https://$sub/FUZZ" -w /home/kali/apiwl.txt -mc 200,301,302 -t 20 \
-o "/home/kali/ffuf_out/${sub}_root.json" -of json

echo "FFUF -> /api on $sub"
/usr/bin/ffuf -u "https://$sub/api/FUZZ" -w /home/kali/apiwl.txt -mc 200,301,302 -t 20 \
-o "/home/kali/ffuf_out/${sub}_api.json" -of json

sleep 0.2
done < /home/kali/targsub.txt


Вот они наши находки-


Все что проходит фаазинг сохраняется в указанную нами директорию в формате .json-


По окончанию нам нужно уложить все relevant url из .json aайлов в один .txt-
Bash:
mkdir -p /home/kali/candidates
for f in /home/kali/ffuf_out/*.json; do
[ -s "$f" ] || continue
/usr/bin/jq -r '.results[]?.url' "$f" 2>/dev/null >> /home/kali/candidates/ffuf_hits_raw.txt || true
done


Проверка статусов
Создав список URL его необходимо еще раз просеить, но на предмет интересующих активных энпоинтов и отбросить редайректы.
Запускам проверку через httpx-
Bash:
~/go/bin/httpx -l /home/kali/candidates/ffuf_hits.txt -mc 200,301,302,403 -t 25


После получения списка активных путей выделяем приоритетные по ключевым словам-
Bash:
grep -iE 'auth|login|token|swagger|openapi|redoc|docs|internal' /home/kali/candidates/ffuf_hits.txt


Сортируем для удобства по разным категориям-
Bash:
grep -i 'auth\|login\|token' /home/kali/candidates/ffuf_hits.txt > authtr.txt
grep -i 'swagger\|docs\|openapi' /home/kali/candidates/ffuf_hits.txt > apitr.txt
grep -i 'internal\|debug' /home/kali/candidates/ffuf_hits.txt > inttr.txt

Мои категории получились такими
Аuth - все авторизационные пути;
Api - очевидно из названия категории;
Internal -все эндпоинты для внутреннего пользования;

Проверяем все 3 файла на активность хостов-
Bash:
cat authtr.txt | ~/go/bin/httpx -mc 200,301,302,403 -title -content-length -tech-detect -t 25
cat apitr.txt | ~/go/bin/httpx -mc 200,301,302,403 -title -content-length -tech-detect -t 25
cat inttr.txt | ~/go/bin/httpx -mc 200,301,302,403 -title -content-length -tech-detect -t 25




Получилось что за эти несколько шагов были собраны интересные для реверса URL.
Это олотая жила по причине того, что мы можем изучить спецификации; запросы и пулы хуков; протестировать апи и реверсить флоу; провести маппинг запросов и построить схему взаимодействий
Вывод к следующей части
На выходе мы получили
  • Исторические и живые URL;
  • Отфильтрованные кандидаты по API признакам;
  • Дополнительные; скрытые или иначе расположенные пути;
Это дает готовую базу для быстрой аналитики открытых спецификации через swagger или openapi.

В свою очередь они позволяют далее автоматически найти
  • Маршрутизацию и параметры;
  • Публичные auth или login токены;
Пробуем получить доки
Bash:
curl -k https://hub.param.com.tr/api/v2/api-docs -o openapiv2.json


В практическом смысле это открывает возможности для полного API маппинга.
Это приведет к выявлению незаточенных под авторизацию точек, и быстрой подготовки сценариев тестирования для генерации запросов или фаззинга по параметрам.
Вот этим и займемся в следующих частях этого цикла.
 
Есть одно замечание
тут ты фильтруешь по этим статусам "ffuf -mc 200,301,302". Не лучше ли определить, какой статус для "not found" - например, 400–403 (иногда может быть и 200)
и указать это через параметр -fc 401,402,403,404?
 
можно уточнить (я серьезно) - что здесь нового, кроме общеизвестного?
Без издевки, без обид - реально интересно.
 
можно уточнить (я серьезно) - что здесь нового, кроме общеизвестного?
Без издевки, без обид - реально интересно.
Можно.
Ничего нового просто описано прикольно в контексте нескольких частей.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх