目录
XSS(跨站脚本攻击漏洞)概述
一.反射型xss
反射型XSS将用户输入的内容作为代码让浏览器执行达到攻击目的,一般需要让用户访问攻击者构造的URL。这种类型的攻击只发生在客户端上,并且需要从带有恶意脚本参数的特定URL进入,所以也称为非持久型XSS。
交互的数据一般不会被存在在数据库里面,一次性,所见即所得,一般出现在查询类页面等。
1.1 反射型xss(get)
构造payload:
<script>alert(111)</script>
发现对长度进行了限制
修改源代码将原本的20修改为2000
输入构造好的payload,成功
因为是反射性,一次性的,刷新页面之后弹窗消失。这个xss实际上是以get的方式提交的。
1.2 反射性xss(post)
登录一下admin 123456
同样操作构造payload:<script>alert(111)</script>
总结
1.GET和POST典型区别:GET是以url方式提交数据;POST是以表单方式在请求体里面提交。通过get提交的数据是可以直接在url中看到的,所以GET方式的XSS漏洞更加容易被利用
2.(1)post更安全(不会作为url的一部分,不会被缓存、保存在服务器日志、以及浏览器浏览记录中)
(2)post发送的数据更大(get有url长度限制)
(3)post能发送更多的数据类型(get只能发送ASCII字符)
(4)post比get慢
(5)post用于修改和写入数据,get一般用于搜索排序和筛选之类的操作
3.反射型xss,这种攻击的特点是非持久化。
二. 存储型xss
存储型XSS漏洞跟反射型形成的原因一样,不同的是存储型XSS下攻击者可以将脚本注入到后台存储起来,构成更加持久的危害,因此存储型XSS也称“永久型”XSS。
先随便输一点发现留言被存储,输入特殊字符也能被直接输出
所以直接构造payload:<script>alert(111)</script>,出现弹窗
道理与反射性差不多,唯一区别就是永久和一次性。
三. DOM型xss
什么是DOM?
简单来说DOM文档就是一份XML文档,当有了DOM标准之后,DOM便将前端html代码化为一个树状结构,方便程序和脚本能够轻松的动态访问和更新这个树状结构的内容、结构以及样式,且不需要经过服务端,所以DOM型xss在js前端自己就可以完成数据的输入输出,不与服务器产生交互,这样来说DOM型xss也可以理解为反射性xss。
下面看一个DOM将html转换为树状结构体,深入的理解DOM结构标准:
图片来源关于DOM型XSS的深入解析(收藏)_告白热的博客-CSDN博客
通过JavaScript,可以重构整个HTML文档。可以添加、移除、改变或重排页面上的项目。
要改变页面的某个东西,JavaScript 就需要获得对HTML文档中所有元素进行访问的入口。这个入口,连同对HTML元索进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的( DOM) 。
所以,你可以把DOM理解为一个一个访问HTML的标准编程接口。
显示结果是what do you see?,看起来应该是A标签,打开页面源代码
观察代码可以发现输入的字符串被拼接到了a标签当中。其中输入就是input也就是输入框,蓝框框选的就是我们的输入。
<a href='"+str+"'>what do you see?</a>
把这条语句拿出来分析,利用输入构造一个闭合
还是输入一个弹窗,在input输入 ' οnclick="alert('111')">
构成a标签闭合,且嵌入一个弹窗。<a href=
' οnclick="alert('xss')"> '>what do you see?</a>
DOM型xss-x
和上面操作一样,出现弹窗
四. xss之盲打
“xss盲打”是指在攻击者对数据提交后展现的后台未知的情况下,网站采用了攻击者插入了带真实攻击功能的xss攻击代码(通常是使用script标签引入远程的js)的数据。当未知后台在展现时没有对这些提交的数据进行过滤,那么后台管理人员在操作时就会触发xss来实现攻击者预定好的“真实攻击功能”。
也就是只有从后台才能看到前端输入的内容,从前端无法判断是否存在xss
以上内容摘自xss之盲打、过滤、htmlspecialchars、herf输出、js输出_xss之htmlspecialchars_要努力。。的博客-CSDN博客
xss盲打指的是一种攻击场景
打开xss之盲打,随便输入看看是什么效果
输入的内容并不会在前端输出,看起来应该是存到了后台,也就是说可能只有管理员可以看。输入<script>alert('xni')</script>
,设置一个弹窗,看看管理员在后台登陆上,是否会被x到。如果被x到这种场景就叫做盲打。
输入之后提交,点击提示,模拟后台管理员,登录后台进行查看(右上角有登录地址)
登录网址
输入用户密码后点击登录
触发了xss
四. xss之过滤
可以通过大小写混合绕过
<SCRIpt>alert(111)</SCRIpt>
也可以通过img标签绕过
img是html标签,用于展示图片的,src属性指定图片及其位置,onerror是事件,当图片加载不出来、加载出问题时触发onerror事件,显示onerror指定的图片,将onerror的值设为alert注入,如果网站没有进行过滤时,会运行这个代码弹窗
<img src=x onerror="alert('img标签')" />
五. xss之htmlspecialchars
htmlspecialchars()函数把预定义的字符转换为HTML实体
&(和号)成为&
"(双引号)成为"
'(单引号)成为'
<(小于)成为<
‘>’(大于)成为>
现在输入框输入一些特殊字符
查看源码,发现没有对单引号进行过滤
可以输入' οnclick='alert(111)',第一个单引号是对前面进行闭合
六. xss之href输出
href这里有一个输出漏洞:输出在a标签的href属性里面,可以使用javascript协议来执行js,在输入时候只允许是http,https协议,只有这两种协议才可以进行输出,如果不是的话就不允许输入。之后再进行htmlspecialchars函数过滤。
先来看看后端的代码
查看源码发现,虽然对htmlspecialchars()函数做了额外的处理,但是,它把输出放在了a标签的href属性里
输入payload,点击”阁下自己输入的url还请自己点一下吧“,然后发现出现弹窗
javascript:alert(111)
七. xss之js输出
先随便输入
查看源码,发现输入点是ms
输入'</script><script>alert('xss')</script>,先将前面的script闭合再插入我们自己的语句,出现弹窗