XSS-labs闯关

292 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

准备阶段

大家首先要去下载一下这个靶场。还要有一个phpstudy

第一关

屏幕截图 2022-09-19 124425.jpg

第一关就是这样的,然后我们去看一下它的源码。

屏幕截图 2022-09-19 124606.jpg

我们可以看到,它是没有任何的过滤的。而且根据网页的URL可以看出,它是get提交的。那我们就很好注入了。

name=<script>alert(1)</script>
注意,这个是填写在url上面的。

然后我们就可以看到有个弹窗。

屏幕截图 2022-09-19 124843.jpg 第一关就这样结束了。

第二关

屏幕截图 2022-09-19 125018.jpg

这边我们可以看到有个提交框,我们可以先试着输入点东西。

<script>alert(1)</script>

屏幕截图 2022-09-19 125212.jpg

我们可以看到,它把我们输入的东西输出在了上面。那我们还是先看源代码吧。

屏幕截图 2022-09-19 125314.jpg

我们可以看到,它对于我们的代码没有做任何的处理。仔细看value我们可以看到只是简单的一个双引号,那我们可以让这个双引号先闭合,然后直接输入自己的代码,看看会怎么样。那么代码也就可以直接写出来了。

"><script>alert(1)</script><"

成功之后同样也会跳出一个完成的不错的提示框,然后自动到第三关

第三关

屏幕截图 2022-09-19 130051.jpg

这个和第二关有点相似的,也是一个输入框。我也是一样输入一点东西看看有什么效果。

屏幕截图 2022-09-19 130226.jpg

我们可以看到这个跟第二关是一样的,都是输入框输入什么,上面就会显示些什么。那我们先看看源码吧。

屏幕截图 2022-09-19 130409.jpg

我们可以看到第17行的value,我们输入的值已经被改过了,说明这一页是有一点处理输入的值,不像之前的两关。而且我们可以看到,value的后面是单引号,那我们就很容易知道,单引号估计是没有被屏蔽的。那我们现在可以用script吗?显然这个是不可以的。为什么呢?因为我们的很多符号都被屏蔽了,转换了格式,所以会不起效果。这个时候就要用到另一个方法了。

'onmouseover='alert(1)'>

这边用到的是onmouseover事件,具体的可以百度一下,这边就不过多赘述。注意的是,输入好之后,要把鼠标放到输入框上面才可以哟。

同样,也有弹框表示通过,并且来到了下一关。

第四关

屏幕截图 2022-09-19 131418.jpg

第四关我们的处理也是一样的,先输入一点东西看看效果。没有起作用,那我们就源代码走起。

屏幕截图 2022-09-19 131520.jpg

仔细看看我们的第17行的value,我们发现我们的左右括号都没有了,那我们试试上一关的通过方法。但是也不是直接的复制,咱们还是要看看的,发现它是双引号。

"onmouseover="alert(1)

我们看到这里我们就要知道,代码的植入并不是普普通通的,我们要根据上下文的内容来,要灵活。同样的,我们也要将鼠标放到输入框那里激发事件才可以通过。

第五关

屏幕截图 2022-09-19 132142.jpg

依据上面的做法,我们其实已经很熟悉了。先输入点东西看看,然后看源代码。

屏幕截图 2022-09-19 132255.jpg

我们看第17行的value,我们的script变成了别的,那我们再试试事件吧。

屏幕截图 2022-09-19 132542.jpg

我们可以看到,我们的onmouseover也变成了o_nmouseover。现在我们的两把斧都没有用了,那我们咋办呢?那我们就试试第三把斧头。利用超链接。

"><a href="javascript:alert('1')">1</a>

这个时候提示框旁边就有一个1,点击一下就可以过关啦。

第六关

屏幕截图 2022-09-19 133522.jpg

我们依旧像之前一样操作,先输入一些其他的内容看看,之后看源代码。

"><script>alert(1)</script><"

屏幕截图 2022-09-19 133652.jpg 我们可以看到,我们的JavaScript遭到了改变。但是符号是保存完整的。我们看看onmouseover

"onmouseover="alert(1)

屏幕截图 2022-09-19 133844.jpg 我们可以看到,这个也遭到了改变,那我们试试我们新的第三把斧头。

"><a href="javascript:alert('1')">1</a>

屏幕截图 2022-09-19 134118.jpg

我们可以看到这个也是不行的也被改变了,这个时候我们咋办呢?第四把斧头好像也还没有出炉,咋办,很急

现在我们就把目光再转回到自己已经有的三板斧,我们修改一下,我们发现,它只是识别的每个字的前两个字符,那我们能不能试着变成大写,看看行不行。

"><SCript>alert(1)</script><"
"ONmouseover="alert(1)
"><a HREf="javascript:alert('1')">1</a>

这个也是网络安全吸引我的地方,我们是在和网站的制作者斗争,我们都在抖小聪明,就看谁掌握的多,就看谁会做出改变。

第七关

屏幕截图 2022-09-19 134746.jpg

现在我们先试试我们改变过的武器行不行。结果当然是不行咯

屏幕截图 2022-09-19 134902.jpg

我们看到我们的script全部都没有了,都被屏蔽了,我估计其他的都是一样的,那我们现在怎么办呢?铸造第四把斧头的老师傅在睡觉,我们又只能看着自己已有的三板斧了,大小写已经用过了,那我们还能怎么办呢?

这时候我看到了桌子上一模一样的两个水杯,两个?那我们能不能试着把里面的字母多写几个看看。说时迟那时快,我就瞧准了我的第一把斧头。对它进行修改

"><scscriptript>alert(1)</scscriptript><"

这样我们就可以通过了。

第八关

屏幕截图 2022-09-19 135754.jpg

我们试试上一关我们改过的一把斧

屏幕截图 2022-09-19 135849.jpg

结果是明显的。那我们看看我们的值被怎么修改了,这个时候我们就不在是看我们的value了,而是看第20行的href。我们可以看到,我们的script被修改了,双引号也被修改了。这个时候我们的第四把斧头造好了,而且这个十分强大,带了两个方法。伪协议和十六进制的替换。

java&#x73;cript:alert(1)

这样我们又过关了。具体什么是伪协议和十六进制的替换,大家可以百度一下,这边不再赘述。

第九关

屏幕截图 2022-09-19 140716.jpg

第九关我们可以看到,也是一个链接,那我们把上一关的代码拿过来试试看

屏幕截图 2022-09-19 140831.jpg

这个时候我们看看它的href,它问我,我的链接合法吗?我咋办,嗯~怎么不算呢? 当然是不可能的啦,那既然它要合法的链接,那我们能答应吗?当然能啦,我们塞个百度网址看看。

java&#x73;cript:alert('http://baidu.com')

结果就是通关啦

第十关

屏幕截图 2022-09-19 141312.jpg

我们看到我们这个是没有输入框的,那我们就可以知道,这个是get请求,应该是在url上面做文章,那我们就看看吧。在url的keyword后面植入我们的代码。

"><SCript>alert(1)</script><"

屏幕截图 2022-09-19 141617.jpg

结果当然是不行的。 但是我们发现跟上面不一样的是,这边的17到19行的三行,好像没有体现在网页上,那这个怎么无缘无故出现在这边呢?那我们试试看能不能用这三个东西。

我们在url上面给t_link t_history t_sort赋值,发现之后t_sort有反应。那我们就可以在这边下文章了。

&t_sort=1" onmouseover=alert(1) type="1"

我们就会发现网页上面多了一个方框,方框里面写了个1,我们鼠标放上去的时候就是我们过关的时候,这种利用网页元素的方法也是一个技能点。

第十一关

屏幕截图 2022-09-19 142254.jpg

这一关其实和第十关差不过多的,源代码里面也可以看出有些元素没有用到。

屏幕截图 2022-09-19 142359.jpg

当然,试过之后发现都不太行,那我们就抓包一下,抓包之后我们可以看到一个元素Referer 我们只要修改一下这个就可以了。

Referer: " onmouseover=alert(/xss/) type="text

第十二关

因为后面的都是抓包结果,所以我就直接放抓包的图片。

屏幕截图 2022-09-19 144041.jpg

我们可以看到的是,有一个User-Agent,我们对其进行修改。

User-Agent:" onclick=alert(/xss/) type="text

第十三关

image.png

源码

当我给t_link赋值的时候,我发现t_cook发生了变化,它让我调用它,那我就想着赋值,最后发现给我的是一个图片,那我就知道,这个地方时要抓包的。 image.png

这边我们修改的是Cookie中的user

onfocus=alert(/xss/) type="text

第十四关

这一关好像是有点问题的,这边我也不知道咋回事,大家可以百度一下

第十五关

image.png

源代码

image.png

分析:通过第一行以及我们提交的参数src的值被插入到<span>标签的class属性值中发现
这里用了angular js的ng-include,其作用相当于php的include函数。这里就是将1.gif这
个文件被包含进来。
既然这里可以包含html文件,那么也就可以包含之前有过xss漏洞的源文件
所以说代码就是
    'level1.php?name=<img src=1
    

第十六关

image.png

源代码

屏幕截图 2022-09-19 145332.jpg

这边的过滤就不是很全面了代码就直接来了。

<img
src=”111onmouseover=alert('1')
payload为:keyword<img%0Asrc=xss%0Donmouseover=alert('1')>

第十七关

image.png

还是继续看源代码

image.png

出的值都被做了实体化转义,无法闭合标签,但是问题在于本身embed标签可以加入事件,
可以在arg01,或者arg中加入事件去触发即可
代码就是
    arg01=123%20onmouseover=alert('1')&arg02=b

第十八关

image.png

查看源码

image.png

其实这一关和上一关差不多 代码

arg01=123%20onmouseover=alert('xss')&arg02=b

第十九关

image.png

查看源代码

image.png

这一关是我网上查了教程的,因为我没有什么头绪,后来发现是要下插件才可以的,我想着之前都没有关系呀,但是我又不想下插件,所以我就直接试试他的方法。

这一关开始是flash xss了,首先下载页面中的flash,对源码进行分析,我用的是
JPEXS这款工具,首先定位getURL函数
代码就是
    arg01=version&arg02=%3Ca%20href=%22javascript:alert(%27xss%27)%22%3E111%3C/a%3E
   

第二十关

image.png

来看源代码

image.png

这个也是网上找的教程,没有办法,能力有限,不过我会好好查漏补缺的,好好进步。

arg01=id&arg02=%22))}catch(e){(alert)(/XSS/.source);}//%26width=500%26height=500

总结

这样一套流程下来我意识到,漏洞是一定会存在的,黑客与白客之间的斗争一直都存在,不过不能否认的是,因为黑客的存在,我们的网络才会如此的安全,感谢那些默默付出的人们,我的能力很低,大家有什么看不懂的地方也很正常。我写博客也是为了自己以后复习翻阅,不过真的很开心能成为一个掘友,我会好好努力的。