一、漏洞描述
xss跨站脚本攻击是黑客通过“html注入”篡改了网页,插入了js恶意脚本,前端渲染时进行恶意代码执行,从而控制用户浏览的一种攻击。经常出现在需要用户输入的地方,一旦对输入不进行处理,就会发生网页被篡改。
分为三类
反射型:经过后端,不经过数据库
存储型:经过后端,经过数据库
DOM型:不经过后端,是基于文档对象型的一种漏洞,dom-xss是通过url参数去控制触发的
xss靶场第九关服务器采用了替换恶意关键字的方式防御,对输入进行小写转化,并且检查提交数据字符串中是否有http://来判断是否为链接。可以伪代码绕过。
二、漏洞发现
直接看源码,服务端get方式接受keyword参数,并且对参数进行小写转换,将script、on、src、data、href、“关键字进行替换。最后放在友情连接的a标签内
str_replace()函数:将字符串中的指定字符替换为其他字符
检查提交的字符串是否包含http://子串,若有则返回链接,没有则返回不合法信息
strpos()函数:返回字符串在另一个字符串第一次出现的位置
可以使用伪代码(javascript:alert(‘z’))+http://字符串绕过检测,又因为服务端将script替换,可以将script字符编码的方式绕过替换。
伪代码:不同于因特网真实存在的协议,http://,ftp://.....是为了关联应用程序使用的,tencnet关QQ,data:用base64编码来在浏览器输出二进制,javascript:后面语句当作javascript执行。这个特殊伪协议声明了url主体是任意的javascript代码,让javascript解释器运行,包含多个语句用封号割开,所以alert()是语句而后面加的http://需要注释才能执行语句,否则不合法。
关于实体编码可以看我专栏的另一个文章
三、漏洞利用
先输入javascript:alert('z'),链接不合法
再用
javascript:alert //http://
需要注释后面的http://
这时候整个流程为:
1.get方式发送有弹窗语句值javascript:alert('z')//http://
2.服务器接受数据,对值进行关键字替换,并为找到恶意关键字,且有存在http://子串将值返回给浏览器此恶意语句当作链接
3.浏览器接受html文档中间包含javascript:alert('z')
4.浏览器解析html文档,html解码:javascript:alert('z')//http://,url解码:javascript:alert('z')//http//:,js解码:javascript:alert('z') //http://
5.当用户点击连接执行弹窗