介绍
XSS全称:跨站脚本(Cross Site Scripting) ,又称跨站脚本攻击,是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种,服务器对用户提交的数据过滤不严,导致浏览器把用户的输入当成了JS代码并直接返回给客户端执行,从而实现对客户端的攻击目的。
xss漏洞分为三种:反射型,存储型和DOM型
相关知识准备
测试语句
以下所有标签的 > 都可以用 // 代替, 例如
1 | <script>alert(1)</script// |
1 | ##<script>标签 |
插入位置
- 用户输入作为script标签内容
- 用户输入作为HTML注释内容
- 用户输入作为HTML标签的属性名
- 用户输入作为HTML标签的属性值
- 用户输入作为HTML标签的名字
- 直接插入到CSS里
1 | #用户输入作为HTML注释内容,导致攻击者可以进行闭合绕过 |
原理
反射型xss
反射型xss漏洞又称非持久型xss漏洞,攻击往往是一次性的,非持久化,需要欺骗用户自己去点击链接才能触发xss代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。反射型xss大多数是用来盗取用户的Cookie信息。
攻击者通过发送电子邮件等方式将包含xss代码的恶意链接发送给目标用户,当用户目标访问该链接时,服务器会接收该目标用户的请求并进行处理,然后服务器把带有xss代码的数据发送给目标用户的浏览器,浏览器解析了这段带有xss代码的恶意脚本后,就会触发xss漏洞。
下边拿pikachu靶场的xss漏洞举例,当我们在保单提交的页面提交数据后,数据会被输出到输出表单中,譬如下图,我们可以看到当我们输入11后,表单会回显我不在乎谁是11。
此时我们发现页面的url变成了下图的模样,那么如果我们将xss语句写在messege里,我们会发现这里执行了我们的弹窗,说明代码被执行了,呢如果我们将代码换一下,换成document.cookie,我们会发现我们拿到了cookie的值
存储型xss
相较于反射型XSS,存储型XSS具有持久性特点。攻击者将恶意脚本永久地存储在目标服务器上,例如在博客文章内容、用户个人资料、论坛帖子等位置。每当任何用户访问到包含此类恶意内容的页面时,浏览器都会执行其中的恶意脚本。
例如,攻击者在发帖的过程中,将恶意脚本(例如下边的payload)连同正常信息一起注入帖子的内容中,随着帖子被服务器存储下来,恶意脚本也会存放在服务器的后端存储器中,当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行。
1 | <script>alert(/hack by hacker/)</script> |
DOM型xss漏洞
这种类型的XSS不涉及服务器端的数据存储,而是发生在客户端层面,即浏览器解析和动态修改DOM树的过程中。如果Web应用程序错误地使用来自不可信源的数据更新DOM,并且没有实施恰当的防御措施,攻击者就可以利用DOM-XSS漏洞注入恶意脚本。
这里也是以pikachu靶场domxss举例,输入任意内容,发现what do you see字样,来到控制台ctrl + F来搜索这句话,发现一个js里存在这句话,我们闭合之后使用payload,点击出现的what do you see就可以弹窗
1 | ' onclick="alert('ourobros')"> |