04. XSS漏洞原理
XSS漏洞原理(上)
弹窗是怎么实现的?
案例
攻击利用
什么是XSS?
- XSS(Cross Site Scripting):跨站脚本攻击,为了不和层叠样式表(Cascading Style Sheets)的缩写CSS混合,所以改名为XSS。
- XSS原理:攻击者在网页中嵌入客户端脚本(通常是JavaScript的恶意脚本),当用户使用浏览器加载被嵌入恶意代码的网页时,恶意脚本代码就会在用户的浏览器中执行,造成跨站脚本攻击。
XSS的危害
-
盗取cookie
-
网络钓鱼
-
植马挖矿
-
刷流量
-
劫持后台
-
篡改页面
-
内网扫描
-
制造蠕虫
等
常出现的场景
- 重灾区:评论区、留言区、个人信息、订单信息等
- 针对型:站内信、网页即时通讯、私信、意见反馈
- 存在风险:搜索框、当前目录、图片属性等
XSS的分类
- 反射型XSS
- 存储型XSS
- DOM型XSS(属于特殊的反射型XSS)
反射型XSS
反射型XSS
- 反射型XSS 是非持久性、参数型的跨站脚本,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。
- 出现场景:多出现在搜索框或者输入框。
反射型XSS——利用流程
XSS漏洞原理(下)
反射型XSS(续)
反射型XSS——案例
存储型XSS
存储型XSS
- 恶意代码被保存在目标网站的服务器中,这种攻击具有较强的稳定性和持久性
- 比较常见的场景是,黑客写下一篇含有恶意Javascript代码的博客文章,文章发表后,所有访问该博客的用户,都会在他们的浏览器中执行这段恶意js代码
存储型XSS——代码分析
存储型XSS——利用分析
存储型XSS案例
DOM型XSS
DOM型XSS——什么是DOM?
- DOM,全称Document Object Model(文档对象模型),是W3C推荐的一种独立于平台和语言的标准,定义了访问HTML和XML文档的标准
- Dom即windows对象下内置的document对象
DOM型XSS
- DOM-XSS简单去理解就是输出点在DOM,属于特殊的反射性XSS
常用的DOM方法
方法 | 描述 |
---|---|
getElementById() | 返回带有指定ID的元素 |
getElementsByTagName() | 返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组) |
getElementsByClassName() | 返回包含带有指定类名的所有元素的节点列表 |
appendChild() | 把新的子节点添加到指定节点 |
removeChild() | 删除子节点 |
replaceChild() | 替换子节点 |
insertBefore() | 在指定的子节点前面插入新的子节点 |
createAttribute() | 创建属性节点 |
createElement() | 创建元素节点 |
createTextNode() | 创建文本节点 |
getAttribute() | 返回指定的属性值 |
setAttribute() | 把指定属性设置或修改为指定的值 |
DOM型XSS——代码分析
DOM型XSS——利用
三种类型的比较
XSS类型 | 存储型 | 反射型 | DOM型 |
---|---|---|---|
触发过程 | 1、黑客构造XSS脚本 2、正常用户访问携带XSS脚本的页面 | 正常用户访问携带XSS脚本的URL | 正常用户访问携带XSS脚本的URL |
数据存储 | 服务器 | URL | URL |
谁来输出 | 后端Web应用程序 | 后端Web应用程序 | 前端Javascript |
输出位置 | HTTP响应中 | HTTP响应中 | 动态构造的DOM节点中 |
是否持久 | 是 | 否 | 否 |
防御方式
防御方式
-
对用户的输入进行合理验证
对特殊字符(如<、>、’、”等)以及