欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

[AppScan深入浅出]修复漏洞:会话标识未更新(中危)

程序员文章站 2022-09-19 18:29:35
关于“会话标识未更新”,其实我觉得应该是颇有争议的,为何登录后不更新会话标识就会存在危险,是不是担心读取到旧会话中存在Session的取值呢?这个恕我不懂。 &nbs...
关于“会话标识未更新”,其实我觉得应该是颇有争议的,为何登录后不更新会话标识就会存在危险,是不是担心读取到旧会话中存在Session的取值呢?这个恕我不懂。

 

关于漏洞的产生

“会话标识未更新”是中危漏洞,AppScan会扫描“登录行为”前后的Cookie,其中会对其中的JSESSIONOID(JSP)或者 ASP.NET_SessionId(ASP)进行记录。在登录行为发生后,如果cookie中这个值没有发生变化,则判定为“会话标识未更新”漏洞。

 

修复方式

JSP的修复方法可参考这位大侠的文章,我个人没有确认过: http://www.2cto.com/Article/201302/190227.html

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中,对“会话标识未更新”也提供了修改建议:

一般修订建议 始终生成新的会话,供用户成功认证时登录。防止用户操纵会话标识。请勿接受用户浏览器登录时所提供的会话标识

 

结果确认

使用代码前

[AppScan深入浅出]修复漏洞:会话标识未更新(中危)

 

使用代码后

[AppScan深入浅出]修复漏洞:会话标识未更新(中危)

 

 

为何会产生漏洞

有人会问这个漏洞为何会产生? 为什么有的站点会出现,有的站点没有使用代码却又不会出现。写在最后,我提供一个思路,这样才是深入浅出的研究问题:

 

有时候网站登录页面,并不会立刻产生SessionId,例如我写的登录页面,页面中是不会出现ASP.NET_SessionId:(使用Chrome+Edit This Cookie插件)

[AppScan深入浅出]修复漏洞:会话标识未更新(中危)

 

登录后才会出现ASP.NET_SessionId,另一个是登录代码中增加的验证Cookie。

[AppScan深入浅出]修复漏洞:会话标识未更新(中危)

 

但是当我在登录页加载之前,添加了信息在用户Session中(例如为了添加图形验证码的需要),这时候登录页加载的时候就会产生SessionId

protected void Page_Load(object sender, EventArgs e) 

{

  //产生会话标识未更新漏洞

  Session["useless"] = 1;

}

[AppScan深入浅出]修复漏洞:会话标识未更新(中危)

 

一旦登录前就有SessionId,那么AppScan就有了可以比较的SessionId,在登录后比较SessionId的变化,那么也就会产生“会话标识未更新”漏洞。

 

写在最后的最后,“会话标识未更新”的危害,在于攻击者通过某种方式(如XSS)将自己的Id置入了被攻击者的浏览器,将会话标识改为某个攻击者预设的值,被攻击者正常登陆,若服务器接收了这个预设值,那么相当于攻击者获得了被攻击者登录后的权限,因此才要求在登录时更新会话标识