# Web 专题一 : 用户侧攻击 CSRF / CSS Injection / XSS / Dom Clobbering
@ yelan
# Part.0 什么是"用户侧攻击"? 站在"黑客"的视角...
## 对于一个目标服务器
- 它通常会开启一些服务 + HTTP(HTTPS) 服务: 运行 Web 应用 + FTP 服务: 传输文件 + SSH 服务: 远程登录 + 数据库服务: 存储数据 + ...... - CTF 中的 Web 题目通常是针对 HTTP 服务的攻击 + 也就是针对 Web 应用的攻击
- 对于其他服务 + 可能在 Misc 题目中体现 + 可能在实战环境中体现 ## Server-Client 架构 对 Web 应用的攻击过程,一般可以分为两个思路:
- 服务侧(后端) + 攻击服务器或应用本身 + 目的是使服务故障,获取敏感信息,提升权限甚至拿到 Shell + 手段有 SQL 注入,文件上传等 - 用户侧(前端) + 攻击同样使用这个应用的**其他用户** + 目的是获取其他用户的敏感信息,或诱导其他用户执行恶意操作 + 手段有 CSRF, XSS 等 ## 用户侧攻击 - 我们要假设存在一个"受害者" + 在 CTF 题目中往往以 bot(自动脚本) 的形式出现 + 它会使用这个 Web 应用并执行一些操作 + 最终目的是让它执行一段我们精心构造的恶意代码 - 💀 作为用户,我们每个人都可能是"受害者"... + 钓鱼网站 + yelan\\u202E~喵\\u202D + [QQ探针技术](https://github.com/Y5neKO/qq_xml_ip)
+ [打开微信自动下载原神](https://mp.weixin.qq.com/s?__biz=Mzk3NTQwMDY1NA==&mid=2247485359&idx=1&sn=a3dc73eebed17bd60b89a2e1d766b442&poc_token=HL5NZ2ijIcTVAh5jv6L7Bw4qZBN-FV74W3wj8SpM) + 或许更多?
# 让我们继续...... CSRF / CSS Injection / XSS / Dom Clobbering
# Part.1 CSRF
## 什么是 Cookie - 简单来说,Cookie 是浏览器储存的一些数据,用于标识用户身份 - 客户端在与服务器交互时 + 客户端可以携带 Cookie + 服务器可以根据 Cookie 来验证用户身份,也可以在响应中给客户端设置 Cookie - 例如,用户进行登录,登录成功之后,服务器的响应中带有响应头`Set-Cookie`,浏览器会将这个 Cookie 储存起来,并在之后的请求中顺带发送这个 Cookie,如果服务器验证通过,则认为用户已经登录,不需要再次进行登录验证 - [Cookie Editor](https://chromewebstore.google.com/detail/cookie-editor/ookdjilphngeeeghgngjabigmpepanpl) - ❓ 怎样的 Cookie 设计是不安全的 ## 想象这样一个情景 - 受害者已经登录过某个商店应用,并持有 Cookie - 我们诱导受害者访问我们的页面,其中含有一个恶意链接指向商店的购买链接 - 我们诱导受害者点击这个链接,受害者的浏览器会向这个商店发送购买请求 - 由于受害者持有 Cookie,商店会认为受害者已经登录,并完成购买
## CSRF 的防御 - Referer 检查 - 服务器检查请求的 Referer 字段,如果不是来自合法的页面,则拒绝请求 - 虽然 Referer 可以被伪造,但是对于受害者来说,他既然是被误导点击了恶意链接,那么一般不会手动去修改自己请求的 Referer 字段 - Token - 服务器在 Cookie 中设定一个额外的字段 CSRFToken - 服务器在购买页面中嵌入这个 Token 值,要求用户在购买时把这个 Token 值一起提交到服务器 - 只有用户提交的 Token 值与服务器储存的 Token 值一致时,服务器才会认为用户是合法的 - 这样一来,即使攻击者诱导受害者点击了恶意链接,也无法知道正确的 Token 值,从而无法完成购买 - 通过 CSRF 的例子,我们初步体会到了用户侧攻击的思想,以及绕过防御的思想
# 有没有可能盗取 Token? # 有没有可能盗取 Cookie?
# Part.2 CSS Injection
## 什么是 HTML - **HTML文档就像一棵树** ```HTML
Title
This is a tag node.
This is also a tag node.
``` ## 什么是 CSS - CSS 是一种样式表语言,用于描述 HTML 文档的外观和格式 - 浏览器向服务器发送请求,服务器返回 HTML 文档,浏览器解析 HTML 文档并渲染页面 - 其中 ` ``` - 运用到了布尔盲注的思想 - CSS Injection 的攻击性依赖于 CSS 的功能,而 CSS 的功能是有限的 - CSS Injection 要求我们能够控制受害者收到的 HTML 文档中的 CSS 样式,但这是很难的
# Part.3 XSS
## 什么是 XSS - 跨站脚本攻击,基于 HTML 和 JavaScript - 最终目的是让"受害者"执行一段我们精心构造的 JavaScript 代码 - 最小模型: + 服务端: - 接受用户的输入,并储存到自己的数据库中 - 当用户访问某个页面时,从数据库中读取数据并返回给用户 + 客户端: - 攻击者:构造恶意输入,使服务端储存到数据库中 - 受害者:访问页面时,获取到了恶意输入,并执行了恶意代码 - XSS 的危害性取决于 JavaScript 的能力 + Cookie泄露,内网扫描,键盘记录,权限获取 - 在 CTF 题目中,往往只要求我们泄露某些敏感信息 ## 稍等一下... - HTML/JavaScript 复习 + 浏览器向服务器发送请求,服务器返回 HTML 文档,浏览器解析 HTML 文档并渲染页面 + 其中 ` ``` - 攻击方式进一步简化 - 攻击者只需要修改自己的`xss.js`文件就可实现不同种类的攻击 ## XSS 的防御及绕过 - 与 WAF(Web Application Firewall) 的对抗是 WEB 的常态 - 过滤 + 前端过滤: 抓包绕过 + 过滤掉 `