• Codeby web-security - Курс "Тестирование Веб-Приложений на проникновение с нуля" от команды codeby. Общая теория, подготовка рабочего окружения, пассивный фазинг и фингерпринт, Активный фаззинг, Уязвимости, Пост-эксплуатация, Инструментальные средства, Social Engeneering и многое другое. Подробнее ...

  • Мобильный клиент нашего форума для Android гаджетов доступен в Google Play Market по этой ссылке. Клиент можно скачать с нашего форума по этой ссылке. Последняя версия МК в нашем телеграм канале вот здесь

Статья Подборка трюков для Windows NTFS [Часть 1]

Tayrus

Grey Team
13.04.2017
273
383
#1
Я не являюсь автором статьи, только перевел, источник:
Код:
https://www.sec-consult.com/en/blog/2018/06/pentesters-windows-ntfs-tricks-collection/
ТРЮК 1: СОЗДАНИЕ ПАПКОК БЕЗ РАЗРЕШЕНИЙ (CVE-2018-1036/NTFS EOP)

В Windows, вы можете назначить “специальные разрешения” для папок, как разрешения, что пользователь может создавать файлы в папке, но не разрешается создавать папки. Примером такого является папка C:\Windows\Tasks\ где пользователи могут создавать файлы, но не могут создавать папки:



ACL можно обойти, как только пользователь сможет создавать файлы. Добавьте “::$INDEX_ALLOCATION” в конец имени файла, это создаст папку вместо файла, и Windows в настоящее время не включает проверку для этого случая.



Как показано выше, папка была успешно создана, и пользователь может создавать любые файлы или папки в этом каталоге(что может привести к повышению привилегий, если администратор или программа предполагает, что это невозможно выполнить из-за отсутствия разрешений)

ТРЮК 2: ОБХОД ОГРАНИЧЕНИЯ ПУТИ С АЛЬТЕРНАТИВНЫМИ ПОТОКАМИ ДАННЫХ

Вы возможно задаетесь вопросом, почему вышеупомянутая техника работала. В основном файлы на томе NTFS хранятся в форме:
Код:
<имяфайла>:<имяпотока>:<тип>
Если мы создадим файл с именем test.txt он будет внутренне храниться как test.txt::$DATA так как имя потока пустое и $DATA является типом по умолчанию. Первый трюк злоупотреблял тем, что тип может быть изменен на INDEX_ALLOCATION, который соответствует типу каталога и, следовательно, создает каталог. Однако также есть возможно хранить данные в другом потоке ( это называется альтернативным потоком данных – ADS). Если мы создадим например “тест.txt", то на самом деле создаться " тест.txt::$DATA " (имя потока пустое). Тем не менее, мы также можем написать “тест.txt: foo” или “тест.txt: foo:$DATA” (они равны, поскольку $DATA является типом по умолчанию). Различные имена потоков, например, используются для хранения происхождения файла. Если вы загружаете файл из интернета (или получаете его по электронной почте), windows автоматически добавляет Zone Identifier через имя потока. Например, если скачать " putty.exe", windows также создает “putty.exe:Zone.Identifier:$DATA” . Имена потоков можно увидеть если к команде dir добавить аргумент /R:



Как вы можете видеть, Zone Identifier не может быть прочитан с помощью команды type. Важное сообщение заключается в том, что мы можем хранить данные в ADS (включая приложения!). Например, putty.exe можно скопировать в ADS, а затем вызвать через wmic (прямой вызов невозможен):



Возможно вы спросите себя, зачем кому-то это делать? Прежде всего, ADS можно использовать для сокрытия данных (команда dir без параметра / r не будет отображать их; explorer.exe также не покажет их; позже мы увидим, как мы можем спрятаться даже от параметра / r команды dir...). Однако у ADS есть еще одно замечательное свойство - мы можем добавить ADS в папку. Чтобы иметь возможность сделать это, мы должны иметь разрешения "создания папки" в каталоге (и имя папки не должно быть числом). Важно то, что ADS в папке выглядит как файл из родительской папки!

Например, в Windows обычный пользователь не может создавать файлы в C:\Windows\ (в эту папку могут записывать только администраторы). Таким образом, возможно, что приложения предполагают, что файлам в C:\Windows\ можно доверять, потому что только администраторы могут создавать там файлы. Однако, C:\Windows\Tracing это папка, в которой обычные пользователи могут создавать файлы и папки – поэтому обычный пользователь может создать ADS на этой папке.

Допустим, пользователь записывает в файл C:\Windows\Tracing:test.dll. Eсли этот путь теперь передается в Windows API , который вычисляет базовую папку, этот API будет запускаться в конце пути и возвращаться назад, пока не будет найден первый“\". Тогда все, что осталось от"\", будет возвращено в качестве базовой папки. Для C:\Windows\Tracing:test.dll это вернет C:\Windows\ в качестве базовой папки, однако, как уже упоминалось, обычный пользователь не может создавать файлы в этой папке, но с помощью этого трюка мы создали файл, который выглядит так, как будто он хранится в C:\Windows!

Вот вывод различных функций Windows, которые вычисляют базовую папку (мы видим, что это всегда C:\windows):



Это поведение можно использовать для обхода некоторых белых списков приложений, но также можно обойти проверки безопасности в различных ситуациях, когда программист предположил, что достаточно проверить, хранится ли файл в определенной базовой папке, и предполагает, что только администраторы могут записывать в эту папку из-за установленного списка управления доступом.

Например, предположим, что приложение позволяет загружать данные, а загруженные данные хранятся в папке applicationFolder\uploadedData\ . Кроме того, приложение позволяет запускать скрипты / приложения из папки applicationFolder\ , но не из папки applicationFolder\uploadedData\ (методом черного списка). Если пользователь загружает файл с именем “:foo.ps1 ", система создаст ADS типа applicationFolder\uploadedData:foo.ps1 и этот файл будет храниться внутри applicationFolder\ и поэтому обойдет проверку безопасности.

Еще одним интересным фактом является то, что имена ADS могут содержать символы, которые обычно запрещены для имен файлов, таких как ” или * (вы должны создать эти файлы с помощью API Windows; cmd.ехе фильтрует эти символы):



Это само по себе может привести к ряду проблем (например: если Имя файла заканчивается на ” и путь закрыт ”). Однако другим интересным вектором атаки может быть XSS (или command injection). Предположим, что веб-сайт запущен на IIS , позволяет загружать файлы и подвержен CSRF. После успешной загрузки файла появится диалоговое окно с именем файла. Если имя файла не очищается, это может привести к XSS, однако имена файлов не могут содержать символы, такие как < или > (и поэтому мы не можем выполнить код JavaScript с ним). Но ADS может содержать эти символы, поэтому злоумышленник может попытаться отправить запрос на загрузку имени файла с ADS:



ТРЮК 3: СОЗДАНИЕ ФАЙЛОВ, КОТОРЫЕ НЕ МОГУТ БЫТЬ НАЙДЕНЫ С ПОМОЩЬЮ ПАПКИ “...”

Каждая папка содержит по умолчанию две специальные записи, а именно каталог “."который ссылается на текущею директорию и"..” который ссылается на родительский каталог. В Windows невозможно создать файлы / папки только с точками в имени, скорее всего, чтобы предотвратить атаки.



На скриншоте выше показано, что невозможно создать “...” или “....” папку. Однако это можно обойти с вышеуказанным ::$INDEX_ALLOCATION трюком:



Папка ” ... " была создана с вышеупомянутым трюком, однако, такие папки также могут быть созданы путем передачи имени дважды, как показано в“....” примере. Используя второй трюк, вы также можете хранить файлы или даже выполнять программы из этого места:



Как вы видите, вы не можете войти в папку только с именем (например: "cd ... ” или “cd ... \ ” или “cd ... \ ... ”не работает), так что вы действительно должны использовать синтаксис" cd...\...\". После этого вы можете создавать файлы в этой папке.
Кроме того, также невозможно открыть этот каталог из графического интерфейса (explorer.exe). Я столкнулся с двумя разными ситуациями. В некоторых случаях двойной щелчок по такой папке ничего не дает (вы остаетесь в текущем каталоге, и путь остается тем же), в других случаях вы остаетесь в папке, но путь в проводнике изменяется. Например, после” открытия " папки 17 раз она выглядит следующим образом (обратите внимание на каталоги “...” в пути):




Вы можете попытаться войти в папку, но вы не будете видеть файлы в папке в GUI. Кроме того, невозможно открыть папку, передав “C:\test\...\...\ ". При попытке удалить эту папку из графического интерфейса explorer.exe произойдет сбой. Обратите внимание, что поиск через cmd работает без проблем:



Тем не менее, большинство людей в настоящее время используют Powershell, и с Powershell вы не можете найти файл, потому что он застрянет в бесконечном цикле:



Я также проверил это с различными антивирусными продуктами, они, кажется, работают правильно (я разместил образцы вредоносных программ в этом каталоге и проверенные антивирусные решения нашли их). Некоторые из них до сих пор путают путь, например: при поиске вирусов внутри “C:\test\...\ "они искали в “C:\test \" вместо этого. Также код python с os.walk() кажется, работает правильно.
А на этом все). Остальные трюки переведу позже.
 
Последнее редактирование:
Вверх Снизу