OWASP TOP10之XSS简述

☢一、什么是XSS?

XSS全称(Cross Site Scripting)跨站脚本攻击,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017年度分别为第三名和第七名,XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的危险代码,当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。

    XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行“服务端”攻击,因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。

    XSS攻击最终目的是在网页中嵌入客户端恶意脚本代码,最常用的攻击代码是javascript语言,但也会使用其它的脚本语言,例如:ActionScript、VBscript。而如今的互联网客户端脚本基本是基于Javascript,所以如果想要深入研究XSS,必须要精通Javascript。

    XSS换句话说,JavaScript能做到什么效果,XSS的胃口就有多大。这完全不是危言耸听。javascript可以用来获取用户的cookie,弹出窗口,那么存在XSS漏洞的网站,XSS就可以用来盗取用户Cookie,废掉页面,导航到恶意网站!更高端的XSS代码完全可以进行监控你的键盘操作,模仿Windows注销界面,诱导你输入开机密码!而攻击者需要做的仅仅是向你的代码中注入Javascript代码!

☢二、XSS出现的原因

程序员对输入和输出的控制不够严格,导致“精心构造”的脚本输入后,再输到前端时被浏览器当做有效代码解析执行并产生危害。

☢三、XSS产生的危害

1、首先对于那些半年没有更新的小企业网站来说,发生XSS漏洞几乎没有什么用。一般在各类的社交平台,邮件系统,开源流行的Web应用,BBS,微博等场景中,造成的杀伤力却十分强大。

2、劫持用户cookie是最常见的跨站攻击形式,通过在网页中写入并执行脚本执行文件(多数情况下是JavaScript脚本代码),劫持用户浏览器,将用户当前使用的sessionID信息发送至攻击者控制的网站或服务器中。

3、“框架钓鱼”。利用JS脚本的基本功能之一:操作网页中的DOM树结构和内容,在网页中通过JS脚本,生成虚假的页面,欺骗用户执行操作,而用户所有的输入内容都会被发送到攻击者的服务器上。

4、挂马(水坑攻击)

5、有局限性的键盘记录

☢四、XSS的类型


🧠(一)反射型XSS或不持久型XSS

特点:交互的数据一般不会被存在在数据库里面,只是简单的把用户输入的数据反射给浏览器,一次性,所见即所得。例:

<?php

$name =

  $_GET['name'];

echo

  "Welcome $name<br>";

?>


测试结果


🧠(二)储存型XSS 或持久型XSS

特点:交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性。



🧠(三)DOM XSS

特点:不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞。

🎈什么是DOM:DOM全称是Document Object Model,也就是文档对象模型。我们可以将DOM理解为,一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态地访问和修改文档内容、结构和样式。当创建好一个页面并加载到浏览器时,DOM就悄然而生,它会把网页文档转换为一个文档对象,主要功能是处理网页内容。故可以使用 Javascript 语言来操作DOM以达到网页的目的。

http://www.w3school.com.cn/htmldom/index.asp

<a href='"+str+"'>what do you see?</a>

<a href='#' onclick="alert(1111)">what do you see?</a>

<a href='#' onclick="alert(2222)">what do you see?</a>

☢五、XSS测试技巧

❤工具扫描

APPscan

awvs

burpsuite

XSSER XSSF

❤手动测试

使用手工检测Web应用程序是否存在XSS漏洞时,最重要的是考虑那里有输入,输入的数据在什么地方输出。

在进行手工检测XSS时,人毕竟不像软件那样不知疲惫,所以一定要选择有特殊意义的字符,这样可以快速测试是否存在XSS。比如测试某输入框是否存在XSS漏洞,请不要直接输入XSS跨站语句进行测试一步一步来,这样更有利于测试。

🧠第一种情况:可得知输出位置

输入一些敏感字符,例如<、>、"、'、()等等,在提交请求后去查看HTML源代码,看这些输入的字符是否被转义。

在输出这些敏感字符的时候,很有可能程序已经做过了过滤,那么你在寻找这些字符的时候就不是那么容易了,这时候你可以直接输入“XXSER<>"'&”折床字符串,然后在查找源代码的时候直接进行查找XXSER或许比较方便一些。











🧠第二种情况:无法得知输出位置

非常多的Web应用程序源代码是不对外开放的,这时在进行测试XSS时就有可能无法得知输入数据到底在何处显示,比如测试某留言本是否存在XSS,那么在留言之后,你必须要经过管理员的审核才能进行显示,这时你是无法得知,你输入的数据在后台管理页面处于何种状态,例如:

         在<div>标签之中:

XSStest

         在<input>标签之中:

         对于这种情况通常会采用输入“">...”来进行测试

万能测试XSS漏洞代码:"/></textarea><script>alert(1)</script>

有些情况手工检测漏洞效率比全自动检测软件更快(漏洞验证),因为测试人员通过经验可以快速的发现输入点,这是扫描器所无法比拟的。

另外,一些XSS漏洞也不仅仅是直接注入到HTML,或者数据库中才能触发,比如在上传文件时修改文件名“<script>alert(/xss/)</script>”,那么程序在读取文件名后并将文件名显示在HTML文档中,也会处罚XSS跨站漏洞。

有着输入的地方就有可能有存在着风险,如果连输入都没有了,XSS也不必检测了,包括其他安全漏洞。

☢六、XSS会话劫持

1、Cookie是一种能够让网站服务器把少量文本数据储存到客户端的硬盘或内存,或者从客户端的硬盘或内存读取数据的一种技术。(本地存储路径:C:\ C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\cookies  分为头和值)


2、Cookie是服务器向客户端发送的一段文本数据。(burp实例操作)

3、如果本地存在Cookie,那么在请求网站的时候,将会自动的发送Cookie。(在当前IE直接输入:javascript:alert(document.cookie)可以查当前网页的cookice)

         baidu.com--> a ;   google.com --- b ;(b不会跨域使用a的cookice来打开b的站)

4、实例验证cookice登陆与注销(burp删除/增加cookice观看郊果)

5、当我们拿到了用户的Cookie后,就可以使用这个用户的身份进行登陆。但并不是绝对的。

☢七、XSS绕过

    大多数网站为了避免xss的攻击,对于攻击者的输入都采取了过滤的措施,导致攻击者通常不能正常插入恶意代码来达到攻击目的。但是仍存在一些漏洞可以利用,来绕过过滤措施。

    xss绕过的方法有许多,主要取决于攻击者的思路和对前端技术的掌握,以下介绍几个简单的绕过方法。

(1)对前端的限制可以尝试进行抓包重发或者修改前端的HTML。

(2)防止后台对输入的内容进行正则匹配来过滤输入,对于这样的过滤可以考虑大小写混合输入的方法。

例:<sCRipT>alert('你打篮球像oldboy')</sCrIPt>

(3)防止后台对输入的内容进行替换,采用拼拼凑的输入方法。

例:<sc<script>ript>alert('你打篮球像oldboy')</scr<script>ipt>

(4)使用注释来干扰后台对输入内容的识别。

例:<sc<!--test-->ript>alert('你打篮球像oldboy')</scr<!--tshauie-->ipt>

(5)编码

思路:后台有可能会对代码中的关键字进行过滤,但我们可以尝试将关键字进行编码后在插入,浏览器对改编码进行识别时,会翻译成正常的代码。(注意:编码在输出时是否会被正常识别和翻译才是关键,不是所有的编码都是可以的)

  例:使用事件属性onerror(): <img src=# onerror="alert('oldboy')"/>

使用HTML进行编码: <img src=x onerror="&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#121;&#97;&#110;&#103;&#115;&#104;&#117;&#97;&#110;&#103;&#39;&#41;"/>

☢八、XSS常规防范

XSS防御的总体思路是:对输入进行过滤,对输出进行编码

过滤:根据业务需求进行过滤,比如输出点要求输入手机号,则只允许输入手机号格式的数字。

转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到JS里面的进行JS转义(\)

xss之href输出绕过:javascript:alert(1111) 直接代入a标签herf里面一样可以绕过htmlspecialchars

xss之js输出绕过:

<script>

    $ms='11'</script><script>alert(1111)</script> ;

    if($ms.length != 0){

        if($ms == 'tmac'){

            $('#fromjs').text('tmac确实厉害,看那小眼神..')

        }else {

//            alert($ms);

            $('#fromjs').text('无论如何不要放弃心中所爱..')

        }

    }

</script>


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容