Java教程

XSS漏洞

本文主要是介绍XSS漏洞,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

xss漏洞介绍和分类

什么是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有什么危害?

  • 钓鱼欺骗:最典型的就是利用目标网站的反射型跨站脚本漏洞目标网站重定向到钓鱼网站,或者注入钓鱼js以监控目标网站的表单输入,甚至发起基于DHTML更高级的钓鱼攻击方式。
  • 网站挂马:跨站时利用IFrame嵌入隐藏的恶意网站或者将被攻击者定向到恶意网站上,或者弹出恶意网站窗口等方式都可以进行挂马攻击。
  • 身份盗用:Cookie是用户对于特定网站的身份验证标志,XSS可以盗取到用户的Cookie,从而利用该Cookie盗取用户对该网站的操作权限。如果一个网站管理员用户Cookie被窃取,将会对网站引发巨大的危害。
  • 盗取网站用户信息:当能够窃取到用户Cookie从而获取到用户身份使,攻击者可以获取到用户对网站的操作权限,从而查看用户隐私信息。
  • 垃圾信息发送:比如在SNS社区中,利用XSS漏洞借用被攻击者的身份发送大量的垃圾信息给特定的目标群。
  • 劫持用户Web行为:一些高级的XSS攻击甚至可以劫持用户的Web行为,监视用户的浏览历史,发送与接收的数据等等
  • XSS蠕虫:XSS蠕虫可以用来打广告、刷流量、挂马、恶作剧、破坏网上数据、实施DDoS攻击等。

XSS靶场实战

反射型XSS漏洞

  • 登录dvwa平台,默认密码admin password,选择好等级low,然后输入laowang,发现被正常输出回显,插入<script>标签,提交,发现被插入页面中。
  • 弹窗测试,使用alter()、confirm()、prompt()函数构造弹窗js代码,发现弹窗成功,说明存在反射型xss。<script>alert(/1/)</script><script>confirm(/test/)</script>或者<script>prompt(/xss/)</script>
    存储型XSS漏洞
  • 登录dvwa平台,默认密码admin,password,选择好等级low,这是一个留言板的系统,这里name输入老王,留言内容为:我不在,别想翻墙。
  • 弹窗测试,弹窗成功!刷新下,发现依然存在!这里是因为它被写进了数据库里。
    DOM型XSS漏洞
  • DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。
  • DOM中有很多对象,其中一些是用户可以操纵的,如uRI,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM型XSS漏。
  • 查看PHP源码,发现是空的
  • 查看页面源码
  • 构造payload代码,</script>confirm('1')</script>,在语言后面输入,触发成功!

XSS进阶利用

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平台

  • 在初步探测到xss漏洞时,此时我们可以使用xss在线平台,去获取一些我们需要的信息,比如位置、键盘记录、ip、表单挟持…
  • 网上有很多在线的平台,这里我们使用 https://xsshs.cn/ 注册好账号,然后创建项目,勾选好需要的模块即可。
  • 当xss弹窗测试后,发现存在时,此时就可以使用在线平台去获取一些一信息了,这里一般获取cookie就可以了,此时便可以使用cookie去登录账户。

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劫持攻击。

这篇关于XSS漏洞的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!