目录
一.XSS漏洞概述
XSS漏洞,全称跨站脚本(Cross Site Scripting),是一种常见的Web应用程序安全漏洞。它允许攻击者在受害者的浏览器中注入恶意脚本,当受害者访问包含这些恶意脚本的网页时,攻击者就可以利用这些脚本执行任意代码,从而进行恶意活动。
1.原理
XSS漏洞的形成主要原因是服务器对用户提交的数据过滤不严,导致浏览器将用户的输入当作javascript代码直接执行。攻击者通过向Web页面插入恶意代码,当管理员或用户访问时,恶意脚本会触发并执行,从而达到攻击者的目的。
2.分类
(1)反射型XSS(中低危):这种攻击方式往往具有一次性,攻击者通常通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。
(2)存储型XSS(高危):常见于论坛,留言等交互性强的功能中,恶意脚本被永久的保存在服务器端的数据库或文件中,可以被多次执行,对多个用户造成威胁。
(3)DOM型XSS(中低危):攻击者通过修改网页的DOM结构来注入恶意脚本
3.危害
- 盗取各种用户账号
- 窃取用户资料,比如劫持用户cookie,冒充用户身份进入网站
- 执行弹窗广告
- 传播蠕虫病毒
- 挂马(水坑攻击)
- 有局限性的键盘记录
二.pikachu靶场练习
1.反射型XSS
在输入框中输入zhangsan,得到下图
然后根据源代码提示输入kobe
输入弹窗的代码来测试是否存在XSS漏洞
(要修改input的长度限制)
点击提交就会出现弹窗
因此就存在XSS漏洞;当再次刷新界面时,将不会有弹窗,是因为反射型XSS只会执行一次。
2.存储型XSS
同理,在输入框中输入弹窗代码,会显示弹窗
当再次刷新界面时,仍然会出现弹窗
3.DOM型XSS
继续输入弹窗代码,发现输入的内容被放到a标签的href属性中
根据SQL注入的思想,将a标签闭合
'</a><script>alert(1)</script><a>
三.XSS测试网站
XSS Game - Learning XSS Made Simple! | Created by PwnFunction
Ma Spaghet!
innerHTML禁用了<script>alert()</script>标签,因此使用img
Jefff
给jeff一个值,将值传递给ma
闭合ma 即可
Ugandan Knuckles
这里过滤了尖括号,也就不能使用script标签,使用onfocus和autofocus通过获取焦点再自动获取焦点,触发代码
Ricardo Milos
传给ricardo一个值,通过submit提交,经过2s把传入的值传给ricardo,其中action是伪协议
Ah That's Hawt
这里将() \ 等符号进行了过滤,对符号进行了编码,因此使用location转为字符串即可
Ligma
这里过滤大小写和数字,解法为编码,使用jsfuck工具
再进行url编码后传给balls即可
Mafia
限制了传参的最大长度以及过滤一些符号,函数;可以使用构造函数
Function构造了ALERT(1337)的函数,使用source调用函数的源码,对ALERT(1337)进行转换小写的操作即可绕过限制条件
Ok, Boomer
这里有过滤框架DOMPurify,会把危险属性过滤掉,但是在定时函数中的ok,源码中没有关于ok的定义,因此可以使用DOM破坏
这里经过源码处理后,把href中的内容作为字符串传递给ok,输入后发现没有弹出1337,是因为javascript是DOMPurify框架的黑名单,把javascript换为白名单即可