XSS-labs 做题 1~13
Posted Goodric
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSS-labs 做题 1~13相关的知识,希望对你有一定的参考价值。
XSS-labs 做题 1~13
先了解一下 javascript 的几种常用弹窗函数
alert()
是最常用的方法,引发的弹窗只有一个确定按钮,弹窗内容可以是变量也可以是字符串。
alert() 无返回值。
confirm()
对比 alert 函数,比“确定”多了一个“取消”的按钮。有一个返回值,点击确定返回 true ,取消返回 false 。
prompt()
与 confirm 相比,多了一个输入框。
有返回值,按确定,返回值是语句的变量或字符串内容,按取消返回值是 null 。
XSS注入一般语句:
<script>alert("xss")</script> // 弹出引号内的字符
<script>alert(document.cookie)</script> // 获取 cookie
XSS-labs
——
level1
页面除了一张图片,还显示了 payload 的长度。
可以看到 payload 是从 url 中输入,是 get 请求。
直接尝试经典语句:
?name=<script>alert("xss")</script>
成功执行语句
——
——
level2
有一个输入框,输入框中的内容会在 url 的参数的值中,同样是 get 请求。
先尝试经典语句,但是无法执行。
F12 查看源代码,可以看到语句放在了 input 标签中,成为了 value 的值,并且在引号内。
那就在语句前先把标签和引号闭合。
构造语句:
"><script>alert("xss")</script>
成功执行。
——
——
level3
同样先尝试经典语句,无法执行。
从源代码中,看起来和前面的 level2 一样,
和第二题一样,尝试用 "> 闭合,但是还是不能执行语句。
并且引号和尖括号被转码了。
查看根目录的源代码得知,传入的语句通过 htmlspecialchars 函数进行 html 实体编码,即会过滤掉大于号和小于号。
不过 htmlspecialchars 存在一种开发手误,具体原因暂不了解,结果就是导致函数会转换双引号,不转换单引号。
所以,这里使用含单引号的语句:
' οnclick=alert(1) '
传入之后看起来没有什么反应,需要点击一下输入框,才会执行语句。
这个是 onclick 的属性,并且这条语句语句保存下来了,随时回到这个页面不用重新输入,点击输入框都会弹窗。
——
——
level 4
尝试语句:
<script>alert('XSS')</script>
F12 源码中显示把大于号、小于号给过滤掉了。
继续用前面的语句,毕竟 onclick 不需要大于号和小于号。
然后因为我们输入的内容是作为 value 的值,在双引号中,所以也需要把双引号给闭合绕过。
构造语句:
" οnclick=alert(1) "
点击输入框,出现弹窗。
——
——
level 5
尝试输入语句,发现两种语句中,都有一个单词被处理了,用下划线分开了。
看看源码。显示对 <script 和 on 进行了处理。那就不使用这两个函数。
使用 a 标签绕过,前后要先用 "> 和 <"闭合。
构造语句:
"><a href="javascript:alert(/xss/)">alert</a> <"
点击 alert 出现弹窗。
——
——
level 6
尝试普通的语句,看到有单词被处理了,和前面那题类似。
看看根目录的源码,对 <script 、on、src 、data 、href 进行了处理。
继续用前面的语句,
但是要绕过被处理的单词 ,测试后可以用大写绕过,任意大写被处理单词的任意个字母即可绕过。
"><a hRef="javascript:alert(/xss/)">alert</a> <"
" oNclick=alert(1) "
——
——
level 7
尝试简单的语句:
<script>alert('xss')</script>
可以看到大于号和小于号里的 script 直接被过滤为空了。
可以用双写绕过:
"><a hrhrefef="javascriscriptpt:alert(/xss/)">alert</a> <"
"> <scscriptript>alert('xss')</scriscriptpt> <"
" oonnclick=alert(1) "
看看源码。
相比前面的 level 6 ,这题多了一个 strtolower() 函数,会把内容统一小写,所以无法大小写绕过。
——
——
level 8
打开页面,输入的内容成为了一个超链接。
这里想到用语句:
javascript:alert(xss)
尝试注入一个一般语句:
"> <script>alert("xss")</script> <"
发现 script 和 双引号都被处理了。
看看源码,又多了几个过滤方式。
把用于闭合双引号和大于号、小于号都处理了。
这里可以用编码绕过。
把语句
javascript:alert(/xss/)
进行 Unicode 编码后为:
javascript:alert(/xss/)
(测试过进行 HTML 实体编码也可行)
编码能够在页面解析并且后端看不到。
——
——
level 9
还是添加超链接的题型。
尝试和前面输入一样的payload :
javascript:alert(/xss/)
显示传的链接不合法。
看源码,与前面一题相比,后面多了一个 if 判断语句。
strpos() 函数用于查找某个字符在字符串中的位置,判断这个字符串是否存在。
这里返回给我们 “您的链接不合法?有没有!”,是因为字符串中没有字符串 ‘ http:// ’ 。
所以要在语句合适的位置插入字符串 http://
构造语句:
javascript:alert('http://')
解码后为:
javascript:alert('http://')
——
——
level 10
这题需要在 url 的参数里输入内容。
先尝试:
<script>alert('xss')</script>
没有什么反应。F12 看源码有三个隐藏的 标签。
本来语句中的大于号和小于号会被实体编码,但是我这里没有显示,不知道是不是浏览器的问题。
(本来 value 后面还有 ="" ,浏览器问题直接不见了,后面换了个浏览器就正常了)
看看源码。只有参数 t_sort 是会接收内容的。
大于号小于号用不了,构造语句:
&t_sort=" οnclick=alert(‘xss’) type=“text”
——
——
level 11
尝试输入前一题的 payload :
&t_sort=" οnclick=alert('xss') type="text"
没有反应,F12看源码,参数 t_sort 无法闭合了,并且比前面一题多了一个参数 t_ref 。
看看根目录源代码,与前面那题相比,多了一个 referer 请求,前面那题的 t_sort 被 HTML 实体编码了,无法用双引号闭合了。
用 hackbar 插件发送 referer 请求:
" οnclick=alert(‘xss’) type=“text”
成功执行语句。
或者也可以利用 burp 抓包修改 referer 信息。
——
——
level 12
直接先看源码吧,多了一个 t_ua 参数,根据前面的做题经验,这题就是通过这个参数来进行 xss 攻击了。
根目录看源码,有一个 user_agent 请求。
所以就是通过数据包中的 user_agent 请求发送语句了。
构造语句:
" οnclick=alert('xss') type="text"
——
——
level 13
F12 看源码,多了参数 t_cook ,这题盲猜就是通过 cookie 输入语句了。
看根目录源码。是 cookie 没错了。
根据前面的依葫芦画瓢。
构造语句:
user=" οnclick=alert('xss') type="text"
以上是关于XSS-labs 做题 1~13的主要内容,如果未能解决你的问题,请参考以下文章