首页
社区
课程
招聘
[原创]PsExec 在当前会话下启动系统权限进程原理
发表于: 2017-12-8 11:17 7429

[原创]PsExec 在当前会话下启动系统权限进程原理

2017-12-8 11:17
7429

事情的起因是这样的,前两天去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 和待运行的程序等。如下图




[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 2
支持
分享
最新回复 (2)
雪    币: 3729
活跃值: (3852)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
感谢分享!
2018-6-27 10:47
0
雪    币: 1787
活跃值: (2045)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
收藏~!
2020-4-28 13:54
0
游客
登录 | 注册 方可回帖
返回
//