xss防御及绕过-小记1


XSS搞安全的应该都很熟悉。本次并不是说其原理,仅是分享下在测试过程中遇到的案例。本人小白一枚,所以案例大佬们看着可能非常简单,就当是记录下自己笔记吧,不喜勿喷哈。。

关于xss的防御,基本上都是采用输入过滤,输出编码。最近做的一个项目中的某个模块中,进行了输入过滤,采用跳转的形式。比如遇到<>或alert,响应包就会302跳转到固定网址。遇到这种黑名单的可以尝试各种绕过。

有些输入是在input标签中的title或value属性中的值,这些,我们不是非得闭合标签,添加新标签才可以,我们可以直接闭合title或value这个属性,添加新事件,比如鼠标相关的事件,例如onclick、onmousemove。还有的采用多次编码的方式绕过<>的过滤。

0X01  限制输入<>的xss

课程名字处进行了过滤,不能输入<>,我们就尝试输入”onclick=”prompt(55),第一个引号是用来闭合前面属性的,后一个引号是用来闭合剩下的一个双引号。我们发现,保存后,点击课程名字并不弹框。通过查看元素,发现课程名字不是出现在属性值的位置,这种就需要增加新标签,才可能会执行。

但是,发现在别的地方执行了弹框。查看元素发现,此处显示把课程名字作为title属性的值显示的,那我们的输入就可完美的闭合title属性,增加鼠标点击事件,点击即执行。

这个漏洞差点错过,因为保存后点击并没执行。幸好在查看其它的地方时,注意到了,所以我们测试时需要细心。

0X02  绕过对<>的黑名单的xss

通过多次编码绕过对尖括号的过滤。但是这种只有在多次解码的地方才会执行成功。

比如:在课时名称处,先用了HTML实体化编码,比如<编码成< 但是在参数间隔是采用&符号来间隔的,所以我们对&进行URL编码,这样<最终编码为%26#x3c;。这样我们就可以输入成功<>,比如>,%26#x3e;%26#x3c;img src=1%26#x3e;,在保存时,抓包,将课时名称改为编码后的。

这样在涉及到HTML解码的地方就会执行成功,这就涉及到了逻辑了。就像你花了很漂亮的妆,但是自己要洗脸,那保护层就没办法了,哈哈哈哈,比喻不恰当,凑合看~

比如,在选择上传资源时,课时名称处的标签代码执行了。这样就绕过了对<>的过滤

0X03  需要改变请求方法才执行的xss

记录下遇到的反射xss,这个没有什么,只是改变一下。在此只是记录下。在跑注入的时候,若有xss则会提醒我们,在注入恶意代码后,响应包中可以看到执行了,但是在放包后,并没有弹框。这时,把请求方式改了,由POST改为GET(这个利用burpsuite中右击有个change request method),然后再copy URL访问,即可看到执行。

然后copy URL访问,执行

总结:对于xss的防范,输入过滤,基本上都是黑名单,但是有些还是可以绕过的,还有的输入过滤是在输入的时候采用编码后存到数据库中,但是编码后,变长,数据库存储就大了,而且输入编码也存在风险,如果在输出的时候,你又不小心给解码了。。。。XSS防御基本上采用输出处理,输出编码,不管输入的恶意的还是正常的,都全盘接收,但是输出显示时实体化编码输出,这样即使是恶意的也不会执行。