红队视角下的 .NET 安全审计,记一次 .NET 程序的漏洞发现之旅

红队视角下的 .NET 安全审计,记一次 .NET 程序的漏洞发现之旅

专攻.NET安全的 dotNet安全矩阵 2025-05-16 00:40

图片

进行.NET项目的代码安全审计时,往往需要从整体结构入手,逐步深入到每一个关键处理点,特别是用户输入处理、数据库操作、认证与会话管理等敏感环节。由于.NET程序多为“单入口 + 多逻辑分支”结构,加之Visual Studio生成的工程结构较为规整,因此整体审计体验相较PHP、Node等多路由项目来说更加清晰。我们将以某.NET应用为例,详细介绍一套完整的代码审计思路与挖掘流程。

01. SQL注入分析

我们首先从登录功能入手。在Web层面,通过抓包或调试前端JavaScript代码,可以确认登录请求对应的接口路径和调用逻辑。在源码中,很快定位到了用于处理登录的 Login() 函数。

1.1 登录逻辑初步分析

进入 Login()
 函数后,我们可以看到程序对用户提交的账号与密码进行了提取处理,如下图所示。

接着跟进数据库交互部分时,发现它使用了如下写法:

string sql ="SELECT * FROM Users WHERE username=@username AND password=@password";SqlCommand cmd =newSqlCommand(sql, conn);cmd.Parameters.AddWithValue("@username", username);cmd.Parameters.AddWithValue("@password", password);

这显然是使用了预编译语句,避免了字符串拼接,因此在这里是不存在SQL注入的。这一段是比较规范的安全写法。

1.2 非登录模块注入点

虽然登录功能已做预防,但继续审计代码其它模块后,我们发现该系统大多数接口确实采用了预编译方式防御注入
,但也有部分老旧模块仍存在直接拼接SQL的情况。如下代码片段:

string sql ="SELECT * FROM Orders WHERE id = "+ Request.QueryString["id"];DataSet ds =ExeDataSet(sql);

这里使用了字符串拼接,且直接从URL参数中读取数据,没有任何白名单校验、过滤或预处理
,导致 SQL 注入风险直接暴露。

由于该 SQL 查询没有回显,因此判断为 布尔型盲注
。ExeDataSet()
 函数,会发现该函数底层仍旧是 SqlCommand
 + DataAdapter
但并未加入任何参数绑定
,确认漏洞存在。

02. 密码重置分析

接下来我们对密码找回逻辑进行分析,这也是审计中的一个高频命中点。前端提供了“找回密码”按钮,抓包可看到该功能提交的是邮箱地址,如下图所示。

回到代码中,邮箱表单提交后会触发。进入 SendCode() 方法:这里存在SQL注入风险!具体代码如下所示。

string email = txtEmail.Text;SqlDataReader reader =GetReader("SELECT * FROM Users WHERE Email='"+ email +"'");

虽然大部分模块用了预编译,但这一处明显是未过滤字符串拼接查询,可作为注入点之一。之后将查到的用户ID与一个随机码拼接进找回链接:

string uid = reader["Uid"].ToString();string rand =GetRand(100000,999999);string resetUrl ="https://example.com/resetpwd.aspx?uid="+ uid +"&code="+ rand;

我们进一步分析 GetRand() 的实现,该函数自带的 System.Random 类,生成6位数字验证码。

生成后的验证码及用户ID被插入到数据库中的 ResetCode 表,并设置了48小时有效期。我们跟进修改密码的chagepwd中去看下处理逻辑。

开发者引入了验证码尝试次数限制机制(最大5次),有效阻止了暴力猜解攻击。

03. 越权漏洞分析

随后,这个程序存在多处越权,无论水平还是垂直越权都存在,那么这里拿一处来说明。用户更改密码处,在我们获取到自己用户信息的时候,程序会返回用户的个人信息到前端,在我们填写完所有信息的时候,点击更新信息时,调用了Submit_Click()函数,我们跟进这个函数看看

可以看到,这里面的变量都是我们可以控制的,并没有权限相关判断,在获取了userinfo的信息后,直接进入了数据库,只要我们控制了userid和username,那么就可以修改任意用户的密码了。

如我们用户名为test和userid为2用admin的userid为1替换,那么只需要修改userinfo这个变量的这两个字段就可以了。

.NET 项目的代码审计虽然路径清晰,但也存在“表面安全、深层薄弱”的情况。在注重前端防御的同时,后端常常存在疏漏。通过本文,我们展示了一个完整的审计流程,从登录模块、SQL注入,到密码重置逻辑逐步剖析,帮助读者在面对类似.NET项目时具备清晰的审计路线图。

04. NET代码审计学习

微软的.NET技术广泛应用于全球企业级产品,包括其知名的
Exchange

SharePoint
等,国内如 
某友的Cloud

某通的T系列

某蝶的云产品
等也广泛采用。各行业核心业务均依赖于此技术。这些基于.NET的系统频繁遭攻击,问题涵盖任意文件上传、反序列化漏洞、SQL注入、文件下载漏洞、命令执行漏洞等。

截至目前,星球已推出近
100节内容
 (还在持续增加),包括
70个视频+30份PDF文档
。我们已将内容细致划分为15个分类,并随新漏洞类型的出现持续扩展。在这里您将学到包括但不限于以下漏洞类型。

图片

涉及SQL注入漏洞、文件上传下载漏洞、任意文件操作漏洞、XML外部实体注入漏洞、跨站脚本攻击漏洞、反序列化漏洞、命令执行漏洞、未授权和越权漏洞、第三方组件漏洞等等,包括但不限于OWASP十大漏洞类型。

录播课程

.NET 安全审计课程持续更新中,以下是部分之前已发布的录播章节一览:

图片

图片

图片

详细的内容与结构,请参考下方的星球大纲版块,

图片

专属福利

  1. 学习模式: 代码审计知识星球
    在线录播视频
     +后续漏洞挖掘直播、内部专属交流社区答疑解惑;

  2. 优享福利:加入.NET代码审计星球后
    赠送永久
    dot.Net安全基础入门星球。

图片

课程评价

欢迎对.NET代码审计关注和关心的同学加入我们 [dot.Net安全代码审计] ,目前已有近 100+ 位朋友抢先预定。

图片

图片

图片

星球门票后期价格随着内容和质量的不断沉淀会适当提高,
越早加入越划算!
 现在加入星球可享受星球早鸟价,
现在加入星球可享受星球100元优惠券或送出一套团队新书《.NET安全攻防指南》签名版。

图片

期待在这里能遇到有情有义的小伙伴,大家聚在一起做一件有意义的事,
可扫描下方老师二维码了解更多详情。

图片