xss与csrf
xss原理分类及危害
xss-labs
xss构造利用及防御
xss与csrf的区别
xss原理
跨网站脚本(Cross-site scripting,简称XSS) 又称为跨站脚本攻击,它是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。XSS允许恶意用户将代码注入网页,其他用户在浏览网页时就会执行其中的恶意代码。恶意用户利用XSS代码攻击成功后,可能得到很高的权限(执行操作)、私密网页内容、会话和Cookie等各种内容。与XSS相关的攻击类型包括Cookie窃取、会话劫持、钓鱼欺骗等,这类攻击通常包含了HTML以及用户端脚本语言
xss分类
-
反射型
- 主要用于恶意脚本附加到URL地址的参数中。它需要欺骗用户自己去点击链接才能触发XSS代码,一般容易出现在搜索页面、输入框、URL参数处。反射型XSS大多数是用来盗取用户的Cookie信息。
- 常见攻击方式:攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。
-
储存型
-
存储型XSS又称为持久型跨站脚本,比反射型XSS更具威胁性,并且可能影响到Web服务器自身安全,因为攻击脚本可以被永久地存放在目标服务器的数据库或文件中,具有很高的隐蔽性。
-
存储型XSS的代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。存储型XSS一般出现在、评论、博客日志等用户交互处,这种XSS比较危险,容易造成蠕虫、盗窃cookie等
-
常见攻击方法:该攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地被存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本就会在他们的浏览器中执行相关操作
-
-
dom型
-
什么是dom?常见攻击方法:该攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地被存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本就会在他们的浏览器中执行相关操作
-
DOM-XSS漏洞是基于文档对象模型的一种漏洞,不经过后端,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS
-
常用攻击方式:用户请求一个经过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞
-
漏洞存在的主要原因
- 参数输入未经过安全过滤
- 恶意脚本被输出到网页
- 用户的浏览器执行了恶意脚本
xss危害
-
网络钓鱼,包括盗取各类用户账号
-
窃取用户Cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作
-
劫持用户浏览器会话,从而执行任意 操作,例如进行非法转账、强制发表日志、发送电子邮件等
-
强制弹出广告页面、恶意刷流量等
-
网站挂马进行恶意操作,例如任意篡改页面信息、非法获取网站信息、删除文件等
-
进行大量的客户端攻击,例如DDOS攻击、传播跨站脚本蠕虫等
-
获取用户端信息 ,例如用户的浏览记录、真实IP地址、开放的端口等
-
结合其他漏洞,例如CSRF漏洞,实施进一步作恶
xss-labs
xss构造
- 基本方式,利用尖括号插入js中
通过
- 利用HTML标签属性值执行XSS
通过javascript:[code]伪协议形式编写恶意脚本
常用:
- 空格回车Tab绕过过滤
注意javas和cript之间的间隔不是由空格键添加的,而是用Tab键添加的。
使用回车分隔:
- 对标签属性值进行转码
替换成:
其中,t的ASCII码值为116,用”t”表示,:则表示:。
再进一步替换:
- 产生事件如click、mouseover、load等
onclick="alert('xss')"
'onfocus=javascript:alert('xss') >
'onmouseover=javascript:alert(1) >
- 利用CSS跨站过滤
- XSS过滤规则
一个正常的XSS输入:
转换大小写后的XSS:
大小写混淆的XSS:
不用双引号,而是使用单引号的XSS:
不适用引号的XSS:
不需要空格的XSS:
构造不同的全角字符:
利用注释符
\和\0–
CSS关键字转码
- 利用字符编码
原始语句:
unicode编码
十进制
base64
十六进制
- 利用字符编码eval()函数、eval()和string.fromCharCode()函数过滤
xss防御
xs通常是插入到各种标签中,或者标签的属性中,css等,可以根据插入位置进行防御。
- 输入过滤
输入验证就是对用户提交的信息进行有效验证,仅接受指定长度范围内的,采用适当的内容提交,阻止或者忽略除此外的其他任何数据。如下代码,检查用户输入的电话号码是否真确。
-
输出编码
对输入的用户信息进行编码,可以确保浏览器安全处理可能存在恶意字符,将其当做HTMl文档的内容而非结构加以处理。
-
标签黑白名单过滤
直接对输入的信息进行黑白名单过滤,简单粗暴。
-
代码实体转义
对尖括号,大括号之类的进行转义,输出以后就作为一个字符,无法执行标签。
-
httponly
通俗的讲,httponly就是在cookie中设置了个属性,通过js代码无法读取到cookie信息,有效防止xss
xss与scrf区别