CHQ1d 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 在渗透测试中,经常需要更改程序启动的权限(包括提升和降低权限)。 权限提升包括从普通用户权限到管理员权限和从管理员权限到系统权限。在渗透测试中,权限缩减通常是指从系统权限缩减为普通用户权限(从管理员权限缩减为普通用户权限的方式有很多种),常用于操作当前用户的文件内容(如抓取桌面、操作注册表等)。). 本文将介绍减少权限(从系统权限到普通用户权限)的具体方法,明确重点,开启一个判断进程权限的小工具。 0x01 简介 本文将介绍以下内容: 为什么要降低功率? 将管理员权限降为普通用户权限的方法 将系统权限降为普通用户权限的方法 使用SelectMyParent实现权限的提升和降低 注: 测试系统:Win7 0x02 为什么要降权 使用系统权限的进程可能会遇到以下问题: 1、无法获得当前用户的文件内容 例如,无法捕获用户的屏幕。 2、环境变量有差异 例如以下环境变量: APPDATA 临时雇员 终端监督程式(Terminal Monitor Program的缩写) 用户域 用户名 用户配置文件 Cmd可以通过echo查看环境变量,比如查看环境变量APPDATA的命令是: 回显%appdata% 在系统权限下,查询到的环境变量APPDATA是c:\ windows \ system32 \ config \ system profile \ APPDATA \ roaming。 在管理员权限下,查询到的环境变量APPDATA为C:\Users\a\AppData\Roaming。 如下图 通过API SHGetSpecialFolderPath获取指定的系统路径,比如APPDATA,也可以找到权限不同导致的差异。 c代码如下: #包括 #包括 bool IsSystemPrivilegeCmp() { 静态bool isSystemPrivilege=false char * flag=' C:\ \ Windows '; if (isSystemPrivilege) { 返回isSystemPrivilege } char SZ PATH[MAX _ PATH]={ 0 }; if(SHGetSpecialFolderPathA(NULL,szPath,CSIDL_APPDATA,TRUE)) { printf('APPDATA路径:%s\n ',SZ Path); if(memcmp(szPath,flag,strlen(flag))==0) printf('[]我是系统特权\ n '); 其他 printf('[-]不是系统特权\ n '); } 返回isSystemPrivilege } int main(int argc,CHAR* argv[]) { IsSystemPrivilegeCmp(); 返回0; } 如下图 注: SHGetSpecialFolderPath支持查询系统路径,可以在Shlobj.h中获取 如下图 3、注册表有差异 HKCU上的一些注册管理机构操作将被重定向到HKEY用户。系统默认值 如下图 0x03 从管理员权限降到普通用户权限的方法 1、runas cmd: 运行方式/用户:calc.exe 然后输入密码:123456。 calc.exe的权限就是用户a的权限 如下图 缺点: 等待用户手动输入密码不是自动的。 但是可以通过管道的方式实现自动密码输入,需要第三方工具Sanur。方法不具体介绍。 2、第三方工具:lsrunas 下载地址: http://www.verydoc.com/exeshell.html cmd: lsrunas.exe/用户:a/密码:123456/域:/命令:' calc . exe '/运行路径:c:\ 注: /domain:如果参数为空,则表示本地机器。 从管理员权限到普通用户权限,成功,如下图所示 3、第三方工具:CPAU 下载地址请参考我的github: https://github . com/3g student/From-System-authority-to-Medium-authority cmd: CPAU.exe-u a-p 123456-ex ' calc . exe '-CWD c:\ windows \ system32-lwp 注: 必须添加参数-lwp或-lwop,否则无法降低权重。 从管理员权限到普通用户权限,成功,如下图所示 4、powershell 代码如下: $uname='a ' $ pwd=convert to-secure string ' 123456 '-AsPlainTextForce $ cred=新对象系统。management . automation . PS credential($ uname,$pwd) 开始-进程-文件路径' calc . exe '-凭据$cred 5、c++ 使用API: CreateProcessAsUser 创建流程 0x04 从system权限降到普通用户权限的方法 注: 该测试的系统权限是通过漏洞获得的。 1、runas cmd: 运行方式/用户:calc.exe 然后输入密码:123456。 成功降级电源,但未能启动,如下图所示。 2、第三方工具:lsrunas cmd: lsrunas.exe/用户:a/密码:123456/域:/命令:' calc . exe '/运行路径:c:\ 同上,成功降级,但启动失败。 3、第三方工具:CPAU cmd: CPAU.exe-u a-p 123456-ex ' calc . exe '-lwp CPAU不支持系统权限启动,如下图所示 4、powershell 1、成功降级,但未能启动。 5、c++ 你可以使用迪迪尔史蒂文斯的工具SelectMyParent。 注: 代码还没有在github中分享,所以我上传到了我的github上,注明作者是Didier Stevens。 代码地址: https://github . com/3g student/From-System-authority-to-Medium-authority/blob/master/select my parent . CPP SelectMyParent: 用于用选定的父进程创建windows进程。 例如,要创建新的流程calc.exe,请使用SelectMyParent将新的流程calc.exe设置为流程winlogon.exe的子流程。 使用步骤: 1、获取进程winlogon.exe的pid 在我的测试系统中,进程winlogon.exe的pid是504。 2、启动SelectMyParent 参数如下: SelectMyParent.exe calc.exe 504 Calc.exe显示为winlogon.exe的子进程,如下图所示。 这种方法主要可以用来提高进程的隐蔽性,欺骗用户。 特别的地方: 因为子进程将继承父进程的权限,而winlogon.exe的权限是system,所以其子进程calc.exe的权限也将变成system。 如下图 也就是说,我们可以基于SelectMyParent实现以下权限提升和降低操作: 权限提升:从管理员权限到系统权限 去中心化:从系统权限到管理员权限 降权:从系统特权到普通用户特权 操作步骤: 1、获取进程pid cmd下获取过程pid的方法; 任务列表/v /fo列表 您可以获取每个进程对应的pid和权限(由用户名的值表示),如下图所示 为了便于测试,可以使用过滤来过滤掉具有特定权限的进程,比如过滤NT AUTHORITY\SYSTEM。 该命令如下所示: 任务列表/v /fo列表/fi '用户名eq NT权限\系统' 如果是获取普通用户权限的过程,可以将过滤后的用户名设置为whoami的返回结果。 2、使用SelectMyParent.exe 从管理员权限到system权限: 上面已经论证过了,不再赘述。 从system权限到admin权限: Tasklist分不清一个进程是管理员还是普通用户。 于是我通过C写了一个小工具,功能如下: 遍历过程 判断流程权限,如果是管理员权限就标记出来。 代码下载地址: https://github . com/3g student/From-System-authority-to-Medium-authority/blob/master/process authority . CPP 使用如下所示的工具。 从system权限到普通用户权限: 选择pid为3864的普通用户权限流程,创建的calc.exe权限也将拥有普通用户权限,如下图所示。 成功地将权限从系统权限降低为普通用户权限。 0x05 小结 本文对常用的减肥方法进行了测试,结论是部分条件减肥方法会失效。一般的做法是用SelectMyParent来减肥。 结合实际,一个遍历和判断流程权限的小工具是开源的,用来提高效率。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子