XSS 漏洞

漏洞原理

  • XSS(Cross Site Scripting):跨站脚本攻击,为了不和层叠样式表(Cascading StyleSheets)的缩写CSS混合,所以改名为XSS

  • XSS原理:攻击者在网页中嵌入客户端脚本(通常是JavaScript的恶意脚本),当用户使用浏览器加载被嵌入恶意代码的网页时,恶意脚本代码就会在用户的浏览器执行,造成跨站脚本的攻击

常见场景

  • 重灾区:评论区、留言区、个人信息、订单信息等

  • 针对型:站内信、网页即时通讯、私信、意见反馈

  • 存在风险:搜索框、当前目录、图片属性等

发现和利用

漏洞危害

防御方式

  • 对用户的输入进行合理验证,对特殊字符(如 < > ' " 等)以及 <script> javascript 等字符进行过滤

  • 根据数据位置设置恰当的输出编码,将数据置于 HTML 上下文中的不同位置(HTML 标签、HTML 属性、JavaScript 脚本、CSS、URL),对所有不可信数据进行恰当的输出编码

  • 设置 HttpOnly 属性避免攻击者利用 XSS 漏洞进行 Cookie 劫持攻击

3种XSS类型

XSS类型
存储型
反射型
DOM型

触发过程

1、黑客构造XSS脚本 2、正常用户访问携带XSS脚本的网页

正常用户访问携带XSS脚本的URL

正常用户访问携带XSS脚本的URL

数据存储

服务器

URL

URL

谁来输出

后端Web应用程序

后端Web应用程序

前端JavaScript

输入位置

HTTP响应中

HTTP响应中

用F12查看,不会出现在源代码中

是否持久

反射型XSS

• 反射型XSS 是非持久性、参数型的跨站脚本,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。 • 出现场景:多出现在搜索框或者输入框。

漏洞服务器

vul-page-reflected.php

模拟演示-GET型

攻击者服务器

/xss/cookie-get.php

/xss/hook-get.js

钓鱼页面

xss-get.html

模拟演示-POST型

攻击者服务器

/xss/cookie-post.php

/xss/hook-post.js

钓鱼页面

xss-post.html

存储型XSS

  • 恶意代码被保存到目标网站的服务器中,这种攻击具有较强的稳定性和持久性

  • 比较常见的场景是,黑客写下一篇包含有恶意JavaScript代码的博客文章,文章发表后,所有访问该博客的用户,都会在他们的浏览器中执行这段恶意js代码

漏洞服务器

vul-page-stored.php

DOM型XSS

DOM,全称 Document Object Model,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问和更新文档的内容、结构以及样式

DOM-XSS简单去理解就是输出点在 DOM,属于特殊的 反射型XSS

常用的DOM方法

方法
描述

getElementById()

返回带有指定 ID 的元素。

getElementsByTagName()

返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。

getElementsByClassName()

返回包含带有指定类名的所有元素的节点列表。

appendChild()

把新的子节点添加到指定节点。

removeChild()

删除子节点。

replaceChild()

替换子节点。

insertBefore()

在指定的子节点前面插入新的子节点。

createAttribute()

创建属性节点。

createElement()

创建元素节点。

createTextNode()

创建文本节点。

getAttribute()

返回指定的属性值。

setAttribute()

把指定属性设置或修改为指定的值。

漏洞服务器

vul-page-dom.php

XSS平台

免费邮箱:http://24mail.chacuo.net/

XSSPt平台:https://xss.pt

BeEF工具

  • BeEF 全称 The Browser Exploitation Framework,是一款针对浏览器的渗透测试工具。用 Ruby 语言开发的,用于实现对 XSS 漏洞的攻击和利用。

  • BeEF 主要是往网页中插入一段名为 hook.js 的 JS 脚本代码,如果浏览器访问了有 hook.js(钩子) 的页面,就会被 hook(勾住),勾连的浏览器会执行初始代码返回一些信息,接着目标主机会每隔一段时间(默认为1秒)就会向 BeEF 服务器发送一个请求,询问是否有新的代码需要执行

  • 官网: https://beefproject.com

  • wiki: https://github.com/beefproject/beef/wiki

BeEF平台功能介绍

  • 信息搜集: 可以实现网络发现、主机信息获取、cookie获取、会话劫持、获取键盘记录、获取插件信息等功能

  • 持久化控制:可以实现确认弹框,⼩窗⼝和中间⼈攻击。

  • 社会⼯程学攻击:可以实现点击劫持、弹窗告警、虚假⻚⾯和钓⻥⻚⾯等攻击

  • 渗透攻击:可以实现内⽹渗透、CSRF跨站请求伪造攻击、DDOS攻击,还可以结合Metasploit使⽤

安装BeFF

  • 安装:apt-get install beef-xss

  • 启动:beef-xss(首次启动时需要输入新的密码)

  • 管理界面: http://127.0.0.1:3000/ui/panel

  • 配置文件:/usr/share/beef-xss/config.yaml

XSS变形

常见构造payload标签

script、img、video、audio、svg、body、select、testarea、iframe 等

常见构造payload函数

onclick 当鼠标点击触发 onmousemove 当鼠标移动就触发 onload 当页面加载完成后触发 onerror 当出错时触发

常用payload

更多参考:https://github.com/payloadbox/xss-payload-list/blob/master/Intruder/xss-payload-list.txt

在线靶场

Last updated