(1)测试XSS(Reflected),要求在正常访问网页时弹出警告框。
![](https://img-blog.csdnimg.cn/20200706135546891.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTkzNDUyMA==,size_16,color_FFFFFF,t_70)
low
前端代码:
![](https://img-blog.csdnimg.cn/20200706135948432.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTkzNDUyMA==,size_16,color_FFFFFF,t_70)
服务器端核心代码:
![](https://img-blog.csdnimg.cn/20200706135904994.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTkzNDUyMA==,size_16,color_FFFFFF,t_70)
分析:
可以看到,代码直接引用了name参数,并没有任何的过滤与检查,存在明显的XSS漏洞。
漏洞利用
直接在输入框中输入:
alert(/You are attacked by hacker!/)
,成功弹框:
![](https://img-blog.csdnimg.cn/20200706140219359.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTkzNDUyMA==,size_16,color_FFFFFF,t_70)
Medium
服务器端核心代码:
![](https://img-blog.csdnimg.cn/20200706145055168.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTkzNDUyMA==,size_16,color_FFFFFF,t_70)
分析:
可以看到,这里对输入进行了过滤,基于黑名单的思想,使用str_replace函数将输入中的替换为空字符串,相当于删除,这种防护机制是可以被轻松绕过的。(注释:该函数是区分大小写的。)
漏洞利用
1.双写绕过-(原理:该函数只执行一次)
输入
alert("You are attacked by hacker!")
,成功弹框:
![](https://img-blog.csdnimg.cn/2020070615133531.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTkzNDUyMA==,size_16,color_FFFFFF,t_70)
2.大小写混淆绕过-(原理:该函数是区分大小写的。)
输入
alert(/You are attacked by hacker!/)
,成功弹框:
![](https://img-blog.csdnimg.cn/20200706151416290.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTkzNDUyMA==,size_16,color_FFFFFF,t_70)
3.尝试使用别的标签来绕过
click
click
![](https://img-blog.csdnimg.cn/20200706154521215.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTkzNDUyMA==,size_16,color_FFFFFF,t_70)
High
服务器端核心代码:
![](https://img-blog.csdnimg.cn/2020070615153995.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTkzNDUyMA==,size_16,color_FFFFFF,t_70)
可以看到,High级别的代码同样使用黑名单过滤输入,preg_replace()函数用于正则表达式的搜索和替换,这使得双写绕过、大小写混淆绕过(正则表达式中i表示不区分大小写)不再有效。
漏洞利用
虽然无法使用标签注入XSS代码,但是可以通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。
输入
,成功弹框:
![](https://img-blog.csdnimg.cn/20200706154349949.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTkzNDUyMA==,size_16,color_FFFFFF,t_70)
PS:这里不知道为什么alert()函数里输入空格该代码会执行失效,我们可以查看一下前端代码的区别:
![](https://img-blog.csdnimg.cn/20200711151557440.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTkzNDUyMA==,size_16,color_FFFFFF,t_70)
从空格开始,他们变成了元素,不知道是什么原因造成的,如果使用抓包工具Burpsuite 进行修改就不会出现这样的问题。
Impossible
服务器端核心代码:
![](https://img-blog.csdnimg.cn/20200706154856341.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTkzNDUyMA==,size_16,color_FFFFFF,t_70)
分析:
Impossible级别的代码使用htmlspecialchars函数把预定义的字符&、”、 ’、转换为 HTML 实体,防止浏览器将其作为HTML元素
预定义的字符是:
&:转换为;":转换为;':转换为成为 ':转换为;
这里无法利用XSS漏洞。
(2)测试XSS(Stored),要求在正常访问网页时弹出警告框。
提示:
![](https://img-blog.csdnimg.cn/20200711144732893.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zOTkzNDUyMA==,size_16,color_FFFFFF,t_70)
我们在表单输入的信息会在表单下方显示,如果当我们测试XSS注入时,前面测试的结果会影响到后面的测试,我们只需点击“Clear Guestbook”按钮即可消除记录。
LOW
服务端源代码:
|