Как я провел свою первую external entity attack или XXE уязвимость.
Часть первая.
Как сейчас помню, была середина июля. Это был очередной проект, который начался пару недель назад. Было уже проделано много различных сканирований и попыток проникнуть внутрь периметра, но пока это сделать не удавалось.
Бесспорно, мы потихоньку продвигались вперед. Были найдены оставленные разработчиком файлы. В одном из них содержались имя пользователя и пароль в md5, который был успешно расшифрован. Пароль был элементарным.
Это дало возможность зайти в личный кабинет нескольких сервисов. Заглядывая немного вперед, скажу, что это было довольно большое веб приложение, состоящее из многих сервисов, объединённых доменной авторизацией, и при некоторой удаче этот пользователь мог бы подойти и при подключении к RDP. Да, при сканировании внешнего периметра на нескольких ip адресах был найден открытый 3389 порт, это означало то, что можно было бы успешно подключиться и попытаться делать уже что-то внутри сети, хотя бы с правами обычного пользователя. Никто пока и не думал об учетной записи доменного администратора, которая бы ускорила получение доступа к критичным узлам сети и полной ее компрометации.
Но, как вы понимаете, чуда не случилось, это был богом забытый пользователь с урезанными до минимума правами, которых разве что хватало только для успешной авторизации в некоторых веб сервисах, дальше приложение на каждое нажатие не туда кричало, что у вас недостаточно прав. Говорить о подключение к RDP не приходилось.
Но благодаря этой информации, найденной в файле, который уютно расположился на одном из многочисленных филиалах компании в азиатском ее сегменте, я смог развить дальнейшую атаку. Да, тщательней проводите первоначальный сбор информации об объекте, у него могут быть филиалы по всему миру. И если все внимание приковано к основному домену, это совершенно не значит, что какой-то азиатский программист не забудет какой-нибудь критичный файл в открытом доступе, потому что у него начался обед, а потом он решил пойти домой и совершенно забыл про то, что у него там лежит то, что остальные видеть уж точно не должны.
Этот файл нам дал понять, что, используя учетную запись пользователя в этом приложении, можно было войти в разные сервисы веб приложения. Что довольно хорошо сказалось для дальней компрометации сети компании.
Но это было лишь только начало конца… конца для тестируемого веб приложения и внутренней корпоративной сети компании.
А конец всему начался с API веб приложения, возможно мы бы в итоге нашли другую точку входа, если бы у нас было больше времени, но время поджимало, нам надо было как можно скорее проникнуть за внешний периметр и начать развивать атаку уже внутри сети.
И так как же это произошло - спросите вы?
Ну, как вы понимаете, 24 часа в сутки шли бесконечные сканирования директорий в различных субдоменах, которые мы нашли сами, и в тех, которые нам любезно предоставил заказчик, количество потоков в Dirsearch все увеличивалось, и иногда нас просили их уменьшить, чтобы сервисы заказчика продолжали стабильно работать. Но в один прекрасный момент Dirsearch нашел один замечательный файл, (как позже выяснилось) назывался он swagger-ui.html и отдавал 200 ответ, это означало, что к нему можно было успешно обратиться, например, через браузер, и он должен отобразиться, что я успешно и сделал. И да, в этот раз маленькое чудо все-таки произошло: как оказалась, этот файл содержал красивую обертку к API, чтобы далекий от программирования человек мог все-таки тестировать и выполнять какие-то манипуляции без написания кода. В общем-то вы сами можете найти все в google, но кому лень, то вот ссылка о том, что это за штука
Чтобы вы правильно понимали, это дало мне очень большое представлении об API тестируемого приложения. Оставлять такое в открытом доступе разработчикам явно не следовало, это был просто клондайк информации о том, как все устроено внутри.
Можно, например, из токена авторизации узнать чей это сеанс и даже зашифрованный в md5 пароль этого
пользователя, что давало очень многое. Это как я
узнал, благодаря заранее найденному пользователю с паролем. Надо же мне как-то было тестировать их API, а, как вы понимаете, регистрация во внутренних сервисах компании была закрыта, и был только он, обделенный правами, но все-таки свой для системы.
Это была маленькая предыстория о том, как я подбирался к своей первой и незабываемой XXE.
Во второй части уже будет больше технической информации и скриншотов то, как я все-таки сделал так, что начал читать критичные логи фраймоворка, уязвимого для external entity attack (XXE).
Часть первая.
Как сейчас помню, была середина июля. Это был очередной проект, который начался пару недель назад. Было уже проделано много различных сканирований и попыток проникнуть внутрь периметра, но пока это сделать не удавалось.
Бесспорно, мы потихоньку продвигались вперед. Были найдены оставленные разработчиком файлы. В одном из них содержались имя пользователя и пароль в md5, который был успешно расшифрован. Пароль был элементарным.
Это дало возможность зайти в личный кабинет нескольких сервисов. Заглядывая немного вперед, скажу, что это было довольно большое веб приложение, состоящее из многих сервисов, объединённых доменной авторизацией, и при некоторой удаче этот пользователь мог бы подойти и при подключении к RDP. Да, при сканировании внешнего периметра на нескольких ip адресах был найден открытый 3389 порт, это означало то, что можно было бы успешно подключиться и попытаться делать уже что-то внутри сети, хотя бы с правами обычного пользователя. Никто пока и не думал об учетной записи доменного администратора, которая бы ускорила получение доступа к критичным узлам сети и полной ее компрометации.
Но, как вы понимаете, чуда не случилось, это был богом забытый пользователь с урезанными до минимума правами, которых разве что хватало только для успешной авторизации в некоторых веб сервисах, дальше приложение на каждое нажатие не туда кричало, что у вас недостаточно прав. Говорить о подключение к RDP не приходилось.
Но благодаря этой информации, найденной в файле, который уютно расположился на одном из многочисленных филиалах компании в азиатском ее сегменте, я смог развить дальнейшую атаку. Да, тщательней проводите первоначальный сбор информации об объекте, у него могут быть филиалы по всему миру. И если все внимание приковано к основному домену, это совершенно не значит, что какой-то азиатский программист не забудет какой-нибудь критичный файл в открытом доступе, потому что у него начался обед, а потом он решил пойти домой и совершенно забыл про то, что у него там лежит то, что остальные видеть уж точно не должны.
Этот файл нам дал понять, что, используя учетную запись пользователя в этом приложении, можно было войти в разные сервисы веб приложения. Что довольно хорошо сказалось для дальней компрометации сети компании.
Но это было лишь только начало конца… конца для тестируемого веб приложения и внутренней корпоративной сети компании.
А конец всему начался с API веб приложения, возможно мы бы в итоге нашли другую точку входа, если бы у нас было больше времени, но время поджимало, нам надо было как можно скорее проникнуть за внешний периметр и начать развивать атаку уже внутри сети.
И так как же это произошло - спросите вы?
Ну, как вы понимаете, 24 часа в сутки шли бесконечные сканирования директорий в различных субдоменах, которые мы нашли сами, и в тех, которые нам любезно предоставил заказчик, количество потоков в Dirsearch все увеличивалось, и иногда нас просили их уменьшить, чтобы сервисы заказчика продолжали стабильно работать. Но в один прекрасный момент Dirsearch нашел один замечательный файл, (как позже выяснилось) назывался он swagger-ui.html и отдавал 200 ответ, это означало, что к нему можно было успешно обратиться, например, через браузер, и он должен отобразиться, что я успешно и сделал. И да, в этот раз маленькое чудо все-таки произошло: как оказалась, этот файл содержал красивую обертку к API, чтобы далекий от программирования человек мог все-таки тестировать и выполнять какие-то манипуляции без написания кода. В общем-то вы сами можете найти все в google, но кому лень, то вот ссылка о том, что это за штука
Ссылка скрыта от гостей
. Чтобы вы правильно понимали, это дало мне очень большое представлении об API тестируемого приложения. Оставлять такое в открытом доступе разработчикам явно не следовало, это был просто клондайк информации о том, как все устроено внутри.
Можно, например, из токена авторизации узнать чей это сеанс и даже зашифрованный в md5 пароль этого
пользователя, что давало очень многое. Это как я
узнал, благодаря заранее найденному пользователю с паролем. Надо же мне как-то было тестировать их API, а, как вы понимаете, регистрация во внутренних сервисах компании была закрыта, и был только он, обделенный правами, но все-таки свой для системы.
Это была маленькая предыстория о том, как я подбирался к своей первой и незабываемой XXE.
Во второй части уже будет больше технической информации и скриншотов то, как я все-таки сделал так, что начал читать критичные логи фраймоворка, уязвимого для external entity attack (XXE).