如何用PSEXEC真的伤害自己—删除不可删除的注册表项以及其他

[原文发表地址] How to REALLY hurt yourself with PSEXEC - Deleting the Undeletable Registry Key and More

[原文发表时间] 2011-08-19 22:17

前不久,我安装了一些疯狂的开源的网络适配器虚拟软件。不要问。真是蠢到家了,我很开心地不停点击Yes Yes Yes,噢Yes,我知道,这就代表了不假思索地自伤,警告,确定,绝对,下一步,下一步,完成。

之后,它运行起来越来越不靠谱,于是就把它卸载了。不幸的是,他们的卸载程序并不能完全卸载整个程序,因为它只是卸载了卸载程序,然后剩下的都撒手不管了。 这让我的系统处于完全混乱奇怪的状态中,有一半连接着的虚拟网络配适器,感觉像是自杀。我每次试图卸载这些7(!)虚拟网络配适器,他们都会重启机器。即使用设备管理UI清除它们也没用。

现在只有两种办法,要么重装系统(因为已经是崩溃状态了所以需要一次彻底的重新安装),要么试试改动注册表,删除这些虚拟适配器。我应该算是技术员,而且已经准备重装系统了,所以即使打乱系统也没有什么关系了,于是我打开注册表。我用管理员身份运行,这样我就有(我认为)权限来删除任何东西。

我搜索了我要删除的适配器名称,当我想开始删除的时候,我又被提示的“禁止访问”驳回了。什么?!?我是权利十足的管理员诶!sudo能做一切!

管理员不是万能的,还有其他更高层的像SYSTEM这样的用户,他们能访问管理员不能访问的东西。想到我是在试图移除底层网络部件,所以即使被停止也很正常。

人们常问,什么是激发一个工程师最好的方法?告诉他某些事物是不可能的。我讨厌看到禁止访问。要我说,是别让它出现才对!所以我找到了SysInternal工具,也就是PsExec

如果有一个工具真正能做到“枪口下谈安全”的,那就是PsExec。当你发现用它已经伤害到你系统时,已为时已晚。多少粗大字体的言语或者恐怖警示的图片都不足以表达这工具有多危险。

不过,在这里要告诉你怎么愉快地使用它。哇!

psexec -s -i regedit.exe

你必须要以管理员的身份运行它。这行的意思是,“用SYSTEM账户运行此命令,让进程与桌面交互。”在运行此命令后,看一下任务管理器,检验regedit.exe:

Windows%20Task%20Manager%20(120)_3

现在,我可以删除注册表中几乎所有的东西。还有一个删除注册表值的方法就是,启动Windows安全模式,在那里编辑,不过这是常规管理员身份无法执行的。

还有些其他很棒的事,那就是你可以用PsExec远程运行进程(当我以SYSTEM身份运行时,感觉就像直接是在那台机器上操作一样),通过它提供一个服务,能自动远程安装,然后运行进程。

这就是它们运行的原理(已经不是什么秘密了):

PsExec允许通过使用SMB和管理员共享在远程系统上的隐藏文件来定向远程启动的可执行文件的输入和输出。有了这个共享,PsExec就会用Windows服务控制管理器API来启动远程系统上的PsExecsvc服务,并创建命名的管道与PsExec进行通信。这个命名的管道允许输入/输出重定位回已启动PsExec的系统。

比如:

psexec.exe \\REMOTECOMPUTER –i –u DOMAIN\username –p Password –d yourexe.exe

远程执行很有用,不过像这样进入系统终端(不要像SSH那样退出)其实更有用:

psexec \\remotecomputer cmd.exe

这就意味着你可以在远程电脑上自如运行命令,用一种SSH的方式。

C:\>hostname
HANSELMANLAPTOP
C:\>psexec \\REMOTECOMPUTER -u DOMAIN\Administrator cmd.exe
C:\>hostname
REMOTECOMPUTER

如果你不想远程控制桌面,只想简单地运行命令的话,这是个很强大很有用的东西。

不过用的时候一定要小心哦!