用途限制声明
本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。
在内网后渗透攻击中,进行信息收集后就是要进行权限的提升,通常在渗透中很有可能只能获得一个系统的Guest或者User权限,低权限会受到很多的限制,在实施横向渗透或者提权攻击会很困难,所以我们需要进行权限的提升,比如将访问权限从Guset提升到User,再到Administrator,最后到System级别。
渗透的最终目的是获取服务器的最高权限,既是windows管理员账号的权限,或者linux系统的root权限。提升权限的方式有以下两类。
纵向提权:低权限角色获得高权限角色的权限。例如,一个webshell权限通过提权之后拥有管理员的权限,那么就是纵向提权。
横向提权:获得同级别角色的权限。
那么,如何进行权限提升呢,有四种方法:
-
利用系统或软件漏洞的权限提升
主要通过攻击目标系统(如 Windows、Linux)或运行的应用软件(如数据库、Web 服务等)存在的安全漏洞(如内核漏洞、缓冲区溢出、提权漏洞等),从低权限账户直接提升至最高权限(管理员 /root)。 -
利用配置错误的权限提升
针对目标系统或服务的不安全配置(如弱密码、默认凭证、不当的文件 / 服务权限设置、凭证泄露、服务以高权限运行但存在可利用的配置缺陷等),通过获取高权限凭证、滥用配置缺陷等方式提升权限。 -
令牌窃取
-
Hash攻击
一、利用系统或软件漏洞的权限提升
接下来进行操作,首先我们已经通过漏洞获得一个内网服务器的权限,查看当前的权限,
命令:whoami/groups
通过查询可以看到属于标准用户,那么就需要将提升至管理员权限。
我们使用第一个办法来进行权限提升,就是本地溢出漏洞来进行提高权限,我先介绍以下原理以及流程。
一、核心原理
本地溢出提权的本质是 “滥用高权限程序的内存漏洞”,具体逻辑如下:
-
程序权限与漏洞基础
目标系统中存在某些以高权限(如 Windows 的SYSTEM
、Linux 的root
)运行的程序(如系统服务、SUID 程序、驱动等),这些程序因开发时未严格校验输入长度(如未限制用户输入的字符串长度),存在缓冲区溢出漏洞。缓冲区是程序在内存中开辟的一块连续存储空间,用于临时存放数据。当输入数据的长度超过缓冲区的容量时,多余的数据会 “溢出” 到相邻的内存区域(如存放程序执行地址、函数返回值的区域)。
-
控制程序执行流
攻击者构造的恶意输入(即 “ exploit )会包含两部分:- 大量填充数据(用于填满缓冲区,覆盖相邻内存);
- 恶意代码(如获取高权限 shell 的代码,称为 “payload”);
- 特定的 “返回地址”(指向恶意代码在内存中的位置)。
当有漏洞的高权限程序处理该输入时,溢出的数据会覆盖程序原本的 “返回地址”(即程序执行完当前函数后应跳转的位置),迫使程序跳转到攻击者预先设置的恶意代码地址,从而执行 payload。
-
继承高权限
由于触发漏洞的程序本身以高权限运行(如root
),其执行的恶意代码也会继承该权限,攻击者因此获得目标系统的最高权限(如root
shell)。
二、操作逻辑(简化流程)
在授权测试中,利用本地溢出漏洞提权的大致步骤如下(具体细节因漏洞和系统而异)
-
信息收集:定位目标漏洞
- 确认目标系统版本(如 Linux 内核版本、Windows 系统版本)、已安装的程序 / 服务,排查已知的本地溢出漏洞(可参考漏洞库如 CVE、Exploit-DB)。
- 重点关注以高权限运行的程序:
- Linux 中可通过
ps aux
查看进程权限,或find / -perm -4000 2>/dev/null
查找 SUID 程序(SUID 程序执行时会继承所有者权限,若所有者为 root 则风险极高); - Windows 中可通过 “服务” 管理界面查看以 “Local System” 权限运行的服务。
- Linux 中可通过
-
漏洞分析:确定溢出细节
- 若漏洞已公开,可直接获取公开的 exploit 代码(需注意适配系统版本);
- 若为未知漏洞,需通过调试工具(如 GDB、x64dbg)分析程序:确定缓冲区大小(通过 “模糊测试” 逐步增加输入长度,观察程序崩溃时的输入长度)、找到可覆盖的返回地址位置、判断内存保护机制(如 ASLR、DEP 是否开启,需针对性绕过)。
-
构造并调试 exploit
- 根据漏洞细节构造 exploit:用填充数据覆盖缓冲区,设置返回地址指向 payload,加入适配系统的 payload(如 Linux 的
execve("/bin/sh", ...)
、Windows 的CreateProcessA
启动 cmd)。 - 若系统开启内存保护(如 ASLR 随机化内存地址),需通过 “信息泄露” 漏洞获取内存地址,或利用 “ROP 链”(Return-Oriented Programming)绕过保护。
- 根据漏洞细节构造 exploit:用填充数据覆盖缓冲区,设置返回地址指向 payload,加入适配系统的 payload(如 Linux 的
-
执行 exploit,获取权限
- 在目标系统中以低权限执行 exploit,触发有漏洞的高权限程序;
- 若成功,程序会执行 payload,返回高权限 shell(如 Linux 的
#
提示符、Windows 的 “管理员” cmd)。
首先输入getuid命令查看已经获得的权限
先尝试利用getsystem进行提权
无法提权,那就利用系统相关漏洞进行提权了,首先查询系统相关信息以及补丁
我们可以看到属于windows7 并且只打了两个补丁,我们可以使用最新的ms16-032来尝试提权,对应的补丁编号是KB3139914,基本每一个补丁都对应一个漏洞。
接下来准备提权,先把会话转为后台执行,然后搜索ms16_032
然后使用,设置“session"进行提权操作,这里指定”session"为5,在使用本地提权模块前,必须先建立一个低权限会话(例如通过远程漏洞攻击或其他方式获得的普通用户权限),然后指定该会话 ID,