XSS Writeup
XSS大闯关(level_1—20)
level_1
根据源码,没有过滤,直接调用windows.alert()这个函数。

leve_2
先输入<script>windows.alert()</script>发现对<script>过滤,所以输入<img onerror>window.alert()</img onerror>,没成功,说明过滤的是<>

所以输入"onclick="window.alert()
onclick原理:
1.onclick 是 HTML 的事件处理器,用于在元素被点击时执行 JavaScript 代码。在 XSS 场景中:
- 只要能让事件触发(如用户点击元素),代码就会执行。
- 很多 CTF 题目只要求证明 XSS 存在(即弹出
alert),因此通过点击触发即可完成解题。
2.题目可能对 <script> 等明显的 XSS 标签进行过滤,但对事件属性(onclick、onmouseover等)过滤较弱:
- 相比
<script>alert()</script>,onclick类 payload 更隐蔽,容易绕过基础过滤。 - 输入中的
"可以打破属性封闭,将事件注入到标签中,避开对标签本身的检测。
level_3(”闭合)
也输入"onclick="window.alert()
level_2和3原理解释:
当我们提交?keyword=" onclick="alert(1)时,input 标签会变成:
1 | <input name="keyword" value="" onclick="alert(1)" /> |
- 第一个
"闭合了原有的value属性引号 onclick="alert(1)"被注入为新的事件属性- 点击输入框时会触发
alert(1),进而触发页面自定义的alert函数,完成关卡

htmlspecialchars() :
把预定义的字符转换为 HTML 实体。预定义的字符是:
- & (和号)成为 &
- “ (双引号)成为 “
- ‘ (单引号)成为 ‘
- < (小于)成为 <
- > (大于)成为 >
提示:如需把特殊的 HTML 实体转换回字符,请使用 htmlspecialchars_decode() 函数。
level_5
同理,或者:
JavaScript伪协议:"><a href=javascript:alert(/xss/)>

level_6
同样输入"onclick="window.alert(),发现变成了"o_nclick="window.alert(),试试<script>windows.alert()</script>也出现同样情况


说明对onclick和script会进行修改,所以试试onclick"onclick="window.alert(),第一个onclick用于被修改,使输入后变成value="o_nclick"onclick="window.alert()",让onclick="window.alert()"正常执行

level_6
同上题
也可使用大小写绕过<ScRipt>alert(/xss/)</scRIpT>

level_7
先试试"onclick="window.alert(),过滤了on,试试<script>windows.alert()</script>,发现前面的<script>被过滤了,试试双写<script>:"><scrscriptipt>alert()</scrscriptipt>不太行,试试另一个双写" oncliconclickk="alert(1)不行,onclick"onclick="window.alert()成功了

level_8
用上一题的方法竟然成功了,看看有没有别的方法

编码绕过:
将一些字母用html实体编码和hex编码进行绕过,
例如:<script>windows.alert()</script>—>javascript:alert(/xss/)(这里用hex编码将script中的ri变成了ri)
编码工具链接:https://www.qqxiuzi.cn/bianma/zifushiti.php
level_9
试试<script>windows.alert()</script>,发现过滤了<和>,再试试"onclick="window.alert(),成了

level_10
隐藏表单字段注入:

源码中给了很多input,尝试请求的时候给出 t_link、t_history 和 t_sort 几个参数,发现 t_sort 的 value 字段对应其参数。举例来说,尝试这个 payload:?keyword=test?t_link=tlink&t_history=thist&t_sort=tsort
发现t_sort 这个参数有效,就用这个payload包含执行代码?keyword=test&t_sort=" onmouseover=alert(1) type "或着?keyword=test&t_sort=" onmouseover=javascript:alert(1) type "(因为原来的type是hidden,所以也要过滤掉)


level_11 refere注入

和上题类似吧
先把每一个参数都是一遍,?keyword=test?t_link=tlink&t_history=thistory&t_sort=tsort&t_ref=tref,发现t_sort有用

发现?keyword=test&t_sort="onmouseover=javascript:alert(1) type",结果出现",这里是把”自动转换了

refere注入常见攻击场景
XSS(跨站脚本)攻击
若应用会将Referer的值直接嵌入到页面 HTML 中(比如显示 “您从 xxx 页面跳转而来”),攻击者可在Referer中注入 JavaScript 代码。当页面渲染时,恶意代码会被执行,可能导致窃取 Cookie、会话劫持等后果。例:构造
Referer: <script>alert('xss')</script>,若应用直接输出该值,页面会触发弹窗。SQL 注入
若应用将Referer的值用于数据库查询(比如记录访问来源到数据库),且未做过滤,攻击者可注入 SQL 语句篡改查询逻辑。例:构造
Referer: ' or 1=1--,可能导致查询条件被绕过,泄露敏感数据。权限绕过
部分应用会通过Referer验证访问来源是否为可信域名(如限制仅允许从本网站跳转的请求)。攻击者可伪造Referer为可信域名,绕过这种验证机制,访问未授权资源。
使用refere注入(t_ref可能在提示refere),传入"onmouseover=javascript:alert(1) type=".html (.html目的是使弹窗显示)


leve_12
源码中给了一个UA,试试UA注入,"onmouseover=javascript:alert(1) type=".html


level_13
这次可能是cookie,传cookie:” onmouseover=javascript:alert(1) type=”.html

用hackbar不行