关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客
权限提升简称提权,顾名思义就是提升自己在目标系统中的权限。现在的操作系统都是多用户操作系统,用户之间都有权限控制,我们通过 Web 漏洞拿到的 Web 进程的权限一般都是由一个权限很低的账号启动的,因此通过 WebShell 进行一些操作就会受到限制,为了减少这些限制,我们就需要将我们的权限提升到 “管理”。
既然是 “提权”,那么我们首先就得先来了解一下各个系统的权限组成,知道我们当前的权限,和我们目标达到的权限。
0x01:权限介绍 — Windows 篇
先说目标,Windows 提权一般是提权到 Administrator 权限或者 System 权限(这二者属于平级关系,拿到其一就等于拿到另外一个)。
Windows 系统中的用户账号一般分为以下几个,这几个里面不包含 System (服务最高管理员)权限:
-
本地普通用户 => 加入了 Users 组的用户
-
本地一般管理员 => 加入了 Administrators 组的用户,伪管理,需要绕 UAC 认证
-
本地最高管理员 => Administrators 组的 Administrator 用户(系统默认创建的),它不用经过 UAC 认证即可执行敏感操作
-
域内普通用户
-
域内管理员
0x0101:Windows 用户账号 — 本地普通用户
本地普通用户,就是在 Windows 电脑中本地新建的普通用户。没有管理员权限,一般很多操作都执行不了,需要管理员认证后才可以执行。在 Windows 用户组中,本地普通用户归属于 Users 用户组。
接下来,我们以一台 WindowsServer 2008 虚拟机为例,看一下如何查看、创建本地普通用户,以及该用户的一些权限限制。
1. 创建本地普通用户
首先,以管理员身份(Administrator)登录 Windows Server 机器。你可以通过调用 CMD 窗口然后输入 whoami
来确认自己的身份:
然后继续在 CMD 窗口中输入下面的命令,来创建本地普通用户:
net user test01 admin@123 /add
# test01 => 创建的普通用户的用户名
# admin@123 => test01 用户的登录密码
2. 查看本地普通用户
按照下图依次点击 “开始” => “管理工具” => “计算机管理”,打开 “计算机管理” 窗口:
然后点击 “本地用户和组” => “用户”,就可以看到我们刚刚创建的 test01 账户:
双击 “test01” 账户,查看 “隶属于” 信息,可以看到,该用户属于 Users 用户组,该组中的成员就拥有普通用户权限(系统中最安全的权限,不允许修改操作系统设置与用户资料):
3. 本地普通用户的权限介绍
现在我们切换登录的用户为 test01(test01 : admin@123
),然后同样打开 CMD 窗口,输入下面的命令:
whoami # 查看当前登录的用户
net user test02 admin@123 /add # 尝试以 Users 权限添加用户
如上,我们无法以本地普通用户的权限执行一些敏感操作。
当我们想执行一些敏感操作,比如关闭防火墙时,它还会弹出以下提示,要我们输入管理员密码才允许我们操作:
0x0102:Windows 用户账号 — 本地一般管理员
继续以这台 Windows Server 2008 R2 为例,我们切换用户,以管理员(Administrator)身份登录。然后打开 “计算机管理” 窗口(打开方式在上面这里就不写了)。
这里所谓的 “本地一般管理员” 就是指加入了 Administrators 用户组,但账户名称不是 Administrators 的账户。
1. 查看本地一般管理员
我们定位到 “计算机管理” 窗口中的 “本地用户和组” 中的 “Administrators” 组,双击打开可以查看组中的用户:
如上,当前组中有三个成员,一个叫 Administrator 是计算机默认创建的 “本地最高管理员”,然后这个 hacker 账户是我们初始化计算机(你刚刚安装操作系统)时添加进去的普通管理员账户,至于那个贼拉长的,笔者怀疑是加入了域后自动创建的,这个是后话,这里不管他。
2. 添加本地一般管理员
记住了哈,这里我们是以 Administrator 账户登录的,有足够的权限进行操作,你要是拿普通用户权限,这里你是没法操作的。
我们点击选中 “Administrators” 用户组,然后输入 "test01"(我们上一节中创建的普通用户),然后点击 ”检查名称“ 后选择 ”确定“ 就可以完成添加:
再次查看 Administrators 用户组中的用户,可以看到 test01 也在其中,那么至此,添加本地一般管理员就完成了:
3. 本地一般管理员权限介绍
那么我们现在再使用 test01 这个账号登录机器并执行下面几条命令:
whoami # 确认一下我们当前登录的账号
net user test02 admin@123 /add # 尝试添加账号
可以看到,哎嘿,我们还是不能添加用户。是我们的权限配置没生效吗,其实不是。我们得以 “管理员” 权限打开 CMD 窗口:
这里有个注意点,如果它弹出了需要输入管理员账号的弹窗,你输入 test01 这个账户的用户和密码也可以完成登录,因为我们前面已经将 test01 归属到 Administrators 用户组了。
如下,可以看到,在以管理员身份运行的 CMD 窗口就可以随意添加用户了:
事先说明,我们提权的目标是本地最高管理员,可不是这个普通管理员哦。那么这两个管理员有啥差别呢。
相信使用 Windows 的小伙伴以管理员身份运行某些东西的时候经常会遇到下面这个窗口:
这个就是 UAC 认证,需要用户点击 “是” 即可(有的需要你输入管理员账号密码)。当用户点击 “是” 之后,就可以以管理员身份运行某个软件。
那么为啥要做这个呢?作为一个成熟的 Hacker 你应该知道的,我们拿到的 Shell 一般都是命令行界面,命令行界面是没办法点击 “是” 这个选项的。所以,我们后续对于 Windows 提权还需要绕过这个 UAC 认证。
0x0103:Windows 用户账号 — 本地最高管理员
这个本地最高管理员就是 Administrators 用户组中的 Administrator 用户,该用户在一些 Windows 版本中是默认禁用的:
-
windows server => 默认开启 administrator
-
windows 家庭版、旗舰版 => 默认不开启 administrator
-
windows 企业版、专业版 => 默认开启 administrator
我们可以通过输入下面这行命令,来查看本机的某个账户的状态:
语法: net user <用户名>
示例: net user administrator # 查看 administrator 账户状态
然后由于某些机器默认是不开启 Administrator 账户的,下面这两条命令可以帮他开启和关闭:
net user administrator /active:yes # 开启 administrator
net user administrator /active:no # 禁用 administrator
1. 开启本地最高管理员账户
我们以一台 Windows 7 系统为例,默认 Administrator 账户是禁用的。输入下面的命令可以查看账户状态(CMD 窗口要以管理员权限打开):
net user administrator
然后我们输入下面的命令,开启本地的 Administrator 账户:
net user administrator /active:yes
切换完成后,就可以注销当前用户去切换成 administrator 账户了,可以看到,当我们启用 Administrator 账户后,登录界面就会直接显示该账户的信息,并且登录是不要密码的(我们刚刚启用的时候也没有设置密码):
2. 本地最高管理员权限介绍
我们选择登录 Administrator 账户,然后直接搜索并打开 CMD 窗口,输入下面的命令:
net user test01 admin@123 /add
如上,直接就成功了。我们并不需要右击 CMD 然后以管理员身份打开,因为我们当前就是系统最高管理员,不管做啥都是默认以管理员身份运行的,而且也不会有 UAC 认证,就是弹那个小窗口让你点击。我们 Windows 提权,提权到这个权限就认为这个机器你已经完全控制了。
0x0104:Windows 域账号 — 域内普通用户
当你的 Windows 机器加入了域后,你的电脑就可以通过域用户进行登录。域内又分为普通域用户与域管理员两种用户权限。这部分主要是让你看一下域用户张啥样的。
在前面介绍普通账户时,我们 whoami 的结果是 机器名\用户名
的形式,那么我们的域账户就是 域名\用户名
的形式,比如下面这个用户就是 hack 域下的 jack 用户(普通用户):
如果是机器用户,就长这样,通过 hostname
查看一下机器名就可以了:
0x0105:Windows 域账号 — 域内管理员
域管理员 whoami 的结果就是 域名\administrator
就是下面这样,拿到了这个用户,就证明对面这个域(内网)已经给你打穿了:
0x0106:Windows 服务账号 — SYSTEM
这个 SYSTEM 权限是 Windows 的一个服务账号,它不属于前面的这几种用户账号(域账号也是用户账号),像前面的用户账号,你用户通过登录后就可以运行各种计算机里的软件、程序。这个服务账号不行,它不能登录。
服务账号专门用于在 Windows 中运行服务,这种账号不能进行登录,SYSTEM 是服务账号的最高权限。SYSTEM 权限是系统自己的权限,任务管理器里面只要是以 SYSTEM 用户运行的程序都是系统本身的程序,比如任务管理器中的 winlogon.exe、svchost.exe、alg.exe 等这些进程,都是系统自己运行的,而不是你运行的用户程序。
我们可以通过打开任务管理器(Ctrl + Shift + ESC
),查看进程来查看 SYSTEM 运行了哪些东西:
这个权限与本地最高管理员是平级的,可以互相切换。
0x02:权限介绍 — Linux 篇
Linux 的权限就简单多了,最高权限就是 Root 用户。我们提权的目标就是拿到 Root 用户。下面介绍两个 Linux 中的登录文件:
-
/etc/passwd
:该文件是 Linux 系统配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。(这个文件里面没有用户密码) -
/etc/shadow
:该文件中存放了/etc/passwd
中的用户密码,该文件只有 root 用户能够读取,其他用户都无法读取该文件。