XSS练习平台【XSS Challenges】

以下来自XSS练习平台----XSS Challenges

这个练习平台没有像alert(1)to win类似的平台一样会给出关键的源代码,并且会在页面给予反馈。这是一个模仿真实xss挖洞的情景,在XSS Challenges练习过程中,我们需要用浏览器中的f12中搜索(),找出我们控制的代码所在的位置,然后思考那些个位置哪个或哪几个位置可以被注入我们想要的代码,然后结合上下文进行各种脑洞绕过。

在chorme中做题会被防火墙检测为危险代码,解决方案

在chrome中搜索,在f12中的的Element中用Ctrl+Shift+f调出搜索框,可以搜索这个页面用到的所有文本资源的字符串,也可以在Source中先在左边选中对应的文件夹后,用Ctrl+f调出搜索框搜索当前文件字符串

在firefox的话,我用了firebug,直接选中HTML或CSS或脚本,然后在右上方搜索框搜索即可(选择脚本搜的最全)。

在IE的话,先选择调试程序,然后在右上方搜索框搜索即可。

(暂时知道那么多,还有什么补充的以后再更)

Stage #1

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

XSS练习平台【XSS Challenges】_第1张图片

(发现好像不用闭合标签,直接让,οnclick=alert(document.domain)

XSS练习平台【XSS Challenges】_第3张图片

但这样做的话只是让自己中了XSS,没有办法让被害人与服务器交互(能不能给服务器上传代码?不行!能不能构造get参数的url?也不行!)。XSS challengs的设计者应该考虑到了这点,若是这样造成的弹窗将不能过关。

Stage #4

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

XSS练习平台【XSS Challenges】_第4张图片

然后我们在网页上搜下hackme,发现在这里

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

Stage #5

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

Stage #6

与Stage#2几乎一样,也是value参数,唯一不同的是过滤了<>,但没有过滤"(可以闭合前面的属性),这样我们就不可以用新的标签了,但我们可以在标签里面加新的属性,如 " οnmοuseοver=alert(document.domain) name="1类似这样的,onmouseover是把鼠标放在上面就执行的on时间,onclick之类的也是可以的。

Stage #7

这道题也是value出问题,但除了<>,这道题把"也过滤了,本来以为这样就不能把独立的属性分隔出来,但我无意中打的一段竟然成功触发了alert

后来看了别人的WP才学习到了~~并不是转以后的双引号起了分隔作用,而是双引号后面的空格,空格也可以分隔属性(记住要在空格前面随便加点什么,否则bp提包的时候会自动将空格省略)

Stage #8

题目是输入一条url,然后后台把它包在一个标签里,我们需要点击超链接然后弹窗。

我们百度怎么在url中执行js,学到可以构造javascript:alert(document.domain),然后点击超链接,点击过关。

Stage #9

这道题卡住了,弄的我脑壳疼。。最后还是没明白

先在网页输入,发现尽管什么都没有被过滤,但< 成功弹窗。

Stage #11

也是value注入点,在网页中各种提交姿势试一下,发现script前面加个x,on事件全部不能用(题后看hint也证实了我的猜想)

想到除了on事件和script之外还能执行js的是构造a标签在超链中执行js。

构造">1< ,发现构造的语句中仍然有script,我们把之中的r进行html实体一下

提交之后f12看下:

发现被渲染成r了,成功弹窗。(还可以在script中间插入 , ,空格等不可见字符对script进行分割,让正则匹配不到)

后来想到href后面是url,也试了下url编码%72,发现在f12上查看没有被渲染(因为没有被当做url使用所以不奇怪),点击之后发现%72发生作用时变成了r,但却没有触发弹窗??这里不是很明白,先埋个坑,理解了回来再更。

XSS练习平台【XSS Challenges】_第5张图片

做这道题又把unicode,utf-8,url编码,html实体等看了一遍,发现它们英文部分有很多相同之处,比如都可以表示为ascii的十、十六进制,只要加不同前缀就好了。

Stage #12

照常尝试,还是value值,过滤了<>和",想用编码能不能绕过(因为过滤了<>",HTML实体是不行的,html实体不能让内容逃出来),试了各种编码实在没办法了,看了大佬WP发现这是一个ie浏览器识别特性,ie浏览器会把 ` `(笔记本1左边那颗键两次)识别为双引号,从而让我们的内容逃出来(<>没法逃就设置属性),构造payload。

XSS练习平台【XSS Challenges】_第6张图片

Stage #13

照常转义了<>和",F12发现相比以往的题这道题多了一个style属性,那肯定就是从这里入手了。

百度style XSS,搜到一个知识点叫“行内样式的动态特性”(就是在ie下能在css中执行js代码)

我在ie下试了很久都不能复现,又百度,发现还有一种利用方法  background:url(javascript:alert('xss'));

还是不能复现,只能归结为ie版本太高的问题了。

Stage #14

和Stage #13几乎一样,不同的是转移了了script和expression,想用&#num;的形式实体一下其中的字母,但发现&号也被转移了mmp,然后试了下/**/应该也是可以的,可惜不能复现。从大佬的WP上有学来集中绕过方法。

(1)能绕WAF的不止html实体,unicode编码也行如e -> \0065 ,\u0065   ;\0065xpression(这道题过滤了反斜杠,反斜杠零)

(2)在expression中加反斜杠分隔 ;ex\pression(不行,理由同上)

(3)在expression中加注释符/**/分隔;ex/**/pression  通过

(4)在expression中加反斜杠零分隔; ex\0pression 通过

Stage #15

随便试了下,照常转义<>,",也转义了&,过滤了\让我们不能构造html实体,和unicode编码。~~等等!

\是过滤了,不是转义了阿!我们试试输入两个\,发现只过滤了一个!

那就直接unicode就行了(就是\\003c和\\003e代替<>换成十六进制编码也就是\\x3c,\\x3e也是可以的)

XSS练习平台【XSS Challenges】_第7张图片

Stage #16

看到又有document.write,试了试上题的利用代码,直接过了......看了下hint,发现是替换了\x,那与上题唯一的区别就是十六进制编码不能用了。ps:还有一种编码格式是八进制编码?payload如下:\\74img src=x οnerrοr=alert(document.domain)\\76

学到一个知识点叫 HTML和javascript的自解码机制

Stage #17

题目说了只能在老ie上复现,那我们就直接看大佬WP好了。

类似于sql注入的宽字节注入,用%A7(%几都行,只要符合下面大佬WP中可以用来欺骗的编码)加上双引号的%34?让html自解码机制误认为这是宽字节字符,从而弄掉双引号。

半角片假名使用两个字节来表示:0x8E + 0xA1-0xDF

JIS X 0208字元使用两个字节来表示:0xA1-0xFE + 0xA1-0xFE

JIS X 0212字元使用三个字节来表示:0x8F + 0xA1-0xFE + 0xA1-0xFE

Stage #18

最高位变1?不明所以不写。

Stage #19

没有任何输入点,抓包没发现任何东西....hint 2014年九月24在推特上的DOMXSS?百度没发现任何东西,大佬WP也到这里没了。。。还是太菜,XSS challengs就先做到这里吧,以后涨知识了再继续做。

你可能感兴趣的:(CTF,Writeup)