网站地图    收藏   

主页 > 后端 > 网站安全 >

无耻的驱动加载法 - Windows操作系统 - 自学php

来源:自学PHP网    时间:2015-04-17 18:32 作者: 阅读:

[导读] from : http : //www.debugman.com/read.php?tid=614方法一: 替换win32k . sys在 2k3 的系统下ZwSetSystemInformation禁止了用户模式下加载驱动,只允许SMSS . exe加载win32k . sys。于是我们可以利用一下这个特点...

from : http : //www.debugman.com/read.php?tid=614

方法一: 替换win32k . sys
在 2k3 的系统下ZwSetSystemInformation禁止了用户模式下加载驱动,只允许SMSS . exe加载win32k . sys。于是我们可以利用一下这个特点:
1. 注入SMSS . EXE
2. 打开SeLoadDriverPrivilege权限
3. 把原始的win32k . sys改名
4. 复制我们的驱动到systemrootsystem32下
5. 在SMSS . EXE中加载\SystemRoot\System32\win32k . sys
6. 把\SystemRoot\System32\win32k . sys改名
7. 把原始的win32k . sys文件改名改回去

方法二: 利用第三方驱动程序的漏洞
这类驱动应该挺多的,我们可以选择一些装机量大的驱动来进行此项工作,如某某著名的杀毒软件即存在本地权限提升漏洞。。。获得了ring0权限再用ZwSetSystemInformation加载就万事大吉了

方法三: 感染随系统启动的驱动程序
此法类似于病毒感染,但需要等到下次系统重启才能拿到控制权,需要一些PE知识,这个我就不多说了。

这里顺便再说说通过ZwSetSystemInformation其实也是可以建立Device的,由于ZwSetSystemInformation加载驱动时传给DriverEntry的DriverObject指针是错误的,因此我们不能用它来创建Device , 但我们可以自己分配一个DriverObject来创建,如下:

NTSTATUS
DriverEntry (
IN PDRIVER_OBJECT DriverObject ,
IN PUNICODE_STRING RegistryPath
)
{
NTSTATUS ntStatus = STATUS_SUCCESS ;
UNICODE_STRING ntUnicodeString ;
UNICODE_STRING ntWin32NameString ;
PDEVICE_OBJECT deviceObject = NULL ;
ULONG i ;

DriverObject = ExAllocatePoolWithTag ( NonPagedPool , sizeof ( DRIVER_OBJECT ), clAS ); // 分配DriverObject

RtlZeroMemory ( DriverObject , sizeof ( DRIVER_OBJECT ));

RtlInitUnicodeString ( & ntUnicodeString , NT_DEVICE_NAME );

ntStatus = IoCreateDevice (
DriverObject ,
0 ,
& ntUnicodeString ,
0x8800 , //设备类型必须为自定义的
FILE_DEVICE_SECURE_OPEN ,
TRUE ,
& deviceObject );

if ( ! NT_SUCCESS ( ntStatus ) )
{
DbgPrint ( "Couldnt create the device object " );
return ntStatus ;
}

// 注意,需要我们自己来清除INITIALIZING标志,否则设置不能打开
ClearFlag ( deviceObject -> Flags , DO_DEVICE_INITIALIZING );

DriverObject -> MajorFunction [ IRP_MJ_CREATE ] = CreateClose ;
DriverObject -> MajorFunction [ IRP_MJ_CLOSE ] = CreateClose ;

// 注意,必须要给IRP_MJ_CLEANUP分派一个DispathRoutine, 否则在设备关闭的时候就会挂
DriverObject -> MajorFunction [ IRP_MJ_CLEANUP ] = CreateClose ;

DriverObject -> MajorFunction [ IRP_MJ_DEVICE_CONTROL ] = DeviceControl ;

// 注意,必须是Global符号连接, 否则程序退出后连接会消失
RtlInitUnicodeString ( & ntWin32NameString , L "\DosDevices\Global\RkrTest" );

ntStatus = IoCreateSymbolicLink (
& ntWin32NameString , & ntUnicodeString );

if ( ! NT_SUCCESS ( ntStatus ) )
{
DbgPrint (( "Couldnt create symbolic link " ));
IoDeleteDevice ( deviceObject );
}

return ntStatus ;
}

如果你高兴的话在分配空间的时候分配多一点,把OBJECT_HEADER也算上,这样可以避免某些软件扫描DriverObject的对象头时挂掉 .

相应的用CreateFile时打开时应像这样指定“\\ . \Global\SymbolLink

还有哪些无耻的办法大家可以讨论一下

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论