免费教程_免费网赚教程_破解版软件-寂涯网络学习基地

当前位置: 主页 > 系统综合 > 系统安全 > 完美突破win7 UAC

完美突破win7 UAC

时间:2012-02-28 16:42来源:未知 整理:寂涯网络 点击:

微软在vista及其后的系统中,加入了一项新的技术,即UAC(UserAccountControl, 用户账户控制),它要求用户在执行可能会影响计算机运行的操作或执行更改影响其他用户的设置的操作之前,提供权限或管理员密码。当以administrator用户执行程序的时候, 默认都是普通权限,只有以administrator账户运行才是管理员权限。如,向windows文件夹和program files文件夹复制文件默认情况下都是不允许的,除非你提权。微软的UAC真的那么完美吗?有突破的方法吗?下文介绍一种完美突破UAC的方法,用户完全无法发觉 (排除杀软干扰)。
鉴于vista的UAC糟糕设计,微软在WIN7系统重新设计了UAC,让UAC提示少了很多。 所以微软提供了几组组件绕过UAC。这几个组件都要用到。具体有4点,简单介绍下。
1.某些程序在运行时直接获得管理员权限,UAC不会提示。虽然微软并没有提供白名单功 能,但是系统内部应该存在微软自己设置的白名单。
2.某些特定进程可以创建特定的COM对象,且不会出现UAC提示。虽然进程并没有提升权 限,但是我们可以用创建的COM对象做需要管理员权限才能做的事情。
3.某些需要权限才能创建的COM对象(IFileOperation)。这些对象如果被创建成功,就具有admin权限了。
4.在win7默认启用的一个特性,这个特性并不检测需要提权的代码的出处它只检测这段 代码运行在哪个进程内。且子进程与父进程有相同的权限。
还有一点,不属于UAC的范畴,在本方法突破UAC必不可少。程序在加载dll的时候会遵循一个规则:如果被加载的dll在系统” KnownDLLs” 列表中那么直接从system32目录查询 文件,如果不在” Known Dlls “中,就优先从当前目录查询。
我们要找到这样一个程序:在启动的时候就能获得高权限(符合第一点),并且目标程 序加载的0匕不在” KnownDlls”列表中,然后,我们将特殊的0匕复制到目标程序所在的 目录中并改为目标程序加载的DLL的文件名,再运行目标程序,这是特殊的DLL就会被加载。 而这样的程序一般在巧#咖32目录及其子目录下,巧#咖32目录就不用想了,因为即使 找到了符合要求的程序,其加载的dll必定在system32目录下,你必须要删除它加载的DLL, 然后复制特殊的DLL到system32目录下并改名。但是,即使有了高权限,你也无法删除 system32目录下的系统0匕文件。所以目标程序只能在巧#棚32的子目录下。还好有个完 全符合要求的程序:c:\windows\system32\sysprep\sysprep.exe,其加载的 DLL 是 cryptbase.dll,这个dll不在” Known Dlls”列表中。
在普通权限下,是没有权限往系统目录中写文件(创建文件夹可以)。现在我们的主要目标是将 CRYPTBASE.dll 复制到 c:\windows\system32\sysprp\sysprp. exe 目录下。
结合第二点和第三点,有个方法可以满足我们的需求。我们可以创建IFileOperation 这个《^对象来实现文件的复制,但是这样会弹出UAC提示,显然,弹出UAC不是我们想要 的结果。第二点说过,一些特定的进程创建0011对象的时候,不会弹出UAC提示。我发现, 这些进程一般是微软提供的explorer, exe, taskmgr. exe, notepad, exe等系统程序。
结合上面说的,我们就可以完美突破win7的UAC 了。具体的方法是:注入 6乂口10^1.616(或者taskmgr.exe等程序),让其创建IFileOperation对象并操作 1卩1160口6^UAC11对象将特殊的0匕复制到c:\windows\system32\sysprp目录下,并改名为 CRYPTBASE. dll, 之后运行c:\windows\system32\sysprp\sysprp.exe,这个程序会主动加载 CRYPTBASE.dll,我们完全可以编写个CRYPTBASE.dll(即特殊的dll)中,由于是sysprep.exe 加载的的dll,所以这个dll拥有管理员的权限。就可以突破UAC了,不会有任何提示,完全静默的。
首先,我们要注入到explorer.exe中,可以用创建远程线程和dll注入结合的方法。 创建远程线程加载我们的0匕,我注入的dll的文件名是mydll.dll。主程序的功能是注入代码,具体的见附件中的0&@&^2工程,其主要代码如下:
[code]
typedef struct _inj
{
pLoadLibraryW myloadlibraryw; pFreeLibrary myfreelibrary; wchar_t * szFullDllName;
}inj, *pinj;
这里是一些变量的声明,这里就省略了
//查找explorer进程,并且以process_all_access的权限打开 hSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPR0CESS, 0); if(hSnap==INVALID_HANDLE_VALUE)
{
return 0;
}
if(FALSE==Process32First(hSnap, &pey)) return 0;
do
{
if(NULL==wcscmp(L^explorer. exe^, (const wchar_t *)&pey. szExeFile))
{
if(NULL==(hproc=OpenProcess(PROCESS_ALL_ACCESS, FALSE, pey. th32ProcessID))) return 0;

本页地址 http://www.jybase.net/xitonganquan/20120228785.html

百度搜索更多

谷歌搜索更多

顶一下
(1)
25%
踩一下
(3)
75%
------分隔线----------------------------

评价:
昵称: 验证码:点击我更换图片
推荐内容
赞助商
赞助商


关于本站免责声明视频更新google百度地图视频地图RRS订阅

如有什么问题请在本站留言,或发邮件到 hxt167#foxmail.com