【AppScan深入淺出】修復漏洞:會話標識未更新(中危)


關於“會話標識未更新”,其實我覺得應該是頗有爭議的,為何登錄后不更新會話標識就會存在危險,是不是擔心讀取到舊會話中存在Session的取值呢?這個恕我不懂。

 

關於漏洞的產生

“會話標識未更新”是中危漏洞,AppScan會掃描“登錄行為”前后的Cookie,其中會對其中的JSESSIONOID(JSP)或者 ASP.NET_SessionId(ASP)進行記錄。在登錄行為發生后,如果cookie中這個值沒有發生變化,則判定為“會話標識未更新”漏洞。

 

修復方式

JSP的修復方法可參考這位大俠的文章,我個人沒有確認過:http://blog.csdn.net/yutan_313/article/details/6260573

 

ASP的修復方法可以參考以下代碼,在登錄按鈕點擊后,確認登錄前,加入3行代碼對Cookie進行清空已達到重置SessionId的效果。

 protected void btnLogin_Click(object sender, EventArgs e)
{
    //重置SessionId
    Session.Clear();
    Session.Abandon();
    Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

    //登錄判斷
    if (check(txtName.Text,txtPassword.Text))
   {
     FormsAuthentication.SetAuthCookie("admin", false);
     Response.Redirect("Default.aspx");
   }
}

 

AppScan中,對“會話標識未更新”也提供了修改建議:

一般修訂建議 始終生成新的會話,供用戶成功認證時登錄。防止用戶操縱會話標識。請勿接受用戶瀏覽器登錄時所提供的會話標識

 

結果確認

使用代碼前

clip_image002

 

使用代碼后

clip_image002[12]

 

 

為何會產生漏洞

有人會問這個漏洞為何會產生? 為什么有的站點會出現,有的站點沒有使用代碼卻又不會出現。寫在最后,我提供一個思路,這樣才是深入淺出的研究問題:

 

有時候網站登錄頁面,並不會立刻產生SessionId,例如我寫的登錄頁面,頁面中是不會出現ASP.NET_SessionId:(使用Chrome+Edit This Cookie插件)

image

 

登錄后才會出現ASP.NET_SessionId,另一個是登錄代碼中增加的驗證Cookie。

image

 

但是當我在登錄頁加載之前,添加了信息在用戶Session中(例如為了添加圖形驗證碼的需要),這時候登錄頁加載的時候就會產生SessionId

protected void Page_Load(object sender, EventArgs e)
{
  //產生會話標識未更新漏洞
  Session["useless"] = 1;
}

 

image

 

一旦登錄前就有SessionId,那么AppScan就有了可以比較的SessionId,在登錄后比較SessionId的變化,那么也就會產生“會話標識未更新”漏洞。

 

寫在最后的最后,“會話標識未更新”的危害,在於攻擊者通過某種方式(如XSS)將自己的Id置入了被攻擊者的瀏覽器,將會話標識改為某個攻擊者預設的值,被攻擊者正常登陸,若服務器接收了這個預設值,那么相當於攻擊者獲得了被攻擊者登錄后的權限,因此才要求在登錄時更新會話標識。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM