您的位置:首页 > 产品设计 > UI/UE

XSS quiz 11~16解题方案

2015-12-14 14:08 639 查看
第十一题

Hint: “s/script/xscript/ig;” and “s/on[a-z]+=/onxxx=/ig;” and “s/style=/stxxx=/ig;”

对关键字符串做了过滤

script变成了


“javascript:alert(document.domain)”变成了


” onmousemove=”alert(document.domain)变成



看答案是把javascript隔开了,在中间加了 ;


果然可以弹。



;是换行的html10编码,同样可以弹。

但把编码写到onerror、onmousemove中却无法弹窗



根据/article/2049905.html的理解,这个这个HTML的转义是针对字符串的。

第十二题

Hint: “s/[\x00-\x20\<>\”\’]//g;”

把x00到x20、引号、尖括号都过滤了,那么各种构造方法中,使用这些最少的,还是想到

” onmousemove=alert(document.domain)

IE下有一个特性,
可以实现闭合的功能,详单与双引号。
onmousemove=alert(document.domain)即可。

第十三题

乍一看框内写着:background-color:salmon,并且框内粉红色。这是把用户的输入写进css样式中了,那么我们只需让css里面能写js就行了,搜了一下css里写js,搜到了几个方式。

尝试了background-color:url(javascript:alert(document.domain)),不成功;

尝试background-color:expression(alert(document.domain));这次成功,但是弹框一直存在,删了一个又弹一个,接连不断,还好题是过了,以后研究一下时延的问题。



第十四题

Hint: s/(url|script|eval|expression)/xxx/ig;

跟十三题一样,但是把上述的字段过滤成xxx了。。那么还是看看 能不能用吧

不成功,查看答案,也很简单,用/**/绕过了正则过滤。



这种方法为什么放到11题中不行?待分析。

第十五题

过滤了双引号,尖括号。



由于ducumen.write写的时候,script自解码机制,参考 HTML与JavaScript自解码机制 http://book.51cto.com/art/201301/378154.htm

HTML:进制编码:&#xH;(十六进制格式)、&#D;(十进制格式),最后的分号(;)可以不要。

HTML实体编码:即上面的那个HtmlEncode。<> <,>

onclick里的这段JavaScript出现在HTML标签内,意味着这里的JavaScript可以进行HTML形式的编码

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

Unicode形式:\uH(十六进制)。

普通十六进制:\xH。

纯转义:\’、\”、\<、>这样在特殊字符之前加\进行转义。

在JavaScript执行之前,这样的编码会自动解码

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

16进制编码:

< 变成了 \x3c 并且 > 变成了 \x3e

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

尝试后发现过滤了单个\



多加个\即可

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


第十六题

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

跟上一题类似,但是对\x做了过滤,尝试换一种编码方式。

js16进制下
<  \x3c
>  \x3e
js十进制下
<  \u003c
>  \u003e


所以

\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: