文章总结: 本文介绍了一次市级攻防演练中的.NET代码审计,发现了两个主要漏洞:SQL注入漏洞位于CHCG_CHLPB类的DBLPBByLJZDAH方法中,ljzdah参数直接拼接SQL导致注入;任意文件上传漏洞在DZSJ类的SavePDF方法中,未校验文件扩展名,允许上传任意类型文件。作者提供了两种方法获取上传后的文件位置:通过列目录索引和爆破时间戳。
综合评分: 85
文章分类: 代码审计,漏洞分析,WEB安全,渗透测试,红队
市级攻防打点-.NET代码审计
原创
白昼
白昼安全团队
2025年8月6日 23:26
重庆
市级攻防打点-.NET代码审计
列目录+备份文件+.NET
针对靶标IP进行全端口扫描,发现.NET服务列目录
下载备份文件进行审计
路由
入口在App_DataHandler下且只有五处可调用
查看NoToken_Handler类,使用getResponeJson()来传递处理请求参数,通过第一个参数DATA来传递数据,第三个参数XTMC来传递调用具体类。
查看任意一个跟入的方法发现,通过action参数来调用当前调用类的方法
SQL注入
查看CHCGLPB并跟入return_CHCG_LPB,最终走入了CHCG_CHLPB类 查看CHCG_CHLPB类其他方法发现,DBLPBByLJZDAH方法的ljzdah参数直接拼接SQL,最终导致sql注入。
任意文件上传
查看DZSJ类并跟入Return_DJSJ()方法
跟入SavePDF()方法
通过参数bz用来判断类型,在实际上传中未校验文件扩展名,且文件名用当前时间戳来重命名,上传到了/upload/pdf/目录,问题点是无法看到成功上传返回的文件名。
Public Function SavePDF() As String
Dim text As String = Me.jobject("sjzl_bsm").ToString()
Dim text2 As String = Me.jobject("bz").ToString()
Dim text3 As String
If text2.ToLower() = "mdb" Then
text3 = "MDB文件"
Else
text3 = "PDF文件"
End If
Try
Dim files As HttpFileCollection = HttpContext.Current.Request.Files
If files IsNot Nothing AndAlso files.Count > 0 Then
Dim now As DateTime = DateTime.Now
For i As Integer = 0 To files.Count - 1
Dim httpPostedFile As HttpPostedFile = files(i)
Dim text4 As String = HttpContext.Current.Server.MapPath(String.Concat(New Object() { "~/upload/pdf/", now.Year, "/", now.ToString("yyyyMMdd"), "/" }))
If Not Directory.Exists(text4) Then
Directory.CreateDirectory(text4)
End If
Dim fileNameWithoutExtension As String = Path.GetFileNameWithoutExtension(httpPostedFile.FileName)
Dim text5 As String = Path.GetFileNameWithoutExtension(httpPostedFile.FileName) + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + Path.GetExtension(httpPostedFile.FileName)
Dim text6 As String = String.Concat(New Object() { "/upload/pdf/", now.Year, "/", now.ToString("yyyyMMdd"), "/", text5 })
httpPostedFile.SaveAs(HttpContext.Current.Server.MapPath(text6))
Me.SaveDZWJ(Guid.NewGuid(), fileNameWithoutExtension, text3, text6, "", "", text, text3)
Next
End If
Catch ex As Exception
Return "{""error"":""" + ex.ToString() + """}"
End Try
Return "{""result"":""success""}"
End Function
解决方法:
1、通过前面提到的列目录索引找到文件位置
2、通过爆破时间戳。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:白昼安全团队 白昼《市级攻防打点-.NET代码审计》