21、XSS--跨站脚本攻击

XSS概述

​ Cross Site Scripting – 跨站脚本攻击,为了和CSS层叠样式表区分,故称跨站脚本攻击为XSS

​ 跨站脚本攻击是指攻击者往Web页面里插入恶意Script代码,当用户浏览该页面之时,嵌入Web页面中的Script代码就会被执行,从而达到恶意攻击用户的目的

本质

​ 用户输入的数据被当作代码代码执行

形成原因

​ 主要原因是页面对输入和输出的控制不够严格,导致“精心构造的脚本代码”输入后,被浏览器当作有效代码解析执行从而产生危害

危害

  • 盗取用户Cookie
  • 钓鱼攻击
  • 键盘记录
  • 截取网页屏幕
  • 获取内网ip
  • 获取浏览器保存的明文密码

注意:静态站点则完全不受其影响

攻击流程

  • 攻击者在 存在XSS漏洞的站点中,插入脚本代码
  • 用户访问该站点后,会触发攻击者插入的脚本代码,返回带有“恶意JS”的页面
  • 脚本代码执行,将用户的cookie数据,发送给攻击者
  • 攻击者利用cookie,伪造用户登录,造成破坏

常见类型

  • 反射型

    ​ 交互的数据一般不会被存放在数据库里面,一次性。一般出现在查询类页面等

  • 存储型

    ​ 交互的数据会被存在数据库中,一般出现在留言板、注册等页面

  • DOM型

    ​ 不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题

  • 危害程度:存储型 > 反射型 > DOM型

测试流程

  1. 在目标站点上找到输入点,如查询接口,留言板等
  2. 输入一组 “特殊字符+唯一识别字符”,点击提交后,查看返回的源码,是否有做对应的处理
  3. 通过搜索定位到唯一识别字符,结合唯一识别字符前后语法,确认是否可以构造执行JS的条件(闭合)
  4. 提交构造的脚本代码(各种姿势),看是否可以执行成功

注意:

  • 一般查询接口容易出现反射型XSS,留言板容易出现存储型XSS
  • 由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效,或者环境限制了执行(浏览器)
  • 通过变化不同的script,尝试绕过后台过滤机制

JavaScript基础

注释符

  • 单行注释 //
  • 多行注释 /**/

前端代码触发JavaScript脚本

1、直接使用script标签 <script>alert(222)</script>

2、伪协议: <a href=javascript:alert(2) />1</a>

3、事件型

​ HTML事件:HTML 事件可以是浏览器或用户做的某些事情,当在 HTML 页面中使用 JavaScript 时, JavaScript 可以触发这些事件

常见的HTML事件:

事件描述
onchangeHTML元素改变
onclick用户点击HTML元素
onmouseover用户从一个html元素上移动鼠标
onmouseout用户从一个HTML元素上移开鼠标
onkeydown用户按下键盘按键
onload浏览器已完成页面的加载
onfocus元素获得焦点
onerror当加载文档或图像时发送某个错误
oninput当用户输入时

等等事件

https://www.w3school.com.cn/js/jsref_events.asp

反射型XSS

​ 一次性,插入的脚本代码不会存储在数据库

当用户 点击攻击者构造好的URL时,就会中招

出现场合

​ 一般出现在查询框

存储型XSS

​ 与反射型XSS最大的不同就是攻击者输入的恶意脚本代码会存储到数据库中

只要脚本代码在数据库中,用户浏览页面就会中招

出现场合

​ 一般出现在留言板、注册等与数据库交互的地方

​ “看见框就X”

DOM型XSS

​ 通过JavaScript,可以重构整个HTML文档,可以添加、移除、改变或重排页面上的项目

要改变页面的某个东西,JavaScript就需要获得对HTML文档中的所有元素进行访问的入口。这个入口,连同对HTML元素进行添加、移动、改变或移除的方法和属性,都是通过文档对象模型来获得的(DOM)

故DOM可以理解为一个一个访问HTML的编制编程接口

注意:DOM型XSS 不与数据库进行交互

HTML DOM 是关于如何获取、修改、添加或删除 HTML 元素的标准。

常见DOM方法与属性

方法:

  • getElementById(id) — 获取带有指定id的节点元素

  • document.lastModified—获取当前页面最后的修改时间(判断是否是伪静态页面)

  • document.cookie—获取当前页面的cookie

  • Document.write—向页面写入文本

  • 注意:document.write接受native编码

    native编码地址:
    http://tool.oschina.net/encode?type=3

属性:

  • innerHTML—节点的文本值
  • parent—节点的父节点
  • childNodes—节点的子节点
  • attribute—节点的属性节点

XSS盲打

​ 有与前端数据交互的地方,比如:建议框

相当于只有后台才能看到前端输入的内容,从前端无法判断是否存在XSS时,就可以采用盲打的形式

盲打:不管3721,往里面插JS代码,然后等待,可能会有惊喜

由于是后端,可能安全考虑不太严格,当管理员登录时,就会被被X

XSS绕过

  • 前端限制绕过:直接抓包重放,或者修改HTML前端代码
  • 大小写绕过:如 <ScRipT>AlERt(3)</ScrIPt>
  • 拼凑绕过: 如 <scri<script>pt>alert(4)</scr</script>ipt>
  • 使用注释进行干扰绕过: <scr ipt>alert(5)</sc ript>

编码

​ 核心思路:后台过滤了特殊字符,比如:<script>标签,但该标签可以被各种编码,后台不一定会过滤

当浏览器对该编码进行识别时,会翻译成正常的标签,从而执行

常见的编码:URL编码 HTML编码

注意:使用编码时,需要注意编码在输出点是否会被正常识别和翻译

htmlspecialchars()函数

htmlspecialchars()函数把预定义的字符转换为HTML实体

预定义的字符是:

&(和号)   ---->&amp
"    ---->&quot
'   ---->&#039
<   ---->&lt
>   ---->&gt

用法:

$ok = htmlspecialchars($_GET['message'])

可用的引号类型

ENT-COMPAT--默认,仅编码双引号
ENT-QUOTES--编码双引号和单引号
ENT-NOQUOTES--不编码任何引号

XSS常见防范措施

总的原则:输入做过滤,输出做转义

  • 过滤:根据业务需求进行过滤
  • 转义:所有输出到前端的数据都要根据输出点做转义

a标签href做防范措施

​ a标签一般都是用来写一个超链接

防范:只允许用户输入http或hppts开头的协议,其次在进行htmlspecialchars()处理

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,攻击者利用这个漏洞向网站中注入恶意代码,并在用户浏览器上执行。这种攻击通常发生在存在输入输出的网页应用程序中。 XSS攻击主要分为三种类: 1. 存储XSS:攻击者将恶意代码存储在目标网站的数据库中,当其他用户访问该网站时,恶意代码被返回并在用户浏览器中执行。 2. 反射XSS:攻击者构造一个包含恶意代码的URL,并将其发送给目标用户。用户点击链接后,恶意代码从URL中获取并在用户浏览器上执行。 3. DOM-based XSS:攻击者通过修改网页的DOM结构来执行恶意代码,不需要向服务器发送请求。这种类XSS攻击主要基于客户端脚本和DOM文档对象模。 为了防止XSS攻击,开发人员可以采取以下几种措施: 1. 输入验证和过滤:对用户输入的数据进行验证和过滤,确保不允许包含恶意代码。 2. 输出编码:在将数据输出到网页上时,使用适当的编码方式(如HTML实体编码或JavaScript转义)来防止恶意代码的执行。 3. 使用安全的API:避免使用不安全的API,特别是将用户输入作为参数的API。例如,使用textContent替代innerHTML可以防止XSS攻击。 4. 设置HTTP头部:通过设置X-XSS-Protection和Content-Security-Policy头部,可以进一步加强网站的安全性。 请注意,这只是一些常见的防御措施,具体的应对措施还需要根据实际情况和开发框架来确定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值