1简介
XSS是一种发生在Web前端的漏洞,所以其危害的对象也主要是前端用户
XSS漏洞可以用来进行钓鱼攻击、前端js挖矿、盗取用户cookie,甚至对主机进行远程控制
 
攻击流程#
 假设存在漏洞的是一个论坛,攻击者将恶意的JS代码通过XSS漏洞插入到论文的某一页面中
 当用户访问这个页面时,都会执行这个恶意的JS代码,这个代码就会在用户的浏览器端执行
XSS攻击类型#
 危害:存储型 > 反射型 > DOM型
反射型:交互的数据一般不会被存在数据库里面,一次性,所见即所得,一般出现在查询页面等
 存储型:交互的数据会被存在数据库里面,永久性存储,一般出现在留言板,注册等页面
 DOM型:不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性,也属于反射型
 XSS形成原因#
 形成XSS漏洞的主要原因是程序中输入和输出的控制不够严格
导致“精心构造”的脚本输入后,在输出到前端时被浏览器当作有效代码解析执行
XSS漏洞测试流程#
 ① 在目标上找输入点,比如查询接口、留言板
② 输入一组 “特殊字符(>,',"等)+唯一识别字符” ,点击提交后,查看返回源码,看后端返回的数据是否有处理
③ 通过搜索定位到唯一字符,结合唯一字符前后语法确定是否可以构造执行js的条件(构造闭合)
④ 提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在XSS漏洞
 
实战
1反射型xss(get)
1.1
 发现未过滤特殊字符,存在构造js代码的可能。
 1.2因为对字符长度做了限制 ,需要首先在前端修改长度限制
 
 将maxlength调大
 1.3构造js代码
<script>alert("xss")</script>
 

2反射型xss(post)
2.1成功登录后
 
 发现未过滤特殊字符
 2.2
 
 可在此处直接插入js代码,发现可以执行。
 另一种是拦截包后,在message中构造js代码
 
3.存储型xss
3.1发现并未过略特殊字符
 
 3.2直接在留言板构造js,可成功弹窗
 
4DOM型XSS
4.1输入发现特殊字符未过滤
 
 4.2查看源代码,寻找合理闭合方式


' οnclick="alert('xss')">     添加a标签的属性,从而达到闭合
 
5DOM型XSS-x
5.1原理
 
点击a标签就会执行domxss()函数
 
 查看domxss()发现,domxss就是将输入的值,和原本输出的值做一个拼接。
构造的代码和dom型xss一样
' οnclick="alert('xss')">     添加a标签的属性,从而达到闭合
 
6xss盲打
在每一个交互输入栏,插入js代码,从而达到攻击效果。
 
<script>alert("xss")</script>
 
登录后台,发现xss成功弹窗
7xss过滤

核心思路:本题目发现,只要切换script标签切换成大写就能绕开过滤
<SCRIPT>alert('111')</SCRIPT>
 

 成功弹窗
7xss之htmlspecialchars
7.1原理
 htmlspecialchars()是PHP里面把预定义的字符转换为HTML实体的函数
预定义的字符是
& 成为 &
" 成为 "
' 成为 '
< 成为 <
 >成为 >
可用引号类型
ENT_COMPAT:默认,仅编码双引号
ENT_QUOTES:编码双引号和单引号
ENT_NOQUOTES:不编码任何引号
 
7.2本题实践
 
 前端输入后,发现在html上已经被转换成html实体
 
 对比发现,只有单引号和()未被编码,所以这里仅有单引号可以使用。
 7.3尝试xss
 
 hack' οnclick='alert(1) 
 

 观察原代码 ,成功闭合,成功弹窗。
8xss之herf输出
8.1试试是否过滤了特殊字符
 
 发现没有过滤
8.2
 8.2.1
javascript:alert(111)
 
网页源代码为
 
 可成功弹窗
9xss之js输出
发现输入的字符串处于js中,尝试用
</script><script>alert('Bye~')</script>
 

 成功弹窗










