XSS搞安全的应该都很熟悉。本次并非说其原理,仅是分享下在测试过程当中遇到的案例。本人小白一枚,因此案例大佬们看着可能很是简单,就当是记录下本身笔记吧,不喜勿喷哈。。数据库
关于xss的防护,基本上都是采用输入过滤,输出编码。最近作的一个项目中的某个模块中,进行了输入过滤,采用跳转的形式。好比遇到<>或alert,响应包就会302跳转到固定网址。遇到这种黑名单的能够尝试各类绕过。安全
有些输入是在input标签中的title或value属性中的值,这些,咱们不是非得闭合标签,添加新标签才能够,咱们能够直接闭合title或value这个属性,添加新事件,好比鼠标相关的事件,例如onclick、onmousemove。还有的采用屡次编码的方式绕过<>的过滤。xss
0X01 限制输入<>的xss测试
课程名字处进行了过滤,不能输入<>,咱们就尝试输入”onclick=”prompt(55),第一个引号是用来闭合前面属性的,后一个引号是用来闭合剩下的一个双引号。咱们发现,保存后,点击课程名字并不弹框。经过查看元素,发现课程名字不是出如今属性值的位置,这种就须要增长新标签,才可能会执行。ui
可是,发如今别的地方执行了弹框。查看元素发现,此处显示把课程名字做为title属性的值显示的,那咱们的输入就可完美的闭合title属性,增长鼠标点击事件,点击即执行。编码
这个漏洞差点错过,由于保存后点击并没执行。幸亏在查看其它的地方时,注意到了,因此咱们测试时须要细心。spa
0X02 绕过对<>的黑名单的xssblog
经过屡次编码绕过对尖括号的过滤。可是这种只有在屡次解码的地方才会执行成功。事件
好比:在课时名称处,先用了HTML实体化编码,好比<编码成< 可是在参数间隔是采用&符号来间隔的,因此咱们对&进行URL编码,这样<最终编码为%26#x3c;。这样咱们就能够输入成功<>,好比><img src=1>,%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防护基本上采用输出处理,输出编码,无论输入的恶意的仍是正常的,都全盘接收,可是输出显示时实体化编码输出,这样即便是恶意的也不会执行。