Welcome 微信登录

首页 / 网页编程 / ASP.NET / 代码阅读总结之ASP.NET StartKit TimeTracker(角色权限之捉虫笔记)

代码阅读总结之ASP.NET StartKit TimeTracker(角色权限之捉虫笔记)2012-01-18 博客园 aierong在ASP.NET StartKit TimeTracker中由于程序设计上的小失误,我们可以利用这个BUG来达到越权访问aspx页面的能力.

我们都知道该系统定义了三种角色,分别为

Administrator(管理员)

Project Manager(项目管理者)

Consultant(顾问)

只有Administrator角色的用户才可以访问管理信息页面(ProjectList.aspx)

现在我来描述一下错误现象:

现在我有一个管理员的帐户ai_ai@126.com.

我们先用这个帐户登陆,去创建一个Consultant角色的帐户:ai_c@126.com

然后马上关闭浏览器.(注意我这里说的关闭是用MOUSE点击浏览器关闭按钮而不是用程序提供的注销按钮)

再打开浏览器进入登陆页,用帐户:ai_c@126.com登陆系统.

这时我们就可以利用顾问角色的帐户访问管理信息页面

http://localhost/TTWebCSVS_cn/ProjectList.aspx?index=2

这个BUG岂不是和系统角色访问权限相背.

现在让我们来找虫

我们可以看到该系统的登陆用户角色信息是存放在一个COOKIE中的.

数据存放前进行了加密,利用了类FormsAuthentication.Encrypt的静态方法.

该COOKIE的名称在Global中定义为一个常量:

public const string UserRoles = "userroles"

这就是BUG之一

现在我们再看Global中Application_AuthenticateRequest事件中另一段代码:

Response.Cookies[UserRoles].Value = cookieStr;

Response.Cookies[UserRoles].Path = "/";

Response.Cookies[UserRoles].Expires = DateTime.Now.AddMinutes(1);

从以上我们可以得知,该COOKIE的有效时间是一分钟.

这样我们在前一登陆帐户关闭后,一分钟内马上利用另一帐户登陆,这样后面的帐户可以取到前一帐户的角色信息.

因为2个登陆帐户用的是同一个叫userroles的COOKIE

这又是BUG之一