开始靶场前,没有前端基础的,先往脑子里灌几个前端知识
在这里插入图片描述
网站是: http://test.ctf8.com/ ,挑战是XSS七关这个
在这里插入图片描述

第一关

一般第一关都是最基础的,直接试

<script>alert(1)</script>

在这里插入图片描述

第二关

使用基础版payload测试,看到script被过滤
在这里插入图片描述
试试大小写绕过,成功了

<Script>alert(1)</sCript>

在这里插入图片描述

第三关

大小写绕过也被过滤
在这里插入图片描述
试试双写script能不能绕过,成功了

<​scr<script>ipt>alert(1)<​/sc</script>ript>

在这里插入图片描述
双写绕过的原理是:后端程序通过将 script 替换为空字符串的方式进行过滤,导致通过构造嵌套结构,在过滤掉中间一层后,剩余字符可重新拼接成合法的标签。

第四关

使用script和script的大小写、双写都提示报错
在这里插入图片描述
看来是过滤了script关键字,只能换成不含script的,还记得最开始我们提到的img标签和onerror 事件吗

<​img src=x onerror=alert(1)>

onerror 是一个事件处理器,当元素加载资源出错时被触发执行 。由于 ‘src=x’ 指向一个不存在的资源,浏览器在解析时会抛出加载错误并触发 onerror 执行alert(1)。

执行路径:src=x (无效路径) -> 触发 onerror -> 执行 alert(1)
在这里插入图片描述

第五关

仍然是script会报错
在这里插入图片描述
尝试上一关的payload,也报错了
在这里插入图片描述
试一下是哪个被拦了,发现是alert(因为去掉alert(1)之后就不报错了)
在这里插入图片描述
用prompt替换alert
prompt是浏览器内置的JavaScript函数,用来弹出一个带输入框的对话框,让用户输入一段文本并返回给脚本

<script>prompt(1)</script>

在这里插入图片描述

第六关

依旧从最简单的payload开始测试,发现出现了变量a
在这里插入图片描述
输出正常内容,观察一下,变量a后面跟随的分号代表结束
在这里插入图片描述
那我们能不能利用分号把原本内容闭合,再在后面添加我们的攻击代码呢,测试成功

111";alert(1)<​/script>

在这里插入图片描述

第七关

"和尖括号都被转义了
后端把这些字符转义后,浏览器再解析时看到的只是普通文本字符串,不会把它当成新的标签或脚本结束符,无法触发 XSS。

&quot; 代表双引号 "
&lt; 代表小于号 <
&gt; 代表大于号 >

在这里插入图片描述
上图可以看到是需要闭合单引号,script尖括号被转义就换成不需要尖括号的onclick
//是JavaScript 的单行注释,目的是把原本紧跟在后面的多余引号或尾巴全部注释掉,避免再次破坏语法

111';onclick=alert(1)//

在这里插入图片描述

第八关

在这里插入图片描述
不知道怎么做,求助朋友给出payload如下。

http://xss1.ctf8.com/example8.php/"<script>alert(1)</script>

在这里插入图片描述
原来这一关的注入点非常隐蔽,闭合不在传统的输入框内而是在 URL 路径中 ,后来了解到这是PHP_SELF XSS(也称 URL Path XSS)。

原理是后端在生成表单时, form action="…"属性直接引用了当前的 URL 路径 。由于程序没有对 URL 路径进行严格的过滤或转义,导致我们可以通过在 URL 末尾构造恶意载荷,将其直接注入到 HTML 标签的属性中 。
在这里插入图片描述
这种攻击方式提醒我们:URL 路径本身也是一个不可信的输入源 。

至此,全文结束。

更多推荐