pikachu靶场之XSS通关

200 阅读3分钟

具体的上一篇也介绍了。。直接实践出真知。。。。

反射型xss(get)

<script>alert(1)</script>

方法1:

image.png

链接提交把payload提交上去

方法2:

前端做了一个限制文本框长度 F12直接修改文本框输入限制即可

反射型xss(post)

<script>alert(1)</script>

bp直接爆破账号密码 得出账号密码admin/123456 直接登录

这关比较简单 也没有输入限制。。

image.png

存储型xss

<script>alert(document.cookie)</script>

image.png

提交后显示

image.png

留言板也多了一条

image.png

查看源代码可以看到payload在html代码中

image.png

DOM型xss

直接输入<script>alert(1)</script>试试

image.png

回显了一条a标签 我们来查看源代码看看

image.png

利用了DOM将字符串进行了拼接并把值给a标签的href,然后输出一个what do you see?

所以我们可以利用已知条件构建payload效果为弹窗,弹窗内容为111

<a href='#' onclick="alert(111)">'>what do you see?</a>

则payload

 #' onclick="alert(111)">

image.png

成功

来看下源代码的情况

image.png

DOM型xss-x

和上一题一个原理 也是用上一题的payload

DOM型XSS只在前端,与后端毫无关系。DOM-X型危害更大,它能够像反射型一样在URL中体现,将URL发给了受害者就能进行攻击。

image.png

xss之盲打

发现是一个留言板 随便输入点东西,提交之后发现输入的东西完全不显示在页面上

image.png

查看源代码之后 输入的是以post方法提交 但是不知道会提交到哪里呢

image.png

点击提示后 原来是有个后台 我们打开后台看一下

image.png

image.png

<script>alert(document.cookie)</script>

我们直接上前端跑一下这个代码 因为是提交到后端 所以后端才会弹出

image.png

去后端看看情况

image.png

触发了两次 说明两个输入框都没有做对应的xss防御 所以留言框也得做xss防护哦!

xss之过滤

随便输入一些内容,提交之后发现页面有回显输入的内容,url中也有输入的内容,离开本页面再回来,页面就没有这个内容了,说明是反射型GET型XSS

image.png

跑一下payload 发现只有一个> 说明是做了过滤处理

image.png

可以看出来是过滤了<>script

image.png

方法1:

<sCripT>alert(1)</ScRipT>

跑这串代码发现可以成功

image.png

方法2:

<a herf="#" onclick="alert(1)">

image.png

也可以跑起来 不过需要点击超链接

xss之htmlspecialchars

老样子 先跑 <script>alert(1)</script>

image.png

可以看出来这里是有个a标签的 通过源代码发现不管是<a>标签内还是href属性内,左右尖括号被编码了,因此这关想闭合标签是不行了。仔细一看,又发现单引号居然没有被html编码,可以可以,利用一下<a>标签吧。

image.png

输入

#' onclick='alert(1)'

看是否闭合成功

image.png

成功弹窗

image.png

xss之href输出

先跑<script>alert(1)</script> 没有弹窗

image.png

鼠标右键–查看网页源代码,发现左右尖括号和单引号都被html编码了,这样的话,闭合标签或者闭合属性都行不通了。

image.png

但也不是没办法了,W3School中对<a>标签的href属性有以下描述(引用摘自HTML <a>标签的 href 属性):

<a>标签的 href 属性用于指定超链接目标的 URL。

href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。如果用户选择了<a>标签中的内容,那么浏览器会尝试检索并显示 href 属性指定的 URL 所表示的文档,或者执行 JavaScript 表达式、方法和函数的列表。

从上述描述可见,这边可以利用JavaScript协议。输入

javascript:alert(1)

image.png

成功

xss之js输出

<script>alert(1)</script>

跑一下没有弹窗 看看源代码

image.png

跑到script里面去了 但是并没有被编码 所以可以直接闭合 然后再用//注释掉老语句遗留下来的';

';alert(1);//

image.png

成功弹窗