//从连控制台都看不懂的基础开始,自学xss个人记录。
//感谢大佬们的通关经验。
使用非常好用的XSS Challenges。网址:XSS Challenges (by yamagata21) - Stage #1
Stage #1
使用最基础的<script>alert(document.domain)</script>就能过。
Stage #2

进开发者工具,在搜索栏使用上次的语句。

得到反馈。找到form action

可以看到输入被封装在<input type = “”>里

带上引号和括号。使用“><script>alert(document.domain)</script>
通过。
Stage #3
坏消息:search a place的输入框是有合法性检查的
好消息:choose a country没有。
合法性检查的标志:第二行的input里,value=”Search”不会变。没有合法性检查的话,value=”(输入的东西)“

那俩option里面的黑字是可以随便改的。
把它改成这个

此时的题目界面:

在search a place那里随便输点什么,点search。
Stage #4
查看提示

在控制台找到hidden的输入框

把hidden改成txt后,出现输入框

直接输入后,发现语句被写入value,且保持在里面

闭合语句即可。

Stage #5
照常输入时,发现输入框有字数限制。

提示为length limited text box。
在控制台能轻松找到这个东西,给它改成任何足够大的数。

现在能随便输入了

Search一下就发现写进去了

改了上限再写一遍闭合的即可

Stage #6
提示是……event handler attributes
很好,看不懂,直接上手。
输入之后长这样。

尝试用”>直接闭合,结果如下

输入框对符号做了转译。但是第一次是没有的。经过反复尝试可以发现它会检查非法字符--- > 。具体来说是”后的>。
直接注入无法实现。但是由于它会写入,可以采取构造事件法。
输入 "onclick='alert(document.domain)'(鼠标点击触发事件)
(还有" onmouseover =alert(document.domain),鼠标经过触发事件)
Search后会写入value。再次点击输入框,通过

Stage #7
提示如下

直接用上次的方法,发现”<>被转译。
测试发现空格后内容会被截断(下图输入的是111 ”>)

可以利用这一特性。

出现多出来的引号,删掉

成功。
Stage #8
会把输入的东西做成超链接。

背景知识:Javascrpt使用小寄巧

使用小寄巧,成功通过。

Stage #9

发现了奇怪的东西

……这啥啊()
弄出来康康,发现多了一个输入框。

在网上查了查是要把日语(euc-jp)换成UTF-7,然后提交UTF-7编码的py上去。由于过于麻烦,我选择这种操作

由于浏览器(Edge)的性质,所有的题其实都可以用上面的流氓方式强行通过,但是这样就学不到思路了,还是算了
但同样也是因为edge,burp suite抓包变得非常困难(要反复改系统设置而非浏览器设置)。如果一定要用bp还是装个Firefox比较好。
Stage #10
可以看到单词domain被禁用了。

随便构造一个,然后把domain插入domain中(例如变成ddomainomain),可以通过。

本文记录了作者从零基础开始自学XSS的过程,通过逐步破解XSSChallenges的各个阶段,展示了如何利用JavaScript技巧绕过输入验证,以及遇到的浏览器特性与防御机制。
2461





