XSS
原理
往Web页面里插入恶意脚本代码,当用户浏览该网页时,嵌入其中Web里面的脚本代码会被执行
分类
反射型、存储型、DOM型
DOM型与反射型、存储型不通,DOM型整个过程都是在前端完成的,没有后端的参与
产生位置
目标站点上存在输入点,比如查询接口,留言板等,且没有对输入特殊字符进行过滤
反射型xss(get)

先输入测试
可以看到输入的都被显示了出来

使用开发者工具在源码中查找刚才的输入

可以看到所有特殊字符都原封不动的输入到了p标签中
这时可以构造脚本输入
<script>alert(1)
发现文本框不够大,查找文本框长度,调大长度

提交后成功弹窗

反射型xss(post)
根据提示给的用户名和密码进行登录

提交 <script>alert(1) 即可弹窗
提交
<script>alert(document.cookie)
弹出cookie

post型和get型,传参方式不同,get型可以通过url来利用漏洞
存储型xss
存储型xss恶意脚本存储在服务器上,用户访问网页时会触发存储型xss

留言测试,可以看到留言的内容直接放到了<p>中

可以留言<script>alert(1)
用户在访问页面时会除发xss


DOM型xss
DOM型与反射型、存储型不通,DOM型整个过程都是在前端完成的,没有后端的参与

输入进行测试

发现只有123被显示了出来
查看源码,搜索输入

查看dom

这里可以看到提示,通过对这个函数的用法也能看出来,需要使用’进行闭合后,提交
'><img src=“#” οnmοuseοver=“alert(1)”>
当鼠标放到图片上时就会弹窗

存储型xss-x

输入测试,输入后get传参,出现链接

点击链接后变成text=123#

查看源代码寻找输入

查看domxss函数,通过函数可以知道如何构造脚本
注释依然给出了答案

输入
'><img src=“#” οnmοuseοver=“alert(1)”>
点击链接后出现图片,将鼠标放到图片上弹窗

通过阅读源码可知,第一次提交内容get形式传参text=输入的内容,url发生改变
点击第一个链接后,调用domxss()函数,函数从通过get方式传参取得text的内容(输入内容),并对其进行过滤
xss之盲打
存储型xss

提交输入后没有回显
可以在后台看到提交的内容

而且发现都是直接将内容放在html中
因此可以提交脚本

当管理员访问后台数据时可以发送xss攻击


xss之过滤
发现输入的<script>alert(1) 只显示了>,其他部分都被过滤了

查看后端源码,发现只要是script都会被过滤

可以使用其他的方法
虽然对输入的script进行了过滤,但是还是直接把内容放在了<p>中

提交
<img src=“#” οnerrοr=“alert(1)”>
去显示#这个图片,如果报错就弹窗

xss之htmlspecialchars
题目提示了htmlspecialchars,此题使用了htmlspecialchars进行转义
可以看到提交的"<>被转义

htmlspecialchars() 函数把预定义的字符转换为HTML实体,预定义的字符是:
- &(和) 转为 &
- "(双引号) 转为 "
- '(单引号) 转为 '
- <(小于号) 转为 <
- >(大于号) 转为 >
可用的引号类型
ENT_COMPAT - 默认。 仅编码双引号
ENT_QUOTES - 编码双引号和单引号
ENT_NOQUOTES - 不编码任何引导
尝试绕过htmlspecialchars(),可以尝试使用单引号,因为默认只注释双引号
’ οnclick=‘alert(1)’

点击链接后,弹窗
也可也使用,避免被过滤
javascript:alert(1)

xss之href输出
输入后

尝试构造
发现双引号被转义

可以使用JavaScript来进行弹窗
javascript:alert(1)

xss之js输出
尝试提交后,没有变化
url改变,为get传参,在源码中搜索提交的内容

可以看到输入被动态的生成到了javascript中

直接放在了<script>中,可以尝试闭合前面的单引号,增加alert
'; alert(1); ’

成功弹窗

本文深入讲解了XSS攻击原理及分类,包括反射型、存储型和DOM型XSS,并通过实例演示了各种类型的XSS攻击手段和技术细节。
2132

被折叠的 条评论
为什么被折叠?



