分享

玩转系统最强帐户——用System帐户登陆Windows

 江南烟雨梦 2010-09-03
玩转系统最强帐户——用System帐户登陆Windows
 
给Explorer.exe进程换件马甲

可能有人会感到困惑,因为SYSTEM帐户和我们常用的ADMINISTRATOR等帐户不同,它并不是Interactive(交互)用户组成员。不能像普通用户一样在登陆对话框中输入用户名和密码进行登陆。。。。。。不过别急,本文将会用另类方法帮助大家完成这个不可能的任务。

第一步:从
www./Utilities/PsExec.html 下载PsExec,解压到C:\中。用Ctrl+Alt+Del组合键打开任务管理器。结束Explorer.exe进程。

第二步:接着添加新任务,输入“CMD”回车,打开命令提示符。

第三步:在命令提示符中输入c:\PsExec -i -s -d explorer

当Explorer重启后,就已经进入了SYSTEM帐户环境。

如假包换,拿出人证物证

    不行?大家知道[HKEY_CURRENT_USER]根键实际是指向[HKEY_USERS\UserSID]的链接,此处的UserSID就是当前登陆帐户的SID,所以可以用如下方法进行验证:

    打开注册表,只要证明[HKEY_CURRENT_USER]是[HKEY_USERS\S-1-5-18]的链接即可(S-1-5-18就是SYSTEM帐户的SID),证明方法很简单,在[HKEY_CURRENT_USER]新建一个Good子项,然后刷新一下,再看看[HKEY_USERS\S-1-5-18]是否也出现了Good项,如果是则说明系统当前加载的就是SYSTEM帐户的用户配置单元。这是在打开开始菜单看看,用户名是不是也变成了SYSTEM?如果你还不信,就用微软提供的Support Tools(地址:
www.onlinedown.net/soft/21532.htm) 来试试吧!安装后运行Whoami就知道啦!

拥有特权何处不敢闯?

    在以SYSTEM登陆后,平时默认情况下无权访问的地方,现在就能如入无人之境了。

(一):任意访问注册表。

    打开注册表,现在可以无限制访问[HKEY_LOCAL_MACHINE\SAM]和[HKEY_LOCAL_MACHINE\SECURITY]

(二):任意访问文件夹。

    在资源管理器的菜单“工具”“文件夹选项”里设置显示所有文件(包括隐藏的系统文件),然后就可以无限制访问系统还原的工作目录c:\System Volume Information了。

刨根究底话原因

    大家知道,SYSTEM是比管理员帐户权限更高的系统内置帐户。但默认情况下无法直接在登陆对话框上以SYSTEM帐户登陆到windows桌面环境。实际上SYSTEM早已盘踞在系统中了,连负责用户验证的Winlogon、Lsass等进程都是以SYSTEM身份运行的,谁还能有资格验证SYSTEM呢?既然SYSTEM早已在系统中,所以只需以SYSTEM帐户身份启动外壳程序Explorer.exe,就相当于用SYSTEM登陆WINDOWS了。



SYSTEM帐户启动的实质

其实不管用哪种方法,其本质都一样。都是利用SYSTEM登录会话里已有的某个进程A,帮助我们创建一个子进程B,进程B会自然而然地在SYSTEM登录会话里运行--从而具有SYSTEM帐户的特权。


这里提到登录会话(Logon Session)的概念。

这个概念比较抽象,甚至连MSDN里都语焉不详。这里我们且不去管它(将会在后续的文章里给大家细述这个抽象概念)。在这里,我们只需要了解:登录会话用来代表特定安全主体(Security Principal)的一次登录实例,在Windows里,很多对象的访问权限,是基于登录会话,而非帐户本身。

盆盆注释 登录会话和帐户之间的关系,有点类似于进程和程序。登录会话是一个动态的概念,有生命周期,帐户则是一个静态的概念。登录会话有自己的SID。通常来说,我们很少接触到登录会话,但是在某些特定的场合,这个概念非常重要。


每个进程,都必须运行在特定的登录会话里。

这里就有一个问题:在交互式用户登录之前,Windows系统里已经运行了一些进程(最起码是Winlogon进程),这些进程显然也应该运行在登录会话里,这就是所谓的SYSTEM登录会话,它所代表的安全主体就是SYSTEM帐户。

在Windows的安全机制里,特定登录会话里的某个进程所启动的其他进程,也会运行在该登录会话里,从而继承SYSTEM帐户的安全上下文。

《以System帐户身份运行应用程序的三种办法》这篇文章所描述的方法,都是运用这种原理。例如借助At命令以SYSTEM帐户身份启动某个任务,实际上该任务是由Task Scheduler服务启动的,而Task Scheduler服务的宿主进程svchost正是运行在SYSTEM登录会话


Task Scheduler服务的进程svchost所在的登录会话ID(Logon Session ID)是0x0-3e7,这就是代表SYSTEM登录会话。

而采用Sysinternals Suite里的Psexec命令,道理也一样,实际上启动进程的是PsexecSvc服务,该服务的进程运行在SYSTEM登录会话。

如何看到SYSTEM下的进程


在Windows 2000/XP下,这个不是什么问题。然而在Windows Vista下问题就来了。如果企图用AT命令启动某个Local SYSTEM进程,就会警告说不能和用户进行交互,哪怕加上/Interactive参数也不行!


原来在Windows Vista下,存在一个会话0隔离的问题。而AT命令所对应的Task Scheduler服务运行在会话0,而会话0是不能和用户进行交互的。


注意,会话和登录会话,是两码事。


原来在会话0里,并没有WinSta0这个窗口站。天哪,又来了一个窗口站的概念,嗯,先不用管它,这里只需理解,窗口站用来保护进程的用户界面。只有WinSta0这个特殊的窗口站才可以接受用户的鼠标、键盘事件,才能和用户进行交互。


在Windows系统里,如果没有特别指定,SYSTEM登录会话里的进程,将会默认运行在Service-0X0-3E7$窗口站里,所以无法和用户进行交互。


所以很显然,要让以SYSTEM权限运行的进程,能够和用户进行交互,必须满足以下条件:
1. 必须不能运行在会话0下,例如可以运行在当前用户所在的会话下(例如会话1、2等)
2. 该SYSTEM进程必须运行在WinSta0窗口站。

而对于IT Pro来说,我们可以借助Mark Russinovich所写的Psexec工具,让任意指定的进程运行在SYSTEM权限下。

而对于Windows Vista来说,其实有好些Local SYSTEM进程本身运行在WinSta0下(非会话0),例如Winlogon进程、某个csrss进程,还有我们大家很熟悉的UAC提示对话框(consent进程),都运行在SYSTEM下,但是可以和用户进行交互。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多