..-------------------------------..
.. Again Wind0ws fucking? ..
.._______________________________..
Content:
I - Локальное переполнение буфера в explorer.exe
|- введение
|- описание уязвимости
|- заключение
II - Ошибки в выполнение команд “dir” и “del”
III– Ошибки в организации файловых систем NTFS (compressed volume) и FAT32
IV -The End!?
__________________________________________________________________________
I- Введение:
Для начала хочу немного погрузиться в историю. Если точнее - в Апрель
2000 года. Тогда в багтреке промелькнуло сообщение о новой уязвимости
в explorer.exe. При попытке доступа к файлу, расширение которого
больше 160 символов, происходило переполнение буффера. Самое же
неприятное заключалось в том, что злоумышленник мог попытаться передать
такой файл на ftp-сервер, работающий под управлением Win98, тем самым
аварийно завершив работу удалённой машины.
Помню, что после этого ещё было сообщение о переполнении буффера при
доступе к директории, содержащей в себе большое количество вложенных
папок. Все известные уязвимости, связанные с организацией файловой
системы, были исправлены в последующих версиях семейства Windows.
Программисты Microsoft создали ограничения на длину названия и
расширения файлов, папок и ярлыков.
|- Описание уязвимости:
Совсем недавно я занимался поиском новых методов переполнения буффера
при попытке доступа к файлу/папке/ярлыку с большим именем. Я хотел
обойти ограничения программистов Microsoft. Потратив большое количество
времени, я всё же добился своего (кто ищёт, тот всегда найдёт ;).
Конечно далеко не идеальный вариант, к тому же до сих пор не до конца
исследованый мной (времени не хватает).
Всё описанное ниже я тестировал на Windows XP [ENG] [Version 5.1.2600]
без SP, Windows XP [RU] [version 5.1.2600] + SP1, и на Win2k [ENG] +
SP 1,2 (по идее на WinMe и Win98,95 также должно работать).
При многократном посещении какого-либо сетевого ресурса (например,
\\server\soft), создаётся так называемый “Сетевой ярлык”. К примеру,
при использовании команды “explorer \\server\music” будет создана
одноименная ссылка. Теперь, для полноценного понимания сути уязвимости
нам понадобиться ещё один сервер (желательно находящийся в твоей сети).
На нем должна существовать скрытая папка (в нашем случае это будет
xxx$).
----------------------------------------------------------------
!!!! ВАЖНО !!!! Сервер должен работать под линуксом !!!!!
(непонятно почему, но если машина работает под Win, то ничего не
происходит ;-/
----------------------------------------------------------------
Предположим,что путь к этой папке будет выглядеть так: "\\server\xxx$".
Для доступа к этому ресурсу мы будем использовать команду “explorer
[путь]”. Теперь запускаем "cmd.exe" и набираем:
---
> explorer \\Server\xxx$%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20
%20%20%20%20%20%20%20%20%20%20%20%20%20
---
Число последовательностей “%20” - около 270 [примерно 850 символов].
Точное-необходимое количество мне было лень высчитывать – я не мазохист
;) Теперь жмём “enter”, после чего сразу вылетает ошибка:
_________________________
|Windows Explorer |
|Can't access this folder |
|Path is too long. |
|_________________________|
Explorer.exe ругнулся на слишком длинный путь. Но не смотря на это
попытался открыть эту директорию! Теперь идём сюда: "explorer
\\server\". В результате мы увидим новую сетевую папку, но на самом
деле это всего лишь ярлык на ресурс к которому мы только что попытались
получить доступ. Её название будет выглядеть примерно так:
“xxx$%20%20%20%20%20%20%20…” (Explorer отображает неполный путь).
Теперь при попытке доступа к этому ярлыку (например, если попробовать
выделить его правой кнопкой мыши), explorer.exe начнёт сыпаться
критическими ошибками. Подробнее, можешь ознакомиться с ними, нажав
“Debug” :) Вот так вот всё непросто и во многом непонятно. Я попытался
максимально подробно всё расписать. Если же кто-то не понял, или у
кого-то не получилось, то можете взглянуть на наглядный пример –
видео-ролик:
http://sunlimited.ru/defaced/files/example.avi [4.62 Mb] - качество не
идеальное, но всё же.
Заключение:
- Скорее всего эта уязвимость может рассматриваться только как
локальное переполнение буффера в Explorer.exe. Способа использования
её как удалённую я не нашёл.
- Найденная мной уязвимость не столь опасна, так как может быть
использована лишь при некоторых обязательных (пока что непонятных)
условиях (например, сервер под никс). Но представляет небольшую
ценность из-за того, что мне удалось обойти ограничения, связанные
с длинным именем ярлыка (в данном случае).
- \\server\xxx$ взят лишь для примера (так как видео я снимал именно
для этого имени). На самом же деле не обязательно обращаться к
скрытой папке, да и тем более существующей :)
Команда должна выглядеть так:
“explorer \\[сервер]\[любая папка]%20%20….[около 850 символов]
- Я не очень понимаю почему переполнение буффера происходит тогда,когда
пользователь обращается к этому ярлыку, а не во время его создания
explorer'ом. Также пока остаётся загадкой то, почему данная
уязвимость не работает при доступе к компьютеру, на котором
установлена любая OS из семейства Win. Всё это будет выяснено в
ближайшее время.
- Об этой уязвимости не будет сообщено в багтрек по разным причинам.
II - Ошибки в выполнение команд “dir” и “del”:
Тестировалось на Windows XP [ENG] [Version 5.1.2600] без SP, Windows
XP [RU] [version 5.1.2600] + SP1, Win2k [ENG] + SP 1,2.
При работе с cmd.exe я заметил то, что почти все команды проверяют
длину данных, которые передал пользователь (в качестве параметра или
названия файла/папки к примеру). При попытке послать, например, такой
запрос:
“md f:\%20%20%20%20…..[примерно 270 раз]”
cmd.exe ругнётся: “The full path of [название папки] is too long”. Но в
результате тестирования оказалось, что не все отвечают подобным
образом.
dir \\Server\xxx$%20%20%20%20%20 [около 850 символов]
del \\Server\%20%20%20%20 [около 850 символов]
При выполнении этих двух команд cmd.exe просто вылетает не сказав ни
слова :) Хочу заметить, я не считаю это потенциальной уязвимостью,
однако это весьма интересное явление. Не очень понятно почему
программисты MS так вольно обошлись с этими командами. А ведь даже
маленькая и на первый взгляд несерьёзная ошибка может обойтись очень
дорого ;)
III– Ошибки в организации файловых систем NTFS (compressed volume) и FAT32
Тестировалось в WinXP Home/Proffesional [ENG] and [RU] version
5.1.2600 + SP1 на файловых системах NTFS (compressed volume) и FAT32.
Ошибка возникает при создании директории с именем какого-либо девайса,
например:
C:\>mkdir aux
[Неверно задано имя папки.]
А вот если мы добавим слэш:
C:\>mkdir aux\
То директория с заданым именем будет создана. Но при работе с такой
папкой через Explorer.exe никакие операции выполнить будет невозможно
[переименовывание, удаление и т.д.]. Аналогично дело обстоит со всеми
остальными dos-девайсами. Всего их 11 штук, поэтому если в корне
создать 11 директорий с такими именами, то жить будет не очень
удобно ;)
Девайсы: con, prn, aux, com1, com2, com3, com4, nul, lpt1, lpt2, lpt3
Удалять их нужно точно так же - со слэшем:
C:\>rmdir aux\
Это тоже не очень значительная ошибка, но как и любая другая, она
заслуживает внимания. Может быть использована в программах-заподлянках.
IV - The End!?
После “вынужденного” присоединения MS к сообществу OpenSources,
количество описаний подобных ошибок в багтреках резко возрастёт.
Всё тайное станет явным ;) И, возможно, после многократных патчей,
семейство Win станет достаточно крепким и надёжным :] Большинство
подобных ошибок уже исправлено, но всегда есть возможность придумать
новые пути к достижению цели.
Всё, на этом мы хотим закончить наш скромный обзор ;)