XSS进阶二

实验来源:合天网安实验室

实例四、换一个角度,阳光依旧

      关键代码:

XSS进阶二

分析:首先preg_match函数是php的正则表达式匹配函数,一旦从$_GET['name']中匹配到script这个字眼,i参数忽略大小写,die() 函数输出一条消息--errpr,并退出当前脚本,下面的代码就不会再执行,这样的话script标签是不能用的啦,只能用的只能是其他标签,XSS进阶一里面的最后一个例子的img标签试试,应该是可以的,因为可以绕过if语句啊,结果请看下面,可以吧

XSS进阶二 

任务一

根据实例四的代码提示,下面哪种方式能成功:  【单选题】  题目已完成,2 XSS进阶二

【A】<img src=1 onload=alert(1)>【B】<img src=1 onerror=alert(1)>【C】<img src=1 onchange=alert(1)>【D】<img src=1 onfocus=alert(1)>B:就不说了,A:onload事件会在页面或图像加载完成后立即发生,因为1压根就不是图片,怎么加载完成了,所以不会执行alert函数,C:onchange 属性适用于:<input>、<textarea> 以及 <select> 元素。D:onfocus 事件在对象获得焦点时发生,图像都没怎么获取焦点实践才是检验真理的标准XSS进阶二
XSS进阶二XSS进阶二

实例五、限制了我的左手,我还有右手

     关键代码:

XSS进阶二

分析:preg_match匹配alert,并忽略大小写,不过改为大写的话,函数也不能行的啦,这样alert函数就不行了吧,还有其他函数啊,如prompt(提示消息框),confirm(确认消息框)啊,具体看图:

XSS进阶二

confirm就是比alert多了个取消按钮

XSS进阶二XSS进阶二

任务二

根据实例五的代码提示,下面哪种方式不能成功:  【单选题】  题目已完成,2 XSS进阶二

【A】<SCRIPT>confirm()</SCRIPT>【B】<script>confirm()</script>【C】<img src=1 onerror=confirm()>【D】javascript:confirm()这个很明显是D了,C不用说了,script没过滤,A,B肯定可以啦

实例六、大胆去思考,小心去求

      关键代码:

XSS进阶二

分析:首先php将get获取到的值输出出来,那么就是$_GET['name']的值当做字符串复制给js的$a变量了,xss很常说的一个是什么标签闭合什么的,这里能不能语句闭合呢

XSS进阶二

我们看看源码

XSS进阶二

整理一下就是:

[javascript] view plain copy
  1. <script>  
  2.     var $a = "";  
  3.     alert("bye!");  
  4.     "";  
  5. </script>  
这就是正常的js代码,不过最后一句(不过语法是没错的),在本地也测试了

XSS进阶二


当然这样会好理解一点

XSS进阶二

任务三

根据实例六的代码提示,下面哪种方式能成功:  【单选题】  题目已完成,2 XSS进阶二

【A】a';alert($a);$a='【B】a";alert($a);$a="【C】a';alert($a);$a="【D】a”;alert($a);$a='根据上面的实验,肯定是选B啦,原因是单引号不能够跟前面或者后面的双引号匹配啊XSS进阶二
分析与思考

1.以上过滤会有哪方面的缺陷?实例四:只过滤了script标签实例五:只过滤alert函数实例六:这个没过滤吧

2.如果你是一个防御者如何修改程序来防止弹出提示框类的跨站执行?(1)将一些字符转换成HTML实体,过滤关键字(script,alert,javascript等);过滤html事件属性(2)如果参数一定是数字的,获取到之后要将其强制转换成整型,长整形什么的(3)输出前过滤(输出编码[html编码])(4)输入限制(如邮箱,手机等),利用前段js和后端语言双重验证判断格式(5)建立白名单和黑名单,不断添加更新xss filter//下面两个好像与问题无关(6)使用HttpOnly Cookie(6)加密cookie