Admin
Администратор
Часть 1; fuzzing для сбора скрытых endpoints и дальнейшей эксплуатации API
Digital legacy это не просто наследие компании.
Это следы которые остаются и часто разрабами забываются.
Может они уже недоступны публично или вовсе деактивированы.
Мы понимаем где кроется опасность.
Далеко не только в банальном овертейке таких легаси доменов а в абузе логики или мисконфигурациях о которых я писал уже ранее.
Некоторые админы оставляют очень важные /api/, /v1/, /v2/, /auth/, /oauth/, /token, /login, /openid/, /swagger, /openapi, /api-docs, /redoc, /docs и тп.
Вот такие мы сегодня будем искать.
А вообще в цикле статей и эксплуатацию затронем.
Всему свое время.
Содержание
- Исторические 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 мог пройтись по домену и субдоменам-
Код:
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 признакам;
- Дополнительные; скрытые или иначе расположенные пути;
В свою очередь они позволяют далее автоматически найти
- Маршрутизацию и параметры;
- Публичные auth или login токены;
Bash:
curl -k https://hub.param.com.tr/api/v2/api-docs -o openapiv2.json
В практическом смысле это открывает возможности для полного API маппинга.
Это приведет к выявлению незаточенных под авторизацию точек, и быстрой подготовки сценариев тестирования для генерации запросов или фаззинга по параметрам.
Вот этим и займемся в следующих частях этого цикла.