什么是XSS?
XSS(Cross SiteScripting)跨站脚本,较合适的方式应该叫做跨站脚本攻击,诞生于1996年,人们经常将跨站脚本攻击(Cross Site Scripting)缩写为CSS,但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,有人将跨站脚本攻击缩写为XSS。
xss分类:
反射型(非持久型):
攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发漏洞。
存储型(持久性):
payload被存储到数据库内,每次只要访问就可以被触发。
DOM型:
DOM型xss漏洞是基于文档对象模型(Document Object Model,DOM)的一种漏洞。
xss是怎么形成的?
由于程序员在编写代码时,未对用户输入的数据进行处理、或者处理不当,从而导致恶意payload代码被执行。简单来说是对非预期输入的过分信任!
反射型xss触发原理
存储型xss触发原理
DOM型xss触发原理
各种类型的区别
xss有什么危害?
反射型XSS漏洞
<script>
标签,提交,发现被插入页面中。<script>alert(/1/)</script>
、<script>confirm(/test/)</script>
或者<script>prompt(/xss/)</script>
</script>confirm('1')</script>
,在语言后面输入,触发成功!BeEF是什么?
BeEF( The Browser Exploitation Framework) 是由Wade Alcorn 在2006年开始创建的,至今还在维护。是由ruby语言开发的专门针对浏览器攻击的框架。
BeEF原理
zombie(僵尸)即受害的浏览器。zombie是被hook(勾连)的,如果浏览器访问了有勾子(由js编写)的页面,就会被hook,勾连的浏览器会执行初始代码返回一些信息,接着zombie会每隔一段时间(默认为1秒)就会向BeEF服务器发送一个请求,询问是否有新的代码需要执行。BeEF服务器本质上就像一个Web应用,被分为前端UI和后端。前端会轮询后端是否有新的数据需要更新,同时前端也可以向后端发送指示, BeEF持有者可以通过浏览器来登录BeEF 的后台管理UI。
模块图标不同颜色对应不同的使用效果
绿色:适用当前浏览器
橙色:适用当前浏览器,但易被用户发现,social engineering模块默认为橙色
红色:不适于当前浏览器,但仍可尝试
社会工程学
如果使用BeEF控制了浏览器,那么就可以修改整个页面来尝试社会工程学
1、提交登录信息
简单粗暴往往是最有效的
Pretty Theft模块:
在网页弹出诱骗消息需要用户输入登录和密码,并解释该会话已超时
选择的登录框模板
进阶利用二:利用XSS平台
COOKIE介绍:
Cookie 是一些数据, 存储于你电脑上的文本文件中。
当web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。
Cookie 的作用就是用于解决 “如何记录客户端的用户信息”:
当用户访问 web 页面时,登录信息可以记录在 cookie 中。
在用户下一次访问该页面时,可以在 cookie 中读取用户访问记录。
cookie是有时效性的且遵循同源策略。
漏洞挖掘
总体来说就一句话,见框就插,但是一定要注意闭合标签!尤其存储型xss,如果不闭合有可能把站点的功能点搞坏!
常见的地方如下:
1、搜索框
2、URL地址栏
3、留言板
4、登录处
说白了就是各种输入输出点的地方!
<script>alert('1')</script> <svgοnlοad=prompt(1);> <body onl oad=prompt(1);> <a onclick=alert(1)>M <img/src/οnerrοr=alert(1)> <img src=x οnerrοr=alert('1')> <marquee/onstart=confirm(1)> <a href="javascript:alert('1')">link</a> <button/Onclick=alert(1)>M <audio src=1 onl oadstart=alert(1)> <iframe/οnlοad=alert(1)></iframe> <iframe src=javascript:alert(1)> <video/src/οnerrοr=prompt(1);> <input/οnfοcus="alert('1')"/autofocus/>
实际挖过程中,会遇到各种状况,因此要灵活使用前面学到的js事件和一些标签去自行构造payload。
1、大小写绕过
使用大小写来绕过,如script变成ScrIpT
2、双写绕过
黑名单过滤script关键字时,可以使用双写绕过<scr<script>ipt>
3、闭合标签
有时候要关闭标签来使XSS生效。
比如:“><script>alert(“Hi”);</script>
4、url编码绕过
<script>alert(“xss”);</script>
可以转换为:
%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%22%78%73%73%22%29%3b%3c%2f%73%63%72%69%70%74%3e
5、空格/回车/Tab
许多过滤匹配特殊的标签,包括起始与结束尖括号。但是,许多浏览器接受结束括号前的空白符,允许攻击者轻易避开这种过滤。例如: <script >
6、双尖括号绕过
一些过滤匹配成对的起始与结束尖括号,提取其中的内容,并将这些内容与标签名称黑名单进行比较。可以通过使用多余的括号避开过滤。
<<script>alert(document.cookie);//<</script>
7、空字节绕过
即使空字节后面的文本仍然在应用程序的响应中返回,但如果遇到空字节,一些过滤会停止处理字符串。在被过滤的表达式前插入一个URL编码的空字节即可避开这种过滤。
foo%00<script>
8、构造事件绕过
如果不能依靠属性进行跨站,那么还可以利用事件处理函数
<input type = "button" value = "clickme" οnclick="alert(‘click me‘)" />
事件既能让JS脚本运行,自然也可以执行跨站,另外像onerror、onMouseover等都可利用的是事件处理函数。
漏洞修复
1、输入检查
白名单
同时在客户端JavaScript中和服务器端代码中实现相同的输入检查
2、输出检查
HTML编码
js转义
3、HttpOnly
浏览器禁止页面的JavaScript访问带有HttpOnly属性的cookie。HttpOnly解决的是XSS后的Cookie劫持攻击。