本帖最后由 sco4x0 于 2015-3-6 15:22 编辑
author:sco4x0
blog:http://www.sco4x0.com
Orz,混脸熟来了,超链接加不上,没办法了。
重新编辑了下,恩,这下好多了
0x01 前言
随着各种cms的出现,代码审计也变得越来越吃香,。Orz
然后看到好多盆友都说asp.net不知道从何下手,自己稍微总结了一点。算是自己学习的一个小笔记,2333
asp.net cms的案例实在太少,而且漏洞点都是大同小异,不要埋怨不详细和没案例,THx
asp.net审计哪家强,膜拜WefGod大哥吧:Wefgod
还有zcgonvh神:zcgonvh
若有错误,请不要吐槽,大家心平气和坐下来,你把刀放下,我们好好聊聊天喝喝茶。
0x02 asp.net审计前奏
asp.net可以用C# ,VB.NET ,Jscript.net等等来开发,但是通常首选都是C#和VB.NET
审计asp.net的时候,首先得弄明白他的结构,他并不像php那么单纯。
一般来说,在asp.net应用中,需要进行观察的文件有:aspx.cs,.cs,.ashx和dll文件
aspx.cs是页面后的代码,aspx负责显示,服务器端的动作就是在aspx.cs定义的
.cs是类文件,公共类神马的就是这个了
.ashx是一般处理程序,主要用于写web handler,可以理解成不会显示的aspx页面,不过效率更高
dll就是编译之后的cs文件
0x03 工欲善其事,必先利其器
如果遇到的asp.net cms源码包是没有编译成dll的话,那么就方便很多了,比如地平线cms
而更多的是会遇到编译成了dll,这样相对地说就麻烦很多了,不过也有方法
一:Reflector
大名鼎鼎的Reflector想必都不陌生了,他可以将·NET程序集中的中间语言反编译成C#或者Visual Basic代码,除了能将IL转换为C#或Visual Basic以外,Reflector还能够提供程序集中类及其成员的概要信息、提供查看程序集中IL的能力以及提供对第三方插件的支持,比如屌炸天的reflexil
二:ILSpy
自2011年2月份开始,reflector就开始转向收费软件,所以ILSpy也就应运而生了,它反编译出的代码和reflector差不多
三:屌屌哒的Visual Studio
这个就不需要再作什么介绍了。。
若有遗漏求补充。。
0x04 asp.net应用安全
这是一些平台特有的点。若是有错误,大家坐下来好好聊聊,别冻手冻脚。如果不感兴趣,直接往下跳吧
1.ValidateRequest
在aspx的@ Page中,或许会看到这么一句:validateRequest="true",这时会发现,如果在表单中输入xss payload,就会返回一个错误:检测到潜在危险xxx,这也直接导致了很多asp.net程序猿压根就不知道xss这回事。这个验证貌似很无解,传说中,有方法是可以绕过这个验证的,但是需要利用IE的各种BUG,构造语句:[AppleScript] 纯文本查看 复制代码 <~/XSS/*- */STYLE=xss:e/**/xpression(alert('XSS'))>
但是因为IE修复了,所以也就没成了。如果在开发中,不知道怎么处理xss的话,把validateRequest设置为true比较好
2.一般处理程序ashx
系统默认创建的ashx文件,一般都是这样的:
[AppleScript] 纯文本查看 复制代码 <%@ WebHandler Language="C#" Class="Handler2" %>
using System;
using System.Web;
public class Handler2 : IHttpHandler {
public void ProcessRequest (HttpContext context) {
context.Response.ContentType = "text/plain";
context.Response.Write("Hello ASP.NET");
}
public bool IsReusable {
get {
return false;
}
}
}
但是如果被黑客知道了地址的话,源码就会直接暴露出来 那么可以这么写:
[AppleScript] 纯文本查看 复制代码 <%@ WebHandler Language="C#" Class="Handler2" CodeBehind="Handle2.cs" %>
将实现的代码放入app_code中,保证代码的隐秘和安全
3.信息安全之VIEWSTATE
在asp.net应用中,查看源码会经常看到这样一段东西:
ViewState 是客户端的状态管理机制, 通过一个 ID __VIEWSTATE 存储在一个隐藏的区域中.看起来像是一个加密过的字符串。其实就是一段Base64编码的字符串,更多内容,请见:传送门 内容太多,实在搬不动了
不写了 。。。 其他的以后再写吧。
0x05 开始审计asp.net应用
其实漏洞点都大同小异,不同的也许就语法的差异了,至于漏洞是如何产生的,也许就不用再详细多说了。
一:sql注入
处理字符串不当,或者是防御规则脆弱,导致非法用户数据入库
比如大哥的
逐浪CMS通用型SQL注入4+5
逐浪CMS通用型SQL注入3(bypass)
除了常见的拼接字符串之外,还有这种
[C#] 纯文本查看 复制代码 Public static string GetIP(){
string result = HTTpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
if(string.IsNullOrEmpty(result))
result = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
if(string.IsNullOrEmpty(result))
result = HttpContext.Current.Request.UserHostAddress;
if(string.IsNullOrEmpty(result))
return "127.0.0.1";
return result;
}
至于二次注入神马的,案例确实不好找,但是这种都是属于知识点共通的,参考php的案例即可
xss
待补充,实在没找到案例
csrf
待补充,实在没找到案例
信息伪造
看名字就知道是什么了。。
见大哥的:ROYCMS身份伪造进入后台
文件上传
截断,大小写,js验证,其余待补充。实在找不到案例。
文件下载|文件查看|文件删除|文件包含
例如这类:wooyun-2010-081196
在接收到文件参数的时候,并没有对其进行过多的检测,太过相信请求的数据。
截断技巧如%00之类的
审计deepsoon cms 0x05,任意文件读取修改
其余的求补充。
平行权限(越权)
越权的出现是因为程序员在做增查删改的时候,没有详细验证请求数据
越权的更多姿势和方法,参考川神的paper吧:我的越权之道
案例:ROYCMS普通权限严重的越权操作
逻辑漏洞
这类漏洞最麻烦。 多出现于找回密码啊,各种认证啊,验证码重用啊。等等
案例:审计deepsoon cms 0x03 后台绕过查看任意后台界面
没找到案例,求补充。
其他mark内容
ascx后门
实在佩服wefgod大哥的脑洞。请收下我的胳膊肘和膝盖,传送门
viewstate安全实例
再次跪舔wefgod大哥,传送门
0x06 小结
我也很想写的更详细,但是这些基础知识点大家也许都是听得耳朵都起茧子了。所以做了个大大大概的分类,而且asp.net的案例实在太少,原谅我的视野实在找不到其他的了。
另外,如果有小伙伴有trick,希望大家能一起多多交流 |