XSS quiz练习题做题过程及感悟

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)也行)

全部通关。

时间: 2024-10-07 21:08:13

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

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

1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 2.有时候int型不够用,可以用long long或__int64型(两个下划线__). 值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数. printf("%I64d",a); printf("%lld",a); 3.O

做题过程中得到的注意点

如果一个函数是以return 结束的,那么在调用时,并不会在控制台上输出返回值,必须使用显式的print才行. 对于参数为数组的函数(如int[][] m),当不知道其数组长度时,可以使用 m.length来获得,如下 1 public static int sumMajorDiagonal(int[][] m) { 2 int sum = 0; 3 for (int i = 0; i < m.length; i++) { //这里的i小于多少怎么写? 答案:就是这么写 4 sum += m[i

做题神器风靡:在线教育虚火旺盛的罪魁祸首是谁?

在线教育的巨大潜力有目共睹,不管是创业者还是巨头都纷纷杀入其中.在线教育本身囊括的范围极其广阔,从胎教.学龄前教育.中小学教育.高等教育,再到职业教育,乃至细分化的英语教育.技能教育等,构成一个完整的教育生态圈.但让人无奈的是,国内在线教育最火爆的却还是中小学教育. 而且由于国内教育体系本身存在的弊端,导致中小学教育主要以书山题海为工具,向高分发起追逐.在这样的大背景下,在线教育最火爆的是各种做题神器App.做题神器的风靡,让整个在线教育行业看起来形势一片大好.然而,做题神器真的就是解决在线教育

大一下学期以来做题总结、

这段时间以来.除了搜索专题和KMP专题 其他专题都不怎么愿意想了. 就比如今天的水题. 代码敲错. 输出格式没看清题意. 看题又不仔细. 等交上去错一发之后在回过头来看题目. 而且看题这方面真的好差. 经常性题目没读完就开始去敲代码.在敲代码过程中再去看题意. 希望自己读题的时候要认真.争取把题目读准.读快. 还有一个坏习惯.做题的时候喜欢听歌.这样在做思维题的时候多少会有点影响把. 这样好了,以后在做题时间一定一定不要听歌. 还有就是思维方面比以前欠缺一点了. 可能是因为没有比赛时的感觉的了.

BZOJ做题记录[0512~?]

觉得做一道开一篇真不好...好多想找的东西都被刷下去了... 至于?的日期究竟到什么时候...还是看心情...但是估计不会超过七天吧 05.12 当然是用刷水题来开启新的一天>< 感觉啊...这道题怎么做都可以..所以索性不说了 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<cmath> 5 #define INF 1000000007 6 #defin

杭二中校长叶翠微谈名校生:不只会做题 更要懂得读书

2016-04-17 13:42:21  来源: 浙江在线  作者: 记者 吴俏婧 通讯员 蒋弃疾  编辑: 陈丽丽 浙江在线·浙江教育新闻网4月17日讯(记者 吴俏婧 通讯员 蒋弃疾)高尔基曾经说过:“读书,这个我们习以为常的平凡过程,实际是人的心灵和上下古今一切民族的伟大智慧相结合的过程.”中外名人的实践证明,读名著,让人睿智,使人谦和:读名著,让人博大,使人高尚.在世界阅读日(4月23日)即将来临之时,杭州二中携手海康威视,共同向全社会发出读名著的倡议.4月16日上午,“我们有个约定:携手

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

C语言是一种功能强大.简洁的计算机语言,通过它可以编写程序,指挥计算机完成指定的任务.我们可以利用C语言创建程序(即一组指令),并让计算机依指令行事.并且C是相当灵活的,用于执行计算机程序能完成的几乎所以的任务,包括会计应用程序.字处理程序.游戏.操作系统等.它不仅是更高级语言(如C++)的基础,目前还以Objective C的形式开发手机应用程序.目前,C语言最新版本由ISO/IEC 9899:2011 文档定义.           数据结构+算法=程序 1.1 C程序和程序设计 (1)以下

做题细节

1. 如果题目是枚举的话,即最后化成十分简单的形式比较小, 可以直接将各种不同状态的结果运算过程写出来,但是这并不见得比写函数要快多少 而且比较容易出错,比如下标没有更改之类,这种错误比较烦人,因为你会查看算法, 但是算法本身并没有错误,所以如果复制粘贴的话,注意不同情况的不同点,如果自己 不够细心,最好写成函数的形式(注意判断边界),以防出错.//16:35 2004-4-17 2. 在编程之后检查的第一件事就是初始化, 你的初始化也许写在循环体之外,故只能AC一组测试数据,sample. /

java做题笔记

java做题笔记 初始化过程是这样的: 1.首先,初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化: 2.然后,初始化子类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化: 3.其次,初始化父类的普通成员变量和代码块,在执行父类的构造方法: 4.最后,初始化子类的普通成员变量和代码块,在执行子类的构造方法: (1)初始化父类的普通成员变量和代码块,执行 C c = new C(); 输出C (2)super("B"); 表示调用父类的构造方法,不调用父类的