xss 靶场wp (xss1.ctf8.com 7关黑盒版)
开始靶场前,没有前端基础的,先往脑子里灌几个前端知识

网站是: 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。
" 代表双引号 "
< 代表小于号 <
> 代表大于号 >

上图可以看到是需要闭合单引号,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 路径本身也是一个不可信的输入源 。
至此,全文结束。
更多推荐

所有评论(0)