XSS是一种出现在网页开发过程中的的计算机安全漏洞,而XSS攻击则是指通过利用这些遗留漏洞,将恶意指令代码注入到网页中,使用户加载并执行攻击者恶意制造的网页程序。
一般情况下,攻击者制造的恶意网页是JAVAScript,但其实Java、 VBScript、ActiveX、 Flash、甚至是普通的html都包括在内。
如果攻击成功,则攻击者会得到目标的部分高级权限、私密网页、会话和cookie等各种内容。
XSS攻击的中文译名为跨站脚本攻击,英文全拼是Cross Site Scripting。
这时候就有小伙伴会疑惑,明明缩写是css,怎么就变成X了呢?
这是因为另一个名词——层叠样式表的缩写也是CSS(全拼:Cascading Style Sheets),为了不和它混淆,才让X代替了C。
看过了介绍,下面就和e小安再进一步了解XSS攻击的“方方面面”。
从攻击代码的工作方式看,它可以分为三个类型,分别是:
持久型,攻击者可直接将攻击代码保存到服务端的数据库中,每当用户访问带有相应的查询数据库页面时,攻击就会开始。
反射型,发出请求时,攻击代码存在于URL中,随后提交到服务器进行处理解析,处理完毕之后,XSS代码随同服务器响应内容一并返回给浏览器,随后浏览器解析执行XSS代码。
DOM型,这是一种特殊的反射型XSS,客户端的脚本程序可以动态检查和修改页面内容,而不依赖于服务器端的数据。受害者端的网页脚本在修改本地页面DOM环境时未进行合理的处置,而使得攻击脚本被执行。在整个攻击过程中,服务器响应的页面并没有发生变化,引起客户端脚本执行结果差异的原因是对本地DOM的恶意篡改利用。
大小写绕过,在网站过滤了script这个关键字时,我们可以尝试切换大小写,例如Script、sCript等等任意大小写组合,因为在脚本语言中,script字母大小写的不同是不影响执行的。
复写绕过,有些网站会把script替换为空字符,这个时候我们双写script可以绕过,例如,scriSCRIPTpt,然后网站会把中间的大写script替换为空字符,而外部小写的scri和后面的pt就会拼接成script,成功绕过。
编码绕过,对于一些过滤关键字的防护我们可以通过编码的方式进行绕过,假如目标过滤了alert,我们就可以通过Unicode编码进行绕过,然而编码过的代码不能被解析,我们可以通过eval()函数来执行,这个函数可以对编码过的内容进行解码之后再执行。
主动闭合绕过,在用户与浏览器进行交互之后,有些网站会修改某些元素,这个时候我们就可以审查页面元素,使用 " 或者 > 来确定具体的绕过方式。
事件绕过,当无法对script进行绕过时,我们就需要通过其他的事件来触发我们需要进行的操作,例如,οnclick=alert(1)、οnerrοr=alert(1)。
● 对特殊字符进行转义,例如"、’、<、>、&、/
● 对关键字进行过滤,如常见的script、alert、onclick、onerror等
● 对用户交互数据进行矫正,根据自己业务需求,对用户输入的数据是否符合规范进行判断