XSS THM 做题记录
Level One:
看到一个表单,要您输入的姓名,输入姓名后,该表单将在下面的一行中显示,例如:
如果查看 Page Source,将看到姓名反映在代码中:
我们将尝试输入以下 JavaScript Payload,而不是输入姓名: <script>alert('THM');</script>
现在,当单击输入按钮时,将收到一个带有字符串 THM 的警报弹出窗口,页面源代码将如下所示:
Level Two:
与上一个级别一样,系统将再次要求您输入的姓名。这一次,当单击 enter 时,姓名将反映在 input 标签中:
查看页面源,可以看到姓名反映在 input 标签的 value 属性中:
如果要尝试前面的 JavaScript 有效负载,它将不起作用,因为无法从 input 标签内部运行它。相反,我们需要先转义 input 标签,以便 payload 可以正常运行。可以使用以下有效负载执行此作:
"><script>alert('THM');</script>
有效负载的重要部分是“>
”,它关闭 value 参数,然后关闭 input 标记。
现在,这会正确关闭 input 标记并允许 JavaScript 有效负载运行:
Level Three:
看到另一个表单,询问名字,与上一级一样,名字会反映在 HTML 标签中,这次是 textarea 标签。
我们必须使用以下有效负载,以略微不同的方式转义 textarea 标签和输入 1(在 Level Two 中):
</textarea><script>alert('THM');</script>
上述有效负载的重要部分是 </textarea>
,它会导致 textarea 元素关闭,以便脚本运行。
Level Four:
在表单中输入姓名,会在页面上看到它。此级别看起来类似于 1 级,但在检查页面源代码时,会看到名字反映在一些 JavaScript 代码中。
必须转义现有的 JavaScript 命令,以便能够运行代码;可以使用以下有效负载 ';alert('THM');//
从下面的屏幕截图中可以看到,它将执行代码。'
关闭指定名称的字段,然后 ;
表示当前命令的结束,末尾的 则``使它后面的任何内容成为注释,而不是可执行代码。
Level Five:
现在,此级别看起来与级别 1 相同,并且名字也会反映在同一个位置。但是,如果尝试有效负载 <script>alert('THM');</script>
,它将不起作用。当查看页面源代码时,将了解原因。
script
会从有效负载中删除,这是因为有一个过滤器可以去除任何具有潜在危险的单词。
当一个单词从字符串中删除时,你可以尝试一个有用的技巧。
尝试输入有效负载 <sscriptcript>alert('THM');</sscriptcript>
并单击输入按钮,将看到一个带有字符串 THM 的警报弹出窗口。
Level Six:
与第二级类似,我们必须从 input 标签的 value 属性中转义,我们可以尝试 "><script>alert('THM');</script>
,但这似乎不起作用。让我们检查一下页面源代码,看看为什么这不起作用。
可以看到 < 和 > 字符从我们的 payload 中被过滤掉,从而阻止我们转义 IMG 标签。为了绕过过滤器,我们可以利用 IMG 标签的其他属性,比如 onload 事件。onload 事件将在 src 属性中指定的图像加载到网页后执行您选择的代码。
让我们更改 payload 以反映这一点 /images/cat.jpg" onload="alert('THM');
,然后查看页面源,您将看到这将如何工作。
Polyglots:
XSS 多语言是一串文本,可以一站式转义属性、标签和绕过过滤器。可以在刚刚完成的所有 6 个级别上使用以下多语言,并且它会成功执行代码。
|
|