一、前言
前段时间观摩学习了朋友的公众号
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.该厂商旗下产品类型较多,在网上搜索相关产品还是有好几百个。猜测这一系列产品后台运用逻辑大致相同,于是简单验证了几个,果然是能通用的。
希望看了这篇文章后对各位的渗透日站有所帮助。