01 xss漏洞介绍
XSS全称(Cross Site Scripting)跨站脚本攻击,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017年度分别为第三名和第七名,XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的危险代码,
当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。
从上面中的一段话,可以得知,XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行“服务端”攻击,因为管理员要比普通用户的权限大得多,
一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。
02 xss的原理
xss:将用户的输入当作前端代码执行
注入攻击的本质,是把用户输入的数据当做代码执行。
这里有两个关键条件:
第一个是用户能够控制输入
第二个是原本程序要执行的代码,拼接了用户输入的数据
XSS拼接的是网页的HTML代码,一般而言我们是可以拼接出合适的HTML代码去执行恶意的JS语句(总结:xss就是拼接恶意的HTML)
02 xss的分类
反射型XSS:<非持久化>攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。一般是后端代码进行处理
存储型XSS:<持久化> (你提交的数据成功的实现了XSS,存入了数据库,别人访问这个页面的时候就会自动触发) ,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie 。
DOM型XSS:不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞。
什么是DOM:DOM全称是Document Object Model,也就是文档对象模型。我们可以将DOM理解为,一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态地访问和修改文档内容、结构和样式。当创建好一个页面并加载到浏览器时,DOM就悄然而生,它会把网页文档转换为一个文档对象,主要功能是处理网页内容。故可以使用 Javascript 语言来操作DOM以达到网页的目的。
03xss的危害
挂马
盗取用户cookie
DOS(拒绝服务攻击)客户端浏览器
钓鱼攻击
恶意删除文章、留言;篡改数据等
劫持用户web行为,进一步渗透内网
传播蠕虫病毒
等等
04 怎么检测xss
1、手工检测:
一般是想办法让浏览器弹窗(alert)最经典的弹窗语句
如:<script>alert(1)</script>
一般证明XSS是否存在,就是在正常页面传参然后构建参数让他弹窗就是存在XSS了
2、工具检测
工具扫描:APPscan、AWVS
05 XSS的防御
XSS防御的总体思路是:对输入进行过滤,对输出进行HTML编码
1.对输入的内容进行过滤,可以分为黑名单过滤和白名单过滤。黑名单过滤虽然可以拦截大部分的 XSS 攻击,但是还是存在被绕过的风险。白名单过滤虽然可以基本杜绝 XSS 攻击,但是真实环境中一般是不能进行如此严格的白名单过滤的。
常见的过滤方法:
黑白名单过滤
根据业务需求进行过滤,比如输出点要求输入手机号,则只允许输入手机号格式的数字。