一个专门练习xss
的漏洞平台,似乎现在github
中也无法下载了,不晓得在什么时候下的,收集了一份,等这个弄完了就准备去系统学习docker
了。
安装其实没啥好说的,用之前的环境扔进去就可以用了,cwth。
xss-labs
一共有level 20
,尽力去做着看看,GOGOGO
。
看了好半天才看出来是啥意思。。。前端里面只有一个跳转到第二关的JS
而且还记录了payload
的长度,看来挑战还是挑战,还希望xss
用最小长度去完成,算了玩不起,现在能通关就可以了(手动狗头),这里使用就可以了。
这里很好奇为什么可以自动到第二关,所以就去查了下php
源码。
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "欢迎用户"
.$str."";
?>
这里有个ini_set("display_errors", 0)
,结果是用来看控制php
错误报告的,看来原因就是在前端刚刚的那个脚本上了,其实就是当弹框的时候就会自动重定向到下一跳,感觉是把windows.alert
函数进行重写了,同时查了下几个弹窗函数的区别,详细区别请点我。
直接输入上一关的脚本,查看结果。
脚本完全输入了,这里应该是被实体转义了,查看前端代码。
一共有两处,第一处就是显示的地方,这里应该是被做转义了,尝试第二次,先将闭合,构造
payload
为">
,成功弹窗。
没想到第三关开始图片居然做懒了,不过这个红色的括号不晓得是不是提示,哈哈。
一样的,先走一波。
结果完全输出了,但是很奇怪输入框中怎么就少了一部分,看前端去。
原来这次下面也做了实体转义,但是明显看到前面的一部分没有被转义,之前在Pikachu
遇到过,闭合再构造就可以了'onclick='alert("xss")
,之所以不用是因为
<>
仍然会被转义,只是由于当作字符串来显示,所以看到的是正常的而已。
到这里还需要最后一步,在空白的框里点击一下,就会成功进行第四关。
这里除了onclick
以外还可以使用onmouseover
,'onmouseover='alert(/xss/)
,这个时候只需要把鼠标放上去就可以了。
不晓得是不会再也不会有骚话看了。。按上一关的方式扔进去,必然失败,看前端。
发现'
原样输出,不知道是实体了还是没过滤,用'"&<>
试一下。
发现只有一个'
了,而且还有一个提示,payload
的长度只有3
,我明明打的是5
个,这里说明应该是有过滤的,查看前端。
结果应该是<>
被过滤了,尝试一下。
果然是所有的<>
都被过滤了。那这个题,就沿用上一题的思路,用onclick
,但是用上一关的payload
失败了,仔细观察代码。
那这次直接使用"
闭合尝试。
有戏,构造"onclick="alert(/xss/)
,然后点击框即可。
用上一关的payload
,失败,看前端。
不晓得发生了啥,o
后面多了个_
。。。。尝试了下,好像就是on
被针对了,再试试其余的特殊符号。
看来确实是"
闭合的,然后尝试了发现同样被针对了。。
还尝试了大小写,但是均输出为小写,应该也是做了转换的。
看来前面几关的用法都不行了,再试试href
,构造一个">
。
点一下,点一下就好了!!!
另外去看了下源代码,基本都猜对了。
又看到骚图了,没看懂。。。。老规矩,直接将上一关的扔进来,肯定失败,看前端。
这次连href
也干掉了。。。都扔进去试试看。
哎哟,大小写给取消了。构造">
。
顺利搞定了,但是有个地方感觉很奇怪,前端里面多出来不少东西,不晓得哪来的,我以为是图片的提示。。。
看源码了,没发现什么,到是多过滤了一个data
,可能就是下一关的提示,说得我都信了。。。
$str = $_GET["keyword"]; $str2=str_replace("
中的/
也被删除过滤了,那就再换成上一关的
好像空格也被搞了,被实体转换了,使用%0a
替代空格。
搞定搞定,去看下源代码ini_set("display_errors", 0); $str = strtolower($_GET["keyword"]); $str2=str_replace("script"," ",$str); $str3=str_replace(" "," ",$str2); $str4=str_replace("/"," ",$str3); $str5=str_replace(" "," ",$str4); echo "
" .$str5.""; ?>我还以为做了实体转换和过滤,原来只是做了替换,难怪之前尝试了双写也不行。。
0x17 level 17 args
哎,图都没有了。。。
用来定义嵌入的内容,所以这里应该是插入了一个
swf
图片,后面那个?a=b
又是啥玩意。。。还是看源码吧。ini_set("display_errors", 0); echo "
原来只是需要提交两个参数,用
a
和b
代替,参数还被转义了。。。突然看到这个,我瞎了
构造一个arg01=%20onclick&arg02=alert(/xss/)
感觉都是对的,哪都点了,就是不行,折腾了半天发现,firefox
这个swf
好像读不出来。。。切换到chrome
,想骂人,对不起,我错了不该喷作者偷懒。。。。。。。。。。。
然后点了图片还是不行,于是想着换了一个payload
,鼠标放上去就行的那种onmouseover
或者onfocus
都行。。
哭了。。。
0x18 level 18 ??????
能不能用心点,什么破图,都快结束了,还搞这么烂。。。
用上一关的payload
直接过了,看源码也没看出啥区别,什么鬼???????????
0x19 level 19 flash xss
尝试了一翻后再结合源码发现好像怎么都不太行了。
只能用"
闭合,但是"
会被转义,无法闭合,所以即使看起来是好的,也无法弹框。。。
查了下,好像得要做flash
反编译才行,提不起兴趣。。。以后再说吧,先记个答案。
arg01=version&arg02=123
来了,来了,点我进详解
0x20 level 20 flash xss
换成了白色的flash
,和19关一样,暂时没啥兴趣,记个答案再说,以后单独开一个写,肯定不使鸽,哈哈哈。。。
arg01=id&arg02=\%22))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height
详细解释请点我,两天就更了,没想到吧~