渗透测试中的用户降权

0x00 前言

带着问题去学习,我们为什么需要降权?

在渗透测试中,常常会遇到需要改变程序启动权限(分为提权和降权)的情况。

提权:是从普通用户权限到管理员权限和从管理员权限到system权限降权通常是指从system权限:降到普通用户权限(从管理员权限降到普通用户权限比较简单,方法很多),往往是为了操作当前用户的文件内容(如捕获桌面、操作注册表等)

本文将会介绍具体的降权方法(从system权限降到普通用户权限),理清其中的重点,并且开源一个小工具,用于判断进程

0x01 简介

学习四个点:

1、为什么要降权?

2、从管理员权限降到普通用户权限的方法?

3、从system权限降到普通用户的方法?

4、利用SelectMyParent实现提权和降权。

0x02 为什么要降权

使用system权限的进程可能会遇到以下问题:

1、无法获得当前用户的文件内容

例如无法捕获用户的屏幕

2、环境变量有差异

如以下环境变量:

  • APPDATA
  • Temp
  • USERDOMAIN
  • USERNAMW
  • USERPROFILE

cmd下可通过echo查看环境变量,例如查看环境变量APPDATA的命令为:

echo %appdata%

 

system权限下去查询,查询到的环境变量APPDATA为:

注:正常无法以system权限去启动cmd,我们这里通过psexec方式来

微软官网下载地址:http://download.sysinternals.com/files/PSTools.zip

下载完成后,我们打开压缩包,将里面的psexec.exe复制到System32文件夹下(64位用户请将psexec64.exe复制到SysWOW64文件夹下),然后以管理员身份运行命令提示符切换到psexec的目录下,输入"psexec -i -d -s cmd.exe"(64位用户类似),等待1~2秒后,就会出现以system权限运行的命令提示符了。在被启动的命令提示符里输入命令"whoami"并回车,会发现返回一条信息为"nt authority\system",说明此命令提示符已以本地系统的身份运行了。在任务管理器里查看,便会发现此进程的用户名是SYSTEM。

C:\Windows\system32\config\systemprofile\AppData\Roaming

渗透测试中的用户降权

 

 

 

管理员权限下去查询,查询到的环境变量APPDATA为:

C:\Users\Michael\AppData\Roaming

渗透测试中的用户降权

 

 

 

也可以通过API SHGetSpecialFolderPath 获取指定的系统路径,如APPDATA,也能发现权限不同导致的区别

c++代码如下:

#include <windows.h>
#include <Shlobj.h>
#include <iostream>

bool IsSystemPrivilegeCmp()
{
    static bool isSystemPrivilege = false;
    char* flag = "C:\\Windows";
    if (isSystemPrivilege)
    {
        return isSystemPrivilege;
    }
    char szPath[MAX_PATH] = { 0 };
    if (SHGetSpecialFolderPathA(NULL, szPath, CSIDL_APPDATA, TRUE))
    {
        printf("APPDATA Path:%s\n", szPath);
        if (memcmp(szPath, flag, strlen(flag)) == 0)
            printf("[+]I'm System Privilege\n");
        else
            printf("[-]Not System Privilege\n");
    }
    return isSystemPrivilege;
}

int main(int argc, CHAR* argv[])
{
    IsSystemPrivilegeCmp();
    return 0;
}

管理员权限执行:

渗透测试中的用户降权

 

system权限执行:

渗透测试中的用户降权

 

 

 

 

 

 

 

 

 

 

 

 

 
上一篇:阿里云轻量服务器Ubuntu图形化界面安装及桌面优化


下一篇:ORACLE 获取程序当前位置的方法