总体来看,利用这样的漏洞,需要以下一些东西:
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的内容放这里:
用于提交SESSIONID到a.php。下面是一个COOKIE的内容:
请注意图片中的“ASPSESSIONIDASQCSSRT=PIMHLBHCDAPCDLMNLFBGHCIB”这部分,这里就是一个SESSIONID和它的值。不仅仅是每次新的SESSIONID的值不一样,“ASPSESSIONIDASQCSSRT”这个KEY的名字,也是不同名称的。但是他逃脱不了一种模式,就是SESSIONID的名字,改来改去,总要让服务器认识。结合几次抓包内容,发现,这个字符串没有固定的名称,也没有固定的值,但是他总是以“ASPSESSIONID”开头。所以才会有了这段生涩难解的XSS代码。
php代码,用于接收提交过来的SESSIONID,保存:
$fp = fopen("haha.txt","wb");
fwrite($fp,$_GET["id"].",".$_GET["value"],strlen($_GET["id"].",".$_GET["value"]));
fclose($fp);
?>
下面先执行go.py。