XSS靶场过关

靶场网址 http://xss.tesla-space.com/

第一关

get传参name值为test,回显有test,直接在URL栏将参数值修改为<script>alert(12345);</script>(在URL栏输入还是在输入框输入都一样,但有细微差别)

这里有一个图片

这里有一个图片

过关

第二关

感觉和第一关一样

这里有一个图片

直接在URL栏输入<script>alert(123);</script>,发现行不通

这里有一个图片

 

查看网页源码,发现虽然没要找到xxx的结果那里尖括号在服务器端被转义了,但是输入框那里的尖括号没有被转义。那么我们可以在输入框那里闭合input标签,直接在浏览器URL栏输入"><script>alert(123)</script>

这里有一个图片

这里有一个图片

成功过关

第三关

直接查看网页源码,可以看到参数名还是keyword

1

 

在URL栏输入<script>alert(123)</script>测试下

1

没成功

 

查看源码发现这关两个地方的尖括号都被转义了

1

 

那就不用尖括号,输入' autofocus onblur=alert(); aaa='

只要点击页面非输入框的部分,就会调用alert函数

1

成功过关

但我还有一个未找到原因的问题,为什么输入' autofocus onfocus=alert(); aaa='会一直循环调用alert

第四关

查看源码

1

 

输入" autofocus onblur=alert(); aaa="测试下

【这里有一个图片

成功过关,当然也要先点击下非输入框的部分

第五关

查看源码

1

又变成了双引号

 

测试下" autofocus onfocus=alert(); aaa="

1

发现不行,后端把input标签位置的on给替换为了o_n

 

那再测试下<script>alert();</script>看下过滤了尖括号没有

这里有一个图片

h2标签处过滤了,但input标签处没过滤,但过滤了script

 

那直接基于input标签输入"> <a href=javascript:alert();>111</a>,并点击链接

这里有一个图片

成功过关

第六关

查看源码

1

 

先测试下"><script>alert(123);</script><img src=",没能成功,查看下源码

这里有一个图片

可以看到,h2标签处后端将"、<、>转义为了HTML实体,input标签处没有转义"、<、>,但是将script替换为了scr_ipt,将src转换为了sr_c

但为什么</script>中的script没有替换为scr_ipt呢?说明后端的替换规则为下面两种之一

  • <script替换为<scr_ipt

  • <script>替换为<scr_ipt>

最终测试发现为第一种

1

 

这里利用浏览器的一个特性,DOM树生成过程中对HTML文件中的标签和属性名的大小写不敏感,但后端语言肯定对大小写是敏感的

我们测试下后端在替换时会不会大小写敏感

1

看来是大小写敏感的

 

直接"><sCRipt>alert();<script><img src="

这里有一个图片

成功过关

第七关

查看源码

1

 

测试下"><script>alert(123);</script><img src="

这里有一个图片

看来后端这次是将input标签处的script替换为空字符,那可以通过双写绕过

 

URL栏输入"><scrscriptipt>alert();</scrscriptipt><img src="

这里有一个图片

过关

第八关

老样子,查看源码

1

 

老样子,测试下"><script>alert(123);</script><img src="

这里有一个图片

过不了

查看源码,这次后端在input标签将"、<、>转换为HTML实体,而在a标签处只将"转换为HTML实体,把script替换为scr_ipt

 

基于a标签,用Javascript伪协议和大小写绕过试试,javascrIpt:alert();

这里有一个图片

看来对大小写做了防范

 

那试试将script替换为对应的HTML实体

1

&#115;&#99;&#114;&#105;&#112;&#116;

如果在输入框输入,payload为java&#115;&#99;&#114;&#105;&#112;&#116;:alert();,因为此时浏览器会对payload自动进行URL编码

如果直接在URL栏输入,要在HTML实体编码后再进行一次URL编码

这里有一个图片

此时payload为

1
java%26%23115%3B%26%2399%3B%26%23114%3B%26%23105%3B%26%23112%3B%26%23116%3B:alert();

这里有一个图片

过关

第九关

用上一关的payload试试

这里有一个图片

过不了,显示链接不合法,难道是会检查参数值里有没有javascript?最终查看网站源码,原来是检查有没有http://

这里有一个图片

 

那直接在第八关的payload后面加上var a = %26%2334%3Bhttp://%26%2334%3B;

最终的payload如下

1
java%26%23115%3B%26%2399%3B%26%23114%3B%26%23105%3B%26%23112%3B%26%23116%3B:alert();var a = %26%2334%3Bhttp://%26%2334%3B;

这里有一个图片

过关

第十关

查看源码

1

三个隐藏的输入框,三个参数,那都添加在URL里

 

在URL栏输入

1
?t_link="<script>alert();</script><input name="abc&t_history="<script>alert();</script><input name="abd&t_sort="<script>alert();</script><input name="abe

这里有一个图片

看来t_sort参数会有回显,但是后端将<、>替换为了空字符

 

那输入" type="text" autofocus oublur=alert(); ccc="

这里有一个图片

不知为啥这里调用不了alert


XSS靶场过关
https://www.pasiphae.top/2022/08/29/XSS靶场过关/
作者
pasiphae
发布于
2022年8月29日
许可协议