XSS小结

XSS是什么?

XSS全称跨站脚本(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。跨站点脚本(XSS)攻击是一种注射型攻击,攻击者在可信的网页中嵌入恶意代码,用户访问可信网页时触发XSS而被攻击。

XSS会造成那些危害?

攻击者通过Web应用程序发送恶意代码,一般以浏览器脚本的形式发送给不同的终端用户。当一个Web程序的用户输入点没有进行校验和编码,将很容易的导致XSS。

  • 网络钓鱼,包括获取各类用户账号;
  • 窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;
  • 劫持用户(浏览器)会话,从而执行任意操作,例如非法转账、强制发表日志、电子邮件等;
  • 强制弹出广告页面、刷流量等;
  • 网页挂马;
  • 进行恶意操作,如任意篡改页面信息、删除文章等;
  • 进行大量的客户端攻击,如ddos等;
  • 获取客户端信息,如用户的浏览历史、真实ip、开放端口等;
  • 控制受害者机器向其他网站发起攻击;
  • 结合其他漏洞,如csrf,实施进一步危害;
  • 提升用户权限,包括进一步渗透网站;
  • 传播跨站脚本蠕虫等

XSS是如何产生的

通过在用户端注入恶意的可执行脚本,若服务器对用户的输入不进行处理或处理不严,则浏览器就会直接执行用户注入的脚本。

XSS常见出现漏洞的地方

  1. 数据交互的地方
    • get、post、cookies、headers
    • 反馈与浏览
    • 富文本编辑器
    • 各类标签插入和自定义
  2. 数据输出的地方
    • 用户资料
    • 关键词、标签、说明
    • 文件上传

XSS的分类

  • 反射性XSS
  • 存储型XSS
  • DOM型XSS

反射性XSS

又称非持久型XSS,这种攻击方式往往具有一次性,只在用户单击时触发。

常见注入点

网站的搜索栏、用户登录入口、输入表单等地方,常用来窃取客户端cookies或钓鱼欺骗。

攻击方式

攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接受该目标用户的请求并进行处理,然后服务器把带有XSS的代码发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。

存储型XSS

又称持久型XSS,比反射型XSS更具有威胁性,并且可能影响到Web服务器自身的安全。攻击脚本将被永久的存放在目标服务器的数据库或文件中。

常见注入点

论坛、博客、留言板、网站的留言、评论、日志等交互处。

攻击方式

攻击者在发帖或留言的过程中,将恶意脚本连同正常信息一起注入到发布内容中。随着发布内容被服务器存储下来,恶意脚本也将永久的存放到服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本就会在用户的浏览器中得到执行。

DOM型XSS

DOM(Document object model),使用DOM能够使程序和脚本能够动态访问和更新文档的内容、结构和样式。

DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象的一种漏洞。DOM型XSS是基于js上的。不需要与服务器进行交互。

注入点

通过js脚本对对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本程序可以DOM动态修改页面的内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器d端交互,它只发生在客户端处理数据的阶段。

攻击方式

用户请求一个经过专门设计的URL,它由攻击者提供,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本,当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。

常见标签

标签

利用方式1


<IMG SRC=javascript:alert(String.formCharCode(88,83,83))>

<img STYLE="background-image:url(javascript:alert('XSS'))">	

XSS利用方式2

<img src="x" onerror=alert(1)>

XSS利用方式3

 

标签

标准格式

<a href="https://www.baidu.com">baidua>

XSS利用方式1

<a href="javascript:alert('xss')">aaa>
aaa>
<a href="javascript:aaa" onmouseover="alert(/xss/)">aaa>

XSS利用方式2

<script>alert('xss')script>
aaa>

利用方式3

aaa>

利用方式4

aaa>

input标签

标准格式

<input name="name" value="">

利用方式1


利用方式2


利用方式4

<input name="name" value=""><script>alert('xss')script>

标签

XSS利用方式1



XSS利用方式2




XSS利用方式3


<form method=post action="data:text/html;base64,">

<form method=post action="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">