Admin
Администратор
2 часть. Находим API; Swagger; OpenAPI endpoints и точки эксплуатации.[PART: 2]
Bash:
curl -k -sS -o /tmp/swag_full.html https://hub.param.com.tr/swagger-ui head -n 200 /tmp/swag_full.html > swagg,html
Bash:
grep -oE 'https?://[^"'"'"']+\.js' swagg.html | sort -u
Bash:
for j in $(grep -oE 'https?://[^"'"'"' >]+\.js' swagg.html | sort -u); do
curl -k -sS "$j" \
| egrep -i 'openapi|swagger|/api/|token|auth' \
| sed -n '1,120p'
done
Все это можно сохранить в отдельный файл > jslist.txt и получить файлы или аргументы-
Bash:
cat jslist.txt | xargs -n1 -P8 -I% bash -c '
echo "=== % ===";
curl -k -sS --max-time 10 --range 0-8191 "%" 2>/dev/null | sed -n "1,160p" | egrep -i --color=auto "openapi|swagger|/api/|token|auth" || echo "(no hits in first 8KB)";
'
DevTools стоит использовать в процессе реверса флоу.
Логирование шагов в итоге даст еще ключи для поиска или вовсе полезные;критические данные.
Открывем https://hub.param.com.tr/ и нажимаем f12-
Вкладка Network - Preserve log - Fetch / XHR - обновляем страницу.
Поскольку страница защищена логином то рассмотрим гоствеой неавторизированный лог подробнее сохранив .har файл-
По запросам мы уже увидели AJAX.
Кроме этого каждый запрос к серверу по типу https://hub.param.com.tr/lib/ajax/service.php?sesskey=<...>&info=core_site_get_site_info
возвращает интересный JSON blob d виде m.cfg-
Дополниельно еще получаем там же указания на значения sesskey&apibase ответов.
Поскольку он такой не один это интересные параметры для разведки.
Добавив в список параметров снова проинспектируем .html-
Bash:
sed -n '1,400p' swagg.html | egrep -i 'apibase|M.cfg|sesskey|r.php|openapi|swagger|api-docs|/r.php/api' -n
Получаем верные направления и указания на расположение apibase - https://hub.param.com.tr/r.php/api и заголовки для поиска именно в apibase-
Bash:
APIBASE="https://hub.param.com.tr/r.php/api"
for p in openapi.json openapi.yaml swagger.json swagger.yaml swagger-ui api-docs \
v1/openapi.json v2/openapi.json v1/swagger.json v2/swagger.json \
docs redoc token auth login openid; do
u="$APIBASE/$p"
res=$(curl -k -s -o /dev/null -w "%{http_code} %{content_type}" --max-time 8 "$u")
printf "%-70s %s\n" "$u" "$res"
done
В итоге получили список директорий, но довольно скудный и без ответов 200.
Поэтому проапгрейдим пайплайн для более широкого поиска и выгрузке при нахождении подходязих страниц .json;.yaml-
Bash:
mkdir -p /home/kali/specs
while read -r u; do
out=$(curl -k -sS -w "%{http_code} %{content_type}" -o /tmp/last.body --max-time 10 "$u" 2>/dev/null)
code=$(echo "$out" | awk '{print $1}')
ctype=$(echo "$out" | cut -d' ' -f2-)
printf "%-80s %s %s\n" "$u" "$code" "$ctype"
case "$ctype" in
application/json*|application/*+json*|application/yaml*|text/yaml*|text/x-yaml*)
safe_name="/home/kali/specs/$(echo "$u" | sed -E 's#https?://##; s#[:/]+#_#g')"
mv /tmp/last.body "$safe_name"
echo " => SAVED: $safe_name"
jq -r '.paths? | keys[]' "$safe_name" 2>/dev/null | sed -n '1,20p' || head -c 200 "$safe_name"
;;
*)
rm -f /tmp/last.body
;;
esac
done < /home/kali/candidates2/ffuftargs2.txt
Анализ данных для эксплуатации
Итого еще в .har файле мы получили 11 bodie ответов.
Проанализировав их на application/json MIME мы можем найти довольно интересные пункты.
Самые внимательные заметили Moodle который указывает на обработку запросов AJAX-
Внутри них мы видим что сервер отдает нам json ответы которые содержат ендпоинты service.php; service-nologin.php; sesskey=... прямо в url.
До них доходят запросы и они записываются в браузер сессии.
Потенциально это значит что используя curl вполне можно дотянуться до спецификаций используя подставные значения в url без браузера или др. UI.
Сегодня мы лишь ищем api и потому не будет шалить и хулиганить подтверждая историю с подставными значенниями в url.
Ведь мы пришли к результату что сам AJAX RPC подбросил нам важных api&spec ендпоинтов таких как
/r.php/api;
/openapi.json;
/swagger.json;
/lib/ajax/service.php;
/edwiserreports/request_handler.php;
И др-
В качестве дальнейшего развития можно анализировать каждый ендпоинт и это мы рассмотрим в заключительной части цикла.
Скачивая .html версии и проходя этапы парсинга дополнительных ендпоинтов; файлов; конфигов; спецификаций; функций; хедеров и тд.
Таким образом от маленького маппинга в таком виде будет построена полноценная карта взаимодействий api
Последнее редактирование: