http://localhost/xss-labs/level20.php?arg01=a&arg02=b
又是空白页,难道SWF没有刷出来吗?
查看源代码,走起!!!
又是一模一样的源代码!!!
看大佬的WP,又是源代码审计!!!
http://localhost/xss-labs/xsf04.swf
这一关是ExternalInterface.call。
首先通过LoaderInfo从URL中取值
除了上面的id以外还要取两个值width和height。
接下来构造payload就可以了,arg01=id&arg02=xss\”))}catch(e){alert(/xss/)}//%26width=123%26height=123
首先arg01=id这个就不用解释了,arg02=xss\”))}catch(e){alert(/xss/)}//这个地方有不少要说明的,首先为什么要加”,来看看不加的结果
所以要加一个”进行闭合,让id不等于xss))}catch(e){alert(/xss/)}//,因为等下会直接将id的值全部都传到flash中,flash中仍然也有需闭合的部分,再来看看有\”的结果
你会发现好像没有什么变化,这因为php做了htmlspecialchar()过滤,至于为什么这样写,那就得看flash的代码了,等会id就会传到下面来
后面的可以不用管,因为会被我后面的//给注释掉,这里注意,由于是通过LoaderInfo取值的,所以就会变成这个样子
{ “id” = “xss\”))}catch(e){alert(/xss/)}//” }
可以看到,如果不加\转义id就会变成xss,也就是下面的这个样子,当id再传到里面的函数里面时就起不到报错的作用了。
{ “id” = “xss”))}catch(e){alert(/xss/)}//” }
接下来有许多函数都使用了id,ExternalInterface.call(a,b)相当于JS中的函数名(代码)
我们可以看到上面函数名已经固定了,要是没固定直接改成alert美滋滋,所以我们就从id这里着手,把id的值代进去。
ExternalInterface.call(“xxxx”,”xss\”))}catch(e){alert(/xss/)}//”),这样不太容易看的话,换种方式
private function clickHandler(param1:Event) : void
{
System.setClipboard(clipText);
ExternalInterface.call(“ZeroClipboard.dispatch”,”xss\”))}catch(e){alert(/xss/)}//”,”complete”,clipText);
}
把多余的去掉就会变成这样
private function clickHandler(param1:Event) : void
{
ExternalInterface.call(“ZeroClipboard.dispatch”,”xss\”))}catch(e){
alert(/xss/)
}
//”,”complete”,clipText);
}
然后你就会发现这样一搞,由于前面少了一个真正可以闭合的”于是会报错,所以后面抛出异常的catch就可以生效了,于是执行后面的alert(/xss/)。
再来说下//后面的%26width=123&26height=123,%26其实是&,那为啥非得写%26呢,先来看一个&的。
你会发现啥都没有,因为php就拿前两个参数,再看%26
可以了,访问这个地址就搞定了,不得不说我觉得我能耐心把这两题做完,感觉这一年学习真的有进步,哈哈。
PAYLOAD:arg01=id&arg02=xss\”))}catch(e){alert(/xss/)}//%26width=123%26height=123
http://localhost/xss-labs/level20.php?arg01=id&arg02=xss\”))}catch(e){alert(1)}//%26width=123%26height=123
并没有弹出,这题是通过报错进行弹出!!!
还有一种偷鸡的方法:
直接前台改!!!
PAYLOAD:onmouseover=alert(1)
onmouseover=alert(1)
onmouseover=alert(documnet.cookie)
来源:freebuf.com 2021-07-30 08:02:42 by: 知非知非知非
请登录后发表评论
注册