-
-
[原创]PsExec 在当前会话下启动系统权限进程原理
-
发表于:
2017-12-8 11:17
7429
-
[原创]PsExec 在当前会话下启动系统权限进程原理
事情的起因是这样的,前两天去xxx公司面试,被问道这样一个问题:PsExec是怎么以系统权限运行程序的?PsExec确实是用过的,记得在看windows internals这本书的时候,比着书上的例子启动了个系统权限注册表程序。当时也没答上来,回来后想来想去那么就分析一下它到底是怎么实现的,于是就有了这篇文章。
首先在当前Session下以系统权限运行一个程序的命令行如下:
psexec -i -d -s regedit.exe
打开IDA先从参数入手,看一下这几个参数是怎么处理的
可以看到它们被记录到了三个个全局变量里面,通过ida的交叉引用发现一处使用的地方
简单分析sub_404920函数后,开头内容如下:
通过这些信息,明确了一点,PsExec从资源文件中提取出了一个服务,并创建且运行了该服务程序。也就是说PsExec是通过服务程序获得系统权限的。下图分别是释放服务程序文件和创建启动服务程序的
我们知道,服务程序是运行在session0下的,而待运行程序(regedit.exe)是要运行在当前session下的,如果只是简单的在服务中运行这个程序,那肯定是行不通的,必然是经过了某个步骤,之后又创建了待运行的程序,继续分析,看这个程序究竟是怎么被创建起来的。
接下来函数创建了一个跟服务程序通信的命名管道
在通信的数据中保存了PsExec接收的命令行参数,包括传入的-d –i –s 和待运行的程序等。如下图
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!