今天继续给大家介绍渗透测试相关知识,本文主要内容是XSS-labs靶场实战第7-8关。
免责声明:
本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负!
再次强调:严禁对未授权设备进行渗透测试!
第七关页面如下所示:
我们采取第六关的payload,发现不行,但是在查看源码时却可以发现,href和script会丢失,如下所示:
很自然的,我们想到了后台对href和script进行了过滤,查看源码果然发现了这一点,如下所示:
针对这种把关键字替换成空白的,最好的方式即采用双写绕过,即我们把href和script插入到href和script之间,当内层的href和script被过滤掉后,外层又拼接形成了href和script,构造payload如下所示:
123">(1)">123</a>
我们使用该payload,即可成功,如下所示:
第八关页面如下所示:
通过简单测试,我们可以发现,在第八关中,我们输入的内容会出现在标签中的href属性中,如下所示:
第八关几乎补全了之前所有的漏洞,我们并不能够使用之前的任何一种payload来进行测试,第八关源码如下所示:
但是,我们在这一关却可以采用Unicode编码来进行绕过第八关的所有过滤。我们将payload进行Unicode编码,如下所示:
这样,就可以成功突破本关啦,如下所示:
最后,我们来讨论以下之前的关卡能不能也使用Unicode编码来进行绕过的问题,答案非常明确:不能!
比如在第六关使用Unicode编码绕过,结果如下所示:
细心的同学可能发现,在第八关与前面关卡的区别在于,第八关我们的内容直接作为标签中href的属性,而不是我们构造了一个标签,正是这个小小的区别,导致了在这里我们可以使用Unicode编码绕过,而在其他的关卡中不能使用Unicode编码绕过。
实际上,Unicode编码的作用仅仅是当浏览器处理时,可以自动将其进行解码,但是并不能替换Unicode编码的本质。在第八关中,浏览器处理到标签中href的内容时,发现时Unicode编码,因此会将其解码,并执行其中的语句。第八关采用Unicode编码后对于浏览器而言源码如下所示:
但是在第六关中,当我们把标签整体进行Unicode编码时,浏览器也会将其进行解码,但是并不会将其作为标签来进行处理。
我们可以进行小的实现,将JavaScript代码整个进行Unicode编码,如下所示:
访问后,我们能得到解码后的内容,但是浏览器不会将其作为JavaScript代码来进行处理,如下所示:
如果我们对script标签中的内容进行Unicode编码,如下所示:
name浏览器会认为这个是script编码,但是并不会将编码中的内容进行解码,并当作JavaScript脚本来执行,如下所示:
只有像第八关一样,我们将一个属性中的内容采用Unicode编码,才会使得Unicode编码真正发挥作用。例如,我们使用img标签中的onerror属性来触发JavaScript脚本,源代码如下所示:
结果如下所示:
从上图可以看出,浏览器成功进行了弹窗。而当我们将onerror本身也作为Unicode编码内容的一部分时(源码如下所示),则不会起到JavaScript脚本应用的效果。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200