NewHand的第一次.NET审计
2023-8-22 00:2:17 Author: 白帽子(查看原文) 阅读量:18 收藏

一、前言

前段时间观摩学习了朋友的公众号

https://mp.weixin.qq.com/s/A_gO1Uae1G-JnfoOODyAdA
D0ubt,AdminTony,公众号:川云安全团队记一次.net审计

是在网上下了个源码来练手。

二、过程

根据说明进行数据库添加和安装。

这里我们可以先了解一下aspx网站的构成。一般asp.net是使用C#,VB.NET,Jscript.net来开发,其中应重点查看的代码通常是.cs、.dll文件,.cs是类文件,dll是cs文件编译后的程序集,.ashx是一般处理程序,主要用于写web handler,可以理解成不会显示的aspx页面,.aspx文件只是做显示,通常代码是一些html代码。核心代码在bin目录下的dll文件中。

这里我直接把bin目录拖入dnspy中(dnspy是反编译工具,用于调试.net 程序)。

作为新手,本次审计的目标就2个。找sql注入和文件上传。

2.1 sql注入挖掘

随便找个查询功能抓包,找到根据页面路径对应的dll文件

在源码里寻找疑似过滤的类,看到这个checksql.filter就很明显。

跟进去一看,过滤的也差不多了。

接下来思路也很简单,就是全局找没有调用checksql类的查询页面。

然后跟着sqlserver profiler进行跟踪。

dnspy没有全局查找的功能,可以全部导出到Visual Studio里面进行全局搜索select。

接下来就是一段漫长的过程。。。。。

好不容易发现1处没有使用过滤类的查询,可惜还有参数化第二道防线。

继续寻找,终于找到一处作者疏忽的地方。当this.ViewState["Search"]不为null的时候,给text值追加上this.ViewState["Search"]的值,而这里是没有做过滤的。

再看它的存储过程,使用的是SqlDataAdapter。SqlDataAdapter和一般的Sqlcommand不同在于SqlDataAdapter可以调用多个SQL命令,而普通的SqlCommand只能操作一个SQL命令。如果给SqlDataAdapter参数的sql语句不做处理的话,就能出现Sql注入问题。

成功实现注入。

又多看了一下,使用SqlDataAdapter都是调用的GetTable()方法,于是全局搜索该方法。果然找出多个类似的sql注入。

对照页面比对了下,问题都出在"高级搜索"的功能。

2.2 文件上传挖掘

弱口令进了后台,上传文件发现没有过滤后缀,本来以为稳了,结果查看图片路径是如下这种形式。

所有上传点均尝试后路径都一样。没办法,那就浅看一下源码中是如何实现上传逻辑的。

上传后的文件名以当前的日期时间外加1000-9999的随机数。

然后拼接上传后缀名。

上传后缀名这里有过滤函数,但是整个上传函数里面并没有调用。

最后上传后读取使用Security类的EncryptString加密方式。

跟进后还以为加密用的是对称加密,skey是默认硬编码。结果细看之下发现加密方式很简单,就是skey+明文路径然后作base64的编码。

这下看得纯纯有点无语,把key和路径拼接在一起再做base64,那不跟没加密一样吗?简单一个base64就能解出路径。(一开始就能搞定结果绕了这么大一圈)

上面只是后台上传,毕竟还有个登录后台的限制。该源码还有前台功能,看下前台上传是否逻辑一致。

前台上传是先将图片内容转成base64形式的数据流,重新在服务器上生成文件然后固定添加jpg后缀。那这样前台就莫得搞头了。

三、总结

1.sql注入只存在于后台。aspx.net的注入除了常规的SqlCommand查询语句外,还有调用SqlDataAdapter时可能存在注入。

2.上传的问题也只有后台存在,利用条件有限制,不过这个路径加密相当于没加。

3.该厂商旗下产品类型较多,在网上搜索相关产品还是有好几百个。猜测这一系列产品后台运用逻辑大致相同,于是简单验证了几个,果然是能通用的。

希望看了这篇文章后对各位的渗透日站有所帮助。


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246936&idx=1&sn=4ff7b40160f6b9f28f504dd17f9d3fc1&chksm=82ea54b1b59ddda7819978dc6279e5ced6b5ec192bc299e6041aa10d59a0c8b130ef97dde10a&scene=0&xtrack=1#rd
如有侵权请联系:admin#unsafe.sh