具体的上一篇也介绍了。。直接实践出真知。。。。
反射型xss(get)
<script>alert(1)</script>
方法1:
链接提交把payload提交上去
方法2:
前端做了一个限制文本框长度 F12直接修改文本框输入限制即可
反射型xss(post)
<script>alert(1)</script>
bp直接爆破账号密码 得出账号密码admin/123456 直接登录
这关比较简单 也没有输入限制。。
存储型xss
<script>alert(document.cookie)</script>
提交后显示
留言板也多了一条
查看源代码可以看到payload在html代码中
DOM型xss
直接输入<script>alert(1)</script>
试试
回显了一条a标签 我们来查看源代码看看
利用了DOM将字符串进行了拼接并把值给a标签的href,然后输出一个what do you see?
所以我们可以利用已知条件构建payload效果为弹窗,弹窗内容为111
<a href='#' onclick="alert(111)">'>what do you see?</a>
则payload
#' onclick="alert(111)">
成功
来看下源代码的情况
DOM型xss-x
和上一题一个原理 也是用上一题的payload
DOM型XSS只在前端,与后端毫无关系。DOM-X型危害更大,它能够像反射型一样在URL中体现,将URL发给了受害者就能进行攻击。
xss之盲打
发现是一个留言板 随便输入点东西,提交之后发现输入的东西完全不显示在页面上
查看源代码之后 输入的是以post方法提交 但是不知道会提交到哪里呢
点击提示后 原来是有个后台 我们打开后台看一下
<script>alert(document.cookie)</script>
我们直接上前端跑一下这个代码 因为是提交到后端 所以后端才会弹出
去后端看看情况
触发了两次 说明两个输入框都没有做对应的xss防御 所以留言框也得做xss防护哦!
xss之过滤
随便输入一些内容,提交之后发现页面有回显输入的内容,url中也有输入的内容,离开本页面再回来,页面就没有这个内容了,说明是反射型GET型XSS
跑一下payload 发现只有一个> 说明是做了过滤处理
可以看出来是过滤了<>script
方法1:
<sCripT>alert(1)</ScRipT>
跑这串代码发现可以成功
方法2:
<a herf="#" onclick="alert(1)">
也可以跑起来 不过需要点击超链接
xss之htmlspecialchars
老样子 先跑 <script>alert(1)</script>
可以看出来这里是有个a标签的 通过源代码发现不管是<a>
标签内还是href属性内,左右尖括号被编码了,因此这关想闭合标签是不行了。仔细一看,又发现单引号居然没有被html编码,可以可以,利用一下<a>
标签吧。
输入
#' onclick='alert(1)'
看是否闭合成功
成功弹窗
xss之href输出
先跑<script>alert(1)</script>
没有弹窗
鼠标右键–查看网页源代码,发现左右尖括号和单引号都被html编码了,这样的话,闭合标签或者闭合属性都行不通了。
但也不是没办法了,W3School中对<a>
标签的href属性有以下描述(引用摘自HTML <a>
标签的 href 属性):
<a>
标签的 href 属性用于指定超链接目标的 URL。
href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。如果用户选择了<a>
标签中的内容,那么浏览器会尝试检索并显示 href 属性指定的 URL 所表示的文档,或者执行 JavaScript 表达式、方法和函数的列表。
从上述描述可见,这边可以利用JavaScript协议。输入
javascript:alert(1)
成功
xss之js输出
<script>alert(1)</script>
跑一下没有弹窗 看看源代码
跑到script里面去了 但是并没有被编码 所以可以直接闭合 然后再用//注释掉老语句遗留下来的';
';alert(1);//
成功弹窗