0x01 前言
最近在打项目的时候,站点日常日不下来,于是只能打打供应商迂回一下来进行渗透了
刚好又发现了一些CMS,又刚好搞到了源码,接着又刚好感觉自己好像没有从来审过.net的源码
自己也没有发过.new审计的文章,于是就写写顺便给自己入入门咯
0x02 技能要求
这一点很重要, 决定了能不能看懂这一篇简单的文章
- 提前准备一个,下雨知道躲雨,不会乱捡地上的东西吃,大小便知道自理,会玩智能手机的大脑
- 学过任意一门编程语言,知道curd与mvc这种东西
- 拥有一台现代化的电子设备,例如:电脑
- 搞到.net的源码,不然审空气么
0x03 环境准备
工欲善其事,必先利其器
这里我个人喜欢使用dnSpy这个软件来审计.net的源码
软件github: https://github.com/dnSpy/dnSpy
个人下载的版本: https://github.com/dnSpy/dnSpy/releases/download/v6.1.8/dnSpy-net-win64.zip0x04 案例一
0x04.1 信息收集
知己知彼,才能百战百胜,所以说想要后期简单一些,前期准备工作就要全一些了
例如我们现在访问一下目标,随便找个接口,看看最基础的路由是怎么样的

知道了这些以后,就可以通过这些信息找到对应的模块代码进行阅读了抓取的完整路由:http://xxx.com/proxy/ipadv3/s.aspx?WorkerCode=111&WorkerPass=123&LRCode=&m=Login从路由与命名可以看的出来m = 方法WorkerCode,WorkerPass与LRCode都是参数
0x04.2 路由分析
从这里以后就可以开始正式审计了,源码的话,自己想办法搞吧,现在先看看源码的目录结构一般来说是先看一下 Web.config 里面通常保存着各种配置文件,例如:数据库账号密码等我就不截图了,因为里面只有数据库配置没什么有价值的东西,看的出来还是很清晰的根据前面抓取到的路由,我们可以找找文件./ym/ipadv3/s.aspx,调用的方法m=Login

通过下图可以看的出来,代码在 Inherits="AspDIY.Net.Proxy.Web.ipadv3.s" 中这种情况如果文件很多的话,想快速定位那么可以通过搜索类名的方法来快速定位

搜索: AspDIY通过下图知道了./ym/ipadv3/s.aspx的实际业务代码在./ym/proxy/bin/AspDIY.Net.Proxy.Web.dll中而./ym/proxy/bin/保存的就是全部业务的dll

知道这些以后,接下来的事情就是打开dnSpy然后引入./ym/proxy/bin/下的文件,进行代码审计即可
0x04.3 漏洞挖掘
0x04.3.1 sql注入
然后就可以开审了http://xxx.com/proxy/ipadv3/s.aspx?WorkerCode=111&WorkerPass=123&LRCode=&m=Login对应源码 ./ym/ipadv3/s.aspx然后对应 ./ym/proxy/bin/AspDIY.Net.Proxy.Web.dll所以现在查看这个dll即可

打开 ./ym/proxy/bin/AspDIY.Net.Proxy.Web.dll继续看 AspDIY.Net.Proxy.Web.ipadv3下面的 s 类里面的 m = Login查看具体业务

string text = RequestHelper.GetString("WorkerCode").PadLeft(6, '0');主要跟一下这个参数发现被 Services.Login(text, @string); 调用,继续跟下去

打开: ./ym/proxy/bin/AspDIY.Net.Proxy.Core.dll命名空间: AspDIY.Net.Proxy.Core.Ipadv3类: Services方法: Login参数: No发现 No(工号)这个参数被 clsWorkerBaseData.CheckLogin(No, Pass, 0); 调用,继续跟下去

打开: ./ym/proxy/bin/BusinessData.dll命名空间: Business.BusinessData类: clsWorkerBaseData方法: CheckLogin参数: Code可以看到 Code只是被Trim处理了,而Trim就是删除左右两边的空格,所以等于没做过滤

打开: ./ym/proxy/bin/BusinessData.dll命名空间: Business.BusinessData类: clsWorkerBaseData方法: MW2PJG1ix参数: A_1通过下图可以知道 A_1 = Code = No = WorkerCode = 登录的工号然后终于带入了sql查询整体是没过滤的其中我们发现string sqlStr =("cwBlAGwAZQBjAHQAIABXAG8AcgBrAGUAcgBDAG8AZABlACwAIABQAGEAcwBzACAALABDAGEAcgBkAGkAZAAgAGYAcgBvAG0AIABZAF8AVwBvAHIAawBlAHIAIAB3AGgAZQByAGUAIABXAG8AcgBrAGUAcgBDAG8AZABlAD0AJwA=") + A_1 + ("JwAgAGEAbgBkACAASQBzAFUAcwBlAGQAPQAxAA==");像是base64,解密一下select WorkerCode, Pass ,Cardid from Y_Worker where WorkerCode=' + A_1 + ' and IsUsed=1到这里整个漏洞挖掘就结束了,可以发现,登录处没过滤导致有注入

最后面我们在测试一下,看看是否真的是注入http://xxx.com/proxy/ipadv3/s.aspx?WorkerCode=111%27%20if(1%3D1)%20waitfor%20delay%20%270%3A0%3A4%27--%20a%20&WorkerPass=123456&LRCode=&m=Login
0x05 案例二
0x05.1 信息收集
老样子访问一下目标,随便找个接口,看看最基础的路由是怎么样的

抓取的完整路由: http://test.com/login.aspx?Action=Login从路由与命名可以看的出来这一个比较的传统一些Action = 方法username,password,commit都属于参数
有了这个初步的消息以后,就可以通过源码来进行代码审计的阅读了
0x05.2 路由分析
源码的话,自己想办法搞吧老样子先看看目录结构吧,然后通过前面实战抓的路由去查找一下具体文件./ym2/login.aspx?Action=Login

通过下图可以看的出来,代码在 Inherits="Aspnet.Webform.Rmeeting.login" 中这种情况如果文件很多的话,想快速定位那么可以通过搜索类名的方法来快速定位

搜索: Aspnet.Webform.Rmeeting通过下图知道了./ym2/login.aspx的实际业务代码在./ym2/bin/Aspnet.Webform.Rmeeting.dll中而./ym2/bin/保存的就是全部业务的dll
0x05.2.1 Login路由分析
知道这些以后,接下来的事情就是打开dnSpy然后引入./ym2/bin/下的文件,进行代码审计即可那么让我们试试查找一下 http://test.com/login.aspx?Action=Login 的具体业务在哪里这样可以简单直观的把路由快速理清楚
http://test.com/login.aspx?Action=Login 对应 ./ym2/login.aspx./ym2/login.aspx 调用了 Inherits="Aspnet.Webform.Rmeeting.login"Aspnet.Webform.Rmeeting.dll 在 ./ym2/bin/ 中所以这里我通过dnSpy软件,引入./ym2/bin/的所有dll,慢慢分析Aspnet.Webform.Rmeeting.dll查找 Aspnet.Webform.Rmeeting 的 login类在通过login类查找在Action=Login

进行登录操作,后面的就不必在看了,在这里就已经找到路由了也已经可以完全理解这个系统的路由走向了
0x05.3 漏洞挖掘
在挖掘中,发现大量的接口都是强制要登录的,只有少部分是不需要登录的例如: ./ym2/Handler/AppMeeting.ashx这个文件就需要登录,大部分的文件都是如下图
0x05.3.1 任意文件上传
前面说过大部分都是需要登录的接口,但是刚好,这个接口就是不需要登录的那个,并且有漏洞...源码路径: ./ym2/Handler/FileTransferHandler.ashx参数: ActionAction表示进入那个方法,ClipUpload与AttachmentUpload都是调用的一个类方法,就是参数不同而已所以随便找一个方法跟进去看看换成真实路径:http://test.com/Handler/FileTransferHandler.ashx?Action=ClipUpload但是怎么构造有没有漏洞还不知道,所以继续跟下去

接下来就是查找这个FileTransferHelper对应的dll,然后查找到对应的HandleMethod方法进行审计了如果你直接通过搜索你会发现dll你会发现没有FileTransferHelper.dll这个时候不要慌,换成dnSpy软件来进行搜索即可


通过dnSpy软件的搜索功能,成功找到了 FileTransferHelper源码路径: ./ym2/bin/Aspnet.Webform.Rmeeting.dll这样就可以查看代码逻辑了

从下图看的出来,只要请求为POST/PUT即可进入 FileTransferHelper.UploadFile()继续跟进 UploadFile() 方法



现在路径也知道了,怎么构造也可以,也知道了没有过滤了,那么接下来就是很简单的,构造数据包了POST /Handler/FileTransferHandler.ashx?Action=ClipUpload HTTP/1.1Host: test.comAccept: application/json, text/javascript, */*; q=0.01X-Requested-With: XMLHttpRequestContent-Type: multipart/form-data; boundary=----WebKitFormBoundarySBJd6SVtIrIWGGP5Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8Cookie: ASP.NET_SessionId=lap5sx00tc4deuoq2jul1fbv; Language=zh-CNConnection: closeContent-Length: 189------WebKitFormBoundarySBJd6SVtIrIWGGP5Content-Disposition: form-data; name="files[]"; filename="456.ashx"Content-Type: image/png<%@ Language="C#" Class="Handler1" %>public class Handler1 : System.Web.IHttpHandler,System.Web.SessionState.IRequiresSessionState{public void ProcessRequest(System.Web.HttpContext Context){Context.Response.ContentType = "text/plain";Context.Response.Write("Hello World");}public bool IsReusable{get{return false;}}}------WebKitFormBoundarySBJd6SVtIrIWGGP5--

然后访问: http://test.com/Resources/image/33246xxxxxxxxxxxxx3374a.ashx查看效果
0x06 总结
总的来说,.net的代码都比较的清晰明了,有点编程基础的话哪怕没正式学过.net也可以通过变量名,方法名,很快很好的审计出漏洞,对比其它语言例如java简单太多了


