程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 代碼閱讀總結之ASP.NET StartKit TimeTracker(角色權限之捉蟲筆記)

代碼閱讀總結之ASP.NET StartKit TimeTracker(角色權限之捉蟲筆記)

編輯:關於ASP.NET

在ASP.NET StartKit TimeTracker中由於程序設計上的小失誤,我們可以利用這個BUG來達到越權訪問aspx頁面的能力.

我們都知道該系統定義了三種角色,分別為

Administrator(管理員)

Project Manager(項目管理者)

Consultant(顧問)

只有Administrator角色的用戶才可以訪問管理信息頁面(ProjectList.aspx)

現在我來描述一下錯誤現象:

現在我有一個管理員的帳戶[email protected].

我們先用這個帳戶登陸,去創建一個Consultant角色的帳戶:[email protected]

然後馬上關閉浏覽器.(注意我這裡說的關閉是用MOUSE點擊浏覽器關閉按鈕而不是用程序提供的注銷按鈕)

再打開浏覽器進入登陸頁,用帳戶:[email protected]登陸系統.

這時我們就可以利用顧問角色的帳戶訪問管理信息頁面

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之一

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved