Предисловие
Не удалось прогрузить медиа
Всех приветствую, с вами YmbMember
Ровно месяц назад я зарегистрировался на этом форуме и выпустил свою первую статью https://forum.LIMB.cc/threads/980/ . В этой статье мы рассмотрели архитектуру AEM и базовый тулкит. Я обещал, что будет продолжение, где мы уже на практике рассмотрим как эксплуаьтровать с aem_hacker. Так вот, этот момент настал
Важно! Если хотите нормально ознакомится с топиком пентеста AEM систем, сперва прочитайте первую часть
Вступление
Для сегодняшней статьи я просто с shodan’a брал рандомные сайты и пихал их в aem hacker. Поэтому, если вы хотите попрактиковаться ищите таргеты в поисковых системах. Уж поверьте, там очень много уязвимых приложений.
CRXDE Lite/CRX
Начнем с сочного и несложного. Найденная открытая панель CRXDE Lite
Не удалось прогрузить медиа
Не удалось прогрузить медиа
Что нам это дает вы уже и так знаете. При любых правах можно уже просмотреть структуру репозитория и конфиги. Довольно критично, не так ли? Если вы попали в панель без авторизации, то будете иметь права пользователя [email protected]. Т.е: только jcr:read (права на чтение)
Но настоятельно рекомендую попробовать побрутить креды и войти от имени admin (если можно).
Если вы вошли от имени admin - вы выиграли эту жизнь. У вас есть абсолютно ВСЕ права jcr:all. Вы можете играть с репозиторием как пожелаете.
Не удалось прогрузить медиа
Но я заметил, что на многих таргетах панель для входа отсутствует, потому что AEM в основном даёт доступ только от имени anonymous.
Но не отчаиваемся =))
CreateJCRNodes
Не удалось прогрузить медиа
Если на сайте был найден POSTServlet, то есть шанс получить права на создание JCR Nodов и страниц на сайте
Postservlet Позволяет создавать, изменять, удалять nod’ы и их свойства
Без авторизации такое доступно довольно редко. Если aem_hacker смог сбрутить креды, то вы выиграли эту жизнь как и я. Давайте попытаемся создать страницу
Не удалось прогрузить медиа
теперь посмотрим в crxde lite, получилось ли это сделать
Не удалось прогрузить медиа
Действительно, создали. Но хотелось бы отметить, что даже если мы авторизованы, то не часто можно создать страницу в любой директории, в основном только в /content или /content/usergenerated/.
Оставим им молодого трезини на память
Не удалось прогрузить медиа
Страница сияет ярко
Брут учетных данных. userinfoservlet и LoginStatusServlet
Прежде чем приступать к топику брута учетки для дальнейшего продвижения в системе, разберемся зачем же нужны эти servleт’ы
userinfoservlet отдает информацию о текущем авторизованном пользователе. А точнее:
* логин
* его группы
* другое (email, имя и т.д…) (если настроено)
LoginStatusServlet выдает информацию о статусе текущего пользователя (аутентифицирован или нет). Используется интерфейсом AEM
Не удалось прогрузить медиа
Если хоть один из них торчит наружу (а я такое вижу почти со всеми таргетами), то это нам дает идеальную возможность побрутить креды от души через заголовок Authorization: Basic. Через этот заголовок брут очень приятный, ибо по дефолту для него нету настроенных rate limit’ов и прочих ограничений
Если креды валидны, вы увидите информацию о текущем пользователе и вышеперечисленную инфу (пример с userinfoservlet)
Не удалось прогрузить медиа
А вот так выглядит ответ при валидных данных в LoginStatusServlet
Не удалось прогрузить медиа
DeafultGetServlet
Не удалось прогрузить медиа
Об этом я уже писал в прошлой статье. Часто в метаданных храниться интересная информация, поэтому настоятельно советую смотреть чуть ли не каждую страницу на наличие сочной информации. В POC в референсах вы можете увидеть более серьезные находки, нежели чем у меня. Но давайте я вам покажу что-то из своих недавних находок
Не удалось прогрузить медиа
На некоторых страницах на сайте в метаданных лежали корпоративные почты. Я не знаю, как они определили куда именно их пихать, но тем не менее. Поэтому я и советую смотреть каждую страницу на наличие JCR метаданных
GQLServlet
GQLServlet нужен для обработки запросов в формате GQL. Он позволяет делать поиск по репозиторию AEM, включая внутренние пути
Поисковой запрос строим в параметре query= . Всего есть 5 поисковых фильтра
path: искать только в указанной папке (и её вложенных).
type: вернуть только узлы определённых типов (можно несколько через запятую).
order: сортировка по свойствам. - перед именем — по убыванию, + или без знака — по возрастанию.
limit: ограничение на количество результатов. Можно указать диапазон (10..20), только начало (10..) или только конец (..20). Если указано одно число — вернёт максимум столько.
name: фильтр по имени узла. Можно использовать маски * (любая последовательность) и ? (один символ).
Основные из них это path и type. Для того чтобы искать внутри репозитория нужно знать синтаксис. Он предельно прост. Вот примеры:
path:content (позволяет выполнять поиск в директории /content)
path:content/dir1/dir2 (поиск в директории content/dir1/dir2)
для того чтобы воспользоваться сразу двумя фильтрами, используем %20 как разделитель
path:content%20limit:1 (выдаст 1 результат)
type тоже очень важный фильтр. вот что можно указать, чтоб получить чувствительные данные. Список самых важных по моему мнению выделил в список
Code:
type:cq:Page страницы сайта
type:cq:PageContent контент страницы — поиск чувствительных полей, пропущенной авторизации
type:nt:unstructured часто хранят кастомные настройки, скрипты, которые могут содержать уязвимости
type:rep:User пользователи
type:rep:Group группы и роли. Будем знать, кого стараться атаковать нужно наибольше
Не удалось прогрузить медиа
type:cq:Template : шаблоны страниц — могут содержать баги, ведущие к RCE/XXE
type:cq:ClientLibraryFolder : JS/CSS — возможность анализа подключенных скриптов
type:nt:file : файлы — иногда содержат чувствительные конфиги
Вот например поиск в системной папке /apps на поддомене samsung:
Не удалось прогрузить медиа
Не удалось прогрузить медиа
Таким образом мы можем выполнять поиск по всему сайту. Для этого есть масса применений. Например, если сайт был дописан своим функционалом, можем получить доступ к важным путям да и впринципе делать очень заряженную разведку. Никакие katana и waybackurls вам это не заменят =))
QueryBuilderFeedServlet
Помните в первой части мы рассмотрели QueryBuilderJsonServlet? QueryBuilderFeedServlet очень похож на своего старшего брата. Он как и QueryBuilderJson возаращает инфо о JCR Nodах, но без характеристик. Они используют один и тот же QueryBuilder API внутри, поэтому синтаксис параметров абсолютно одинаковый.
Ссылка на документацию: https://experienceleague.adobe.com/en/docs/experience-manager-65/content/implementing/developing/platform/query-builder/querybuilder-api?utm_source=chatgpt.com
Останавливаться на этом не будем, читайте первую часть.
Заключение
Вы привыкли, что в моих статьях эту часть можно не читать. Но тут бы я хотел чтобы вы не игнорировали последние слова. Почти все знания об пентесте AEM какие есть на просторах интернета есть только благодаря Mikhail Egorov. Я прикреплю его доклады в референсы, обязательно посмотрите
В этой статье я хотел дополнить то что есть на просторах интернета, я не хотел нудно и кратко пересказывать то что уже есть. Информации в сети довольно мало. Поэтому я прикреплю парочку очень годных по моему мнению статей, с какими вам бы стоило ознакомиться. Напоследок могу пожелать удачи и попросить прочитать все референсы
Референсы
Мат. от Mikhail Egorov:
Не удалось прогрузить медиа
Не удалось прогрузить медиа
Не удалось прогрузить медиа
AEM hacker - approaching Adobe Experience Manager webapps in bug bounty programs
The document outlines a presentation by security researcher Mikhail Egorov on vulnerabilities in Adobe Experience Manager (AEM) web applications, emphasizing their susceptibility in bug bounty programs. It details various techniques and tools used for discovering and exploiting security...
Не удалось прогрузить медиа
www.slideshare.net
Другие:
Не удалось прогрузить медиа
How to get RCE on AEM instance without Java knowledge
Before explaining how I was able to perform remote code execution on one of Adobe Experience Manager instance at bug bounty program let me…
Не удалось прогрузить медиа
medium.com
https://www.pentestpartners.com/security-blog/quick-wins-with-adobe-experience-manager/
https://labs.withsecure.com/publications/securing-aem-with-dispatcher
Не удалось прогрузить медиа
U.S. Dept Of Defense disclosed on HackerOne: AEM misconfiguration...
Hello Team, I was able to access sensitive information by appending `/.1.json` to certain URLs on ████Specifically, by visiting the following URL, I was able to obtain a JSON response that contained all the templates and files present in the web root due to AEM misconfiguration: █████████...
Не удалось прогрузить медиа
hackerone.com
👍83
🔥19
😁11
👏27
😢11
LIMB