xss4之cookie操作
一、登录网站情况分析
1. 登录状态与Cookie的关系
- 已登录状态: 当用户登录网站后,如admin123456,网站会通过某种方式(如Cookie)在客户端保存用户的登录状态。
- Cookie的作用: Cookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。在这里,Cookie用于标记用户的登录状态,使服务器能够识别出已登录的用户。
- Session ID: 在已登录状态下,服务器会为用户分配一个唯一的Session ID,并通过Cookie将其发送到客户端。这个Session ID在客户端和服务器之间用于标识用户的会话。
- 服务端标记: 服务端会根据这个Session ID来标记用户的登录状态,从而在用户后续请求时能够识别并处理其已登录的身份。
2. 总结
- 登录状态的实现: 通过Cookie保存Session ID,服务端根据Session ID来识别用户的登录状态。
- Cookie的重要性: Cookie是实现用户登录状态保持的关键技术之一,它使得无状态的HTTP协议能够支持有状态的会话。
二、JavaScript操作Cookie
1. Cookie的浏览器隔离性
- 隔离性: Cookie具有浏览器隔离性,即不同浏览器各自管理自己的Cookie。
- 实例说明: 在火狐浏览器未登录状态下,即使已在其他浏览器登录,火狐浏览器仍显示未登录。
2. 修改SessionID实现登录状态转移
- 操作过程: 通过修改火狐浏览器的SessionID,使其与谷歌浏览器的SessionID一致。
- 结果验证: 修改后刷新页面,火狐浏览器成功显示已登录状态,并显示出用户名。
3. 对代码安全性的质疑与解答
- 质疑: 有学生质疑是否因为代码写得太简单(low)才导致上述结果。
- 解答: 老师明确指出,不是因为代码简单,而是Cookie机制本身的特点导致的结果。
- 操作详情: 通过Cookie Editor修改_utmc等Cookie值,实现跨浏览器登录状态转移。
- 结果展示: 修改SessionID后,火狐浏览器成功登录并显示用户名。
三、浏览器登录情况展示
1. 谷歌浏览器登录情况
- Cookie内容展示: 在谷歌浏览器中,可以看到如“douban.com”的Cookie信息,包括name、value、domain、path等详细字段。
- Cookie编辑功能: 提到了Cookie Editor,表明在谷歌浏览器中可以对Cookie进行编辑操作。
- 安全性相关: 注意到Cookie中有“httpOnly”和“secure”等字段,这与Cookie的安全性设置有关。
2. 火狐浏览器登录情况
- 浏览器类型: 展示了火狐浏览器的界面,说明课程中也涉及到了火狐浏览器的使用。
- Cookie查看: 在火狐浏览器中同样可以查看Cookie信息,但具体界面和操作可能与谷歌浏览器有所不同。
- 重点强调: 老师通过“我们一定要看清楚了啊”这句话,强调了观察浏览器界面和Cookie信息的重要性。
3. 浏览器Cookie的共通性
- 共通性说明: 虽然展示了谷歌和火狐两种浏览器,但Cookie的基本概念和操作方法在大多数浏览器中都是类似的。
- 操作提示: 无论使用哪种浏览器,用户都可以通过相应的工具查看和编辑Cookie信息。
4. 注意事项
- 安全性考虑: 在处理Cookie时,需要注意其安全性,避免泄露敏感信息或遭受恶意攻击。
- 浏览器差异: 不同浏览器的Cookie管理界面和操作可能有所不同,需要根据实际使用的浏览器进行相应操作。
四、火狐浏览器登录情况
1. 谷歌浏览器与火狐浏览器的登录状态对比
- 谷歌浏览器状态: 已提前登录豆瓣网站,账号名为“一台电脑”。
- 火狐浏览器状态: 打开豆瓣网站后显示为未登录状态,因为两个浏览器的cookie值不同。
2. 获取并修改豆瓣的cookie值
- 问题: 火狐浏览器豆瓣显示为未登录,需要获取并修改豆瓣的cookie值。
- cookie数量: 豆瓣网站在浏览器中有17个cookie条目,需要修改这些值以实现登录状态。
- 解决方法: 寻找更方便的方法,而非手动修改每一个cookie值。
五、cookie编辑器插件的使用
1. 安装cookie编辑器插件
- 下载与解压: 由于国内无法直接连接谷歌应用市场,需下载cookie editor的crx扩展文件,并将其后缀名改为.zip后解压。
- 安装步骤:
- 打开谷歌浏览器的扩展程序管理页面(chrome://extensions/)。
- 开启开发者模式。
- 选择“加载已解压的扩展程序”,找到并加载解压后的文件夹。
2. 使用cookie编辑器导出cookie
- 导出操作: 在cookie editor插件中,点击导出(export)按钮,可以一次性导出所有cookie。
- 导出格式: 导出的cookie数据为json格式,这是目前常用的一种数据交换格式。
3. cookie的基本操作
- 获取cookie: 使用JavaScript语法 document.cookie 获取当前页面的cookie。
- 设置cookie: 通过 document.cookie = "username=wuya" 设置新的cookie。
- 修改与删除:
- 修改cookie实际上是通过设置同名的新cookie来覆盖旧cookie。
- 删除cookie则是通过设置同名cookie,并将其过期时间设为过去的时间来实现。
4. 导入cookie到火狐浏览器
- 导入需求: 若需要将导出的cookie数据导入到火狐浏览器,需使用相应的cookie管理工具或插件。
- 导入步骤:
- 在火狐浏览器中找到或安装支持导入json格式cookie的插件(如Cookie-Editor)。
- 使用该插件的导入功能,选择之前导出的json文件进行导入。
六、火狐浏览器插件的使用
1. 安装Cookie Editor插件
- 步骤: 在火狐浏览器的扩展和主题页面,搜索“cookie editor”并安装。
- 注意: 确保安装的是正确版本的Cookie Editor插件,通常会有一个特定的图标或名称来标识。
2. 使用Cookie Editor插件
- 获取Cookie: 在网页上,可以通过JavaScript语法$document.cookie;来获取当前的Cookie。
- 设置Cookie: 通过$document.cookie = "username=wuya";这样的语法来设置新的Cookie。
- 操作示例: 在豆瓣网站上,使用Cookie Editor插件导入新的Cookie值,尝试覆盖原有的Cookie,以验证是否能够直接登录。
- 结果验证: 通过刷新网页,观察是否成功登录,来验证Cookie的修改是否有效。在此示例中,成功登录表明Cookie修改成功。
3. 注意事项
- 安全性: 在实际操作中,要注意Cookie的安全性,避免泄露或滥用他人的Cookie信息。
- 合法性: 获取和使用他人的Cookie必须遵守相关法律法规,不得用于非法目的。
- 插件来源: 确保从官方或可信赖的来源下载和安装插件,以避免安全风险。
七、Cookie的安全问题
1. Cookie的作用与风险
- Cookie作用: 用于在客户端存储用户信息,如登录状态,实现会话管理。
- 风险示例: 如果攻击者获取了他人的Cookie,就可以直接以该用户的身份登录网站,进行非法操作,如转移比特币。
2. 获取Cookie的方法
1)低级方法
- 物理接触: 趁用户不在时,直接访问其电脑获取Cookie。
- 评价: 这种方法低级且受限,被称为“物理黑客”。
2)高级方法
- 远程获取: 通过攻击手段,使用户的电脑主动发送Cookie到攻击者的服务器。
- 技术手段: 需要学习JavaScript等编程技术,利用浏览器的document对象操作Cookie。
3. JavaScript操作Cookie
- 浏览器封装: 浏览器封装了document对象,该对象有一个cookie属性,可以直接用于增删改查Cookie。
- 操作简便: 通过JavaScript,可以轻松实现Cookie的远程获取,为攻击提供便利。
八、JavaScript操作Cookie
1. 获取Cookie
- 方法: 使用document.cookie可以获取当前页面的所有cookie。
- 示例: 在控制台输入document.cookie,即可查看当前页面的所有cookie值。
2. 设置Cookie
- 方法: 通过给document.cookie赋值来设置cookie,格式为key=value。
- 示例: document.cookie = "username=wuya",这样就设置了一个名为username,值为wuya的cookie。
3. 修改Cookie
- 方法: JavaScript没有直接修改cookie的方法,修改cookie实际上是通过覆盖原有cookie来实现的。需要创建一个与原有cookie同名的新cookie,并设置相同的属性(如路径、域等),然后改变其值。
- 注意: 如果只改变值而属性不同,则会创建两个不同的cookie。
4. 删除Cookie
- 方法: 将cookie的过期时间设置为一个早于当前时间的时间点,即可删除cookie。通常设置为过去的一个时间点,如1970年1月1日。
- 示例: document.cookie = "name=wuya;expires=Thu, 01 Jan 1970 00:00:00 GMT",这样就删除了名为name的cookie。
5. 应用案例
- 案例: 通过JavaScript操作cookie,可以实现登录状态的保持与清除、用户偏好设置等功能。
- 示例代码:
- 操作: 通过点击按钮,可以创建和删除cookie,并通过alert(document.cookie)查看当前页面的cookie。
九、JavaScript代码注入与Cookie
1. 代码注入的概念
- 代码注入: 将写好的一段代码注入到别人的网页中,使其在该网页上运行。
- 目的: 获取目标网站的Cookie等信息。
2. 代码注入的前提
- 依托有Cookie的网站: 代码必须在目标网站上运行,才能获取该网站的Cookie。
- 示例: 在豆瓣网页上运行代码才能拿到豆瓣的Cookie,在百度网页上运行代码才能拿到百度的Cookie。
3. Cookie的跨域名限制
- 不能跨域名使用: Cookie是浏览器的一个绝对规范,不能跨域名使用。
- 示例: 打开百度时,浏览器只会查找百度的Cookie,不会查找豆瓣的Cookie。
4. 码注入与SQL注入的类比
- 类似SQL注入: 代码注入与SQL注入有相似之处,都是将构造的语法发送到服务器,然后服务器回响查询的数据。
- 不同点: SQL注入是针对数据库的,而代码注入是针对网页的JavaScript脚本。
- 目的: 将JavaScript脚本注入到网页中并使其运行,以获取Cookie等信息。
十、知识小结
知识点 | 核心内容 | 考试重点/易混淆点 | 难度系数 |
Cookie操作基础 | 用JavaScript去操作cookie | - 如何获取cookie <br> - 如何写入cookie <br> - 如何删除cookie | ⭐⭐ |
Cookie与登录状态 | 服务端通过cookie判断用户登录状态 | - Cookie不能跨浏览器使用 <br> - Cookie不能跨域名使用 | ⭐⭐⭐ |
Cookie篡改实验 | 通过修改cookie值实现已登录状态 | - 实验步骤:登录网站、获取cookie、在另一浏览器修改cookie值、刷新页面 | ⭐⭐⭐⭐ |
Cookie编辑器使用 | 使用cookie editor插件导出导入cookie | - 插件安装方法 <br> - 导出cookie为json格式 <br> - 在另一浏览器导入cookie | ⭐⭐⭐⭐ |
Cookie安全风险 | 通过远程获取用户cookie进行账户操作 | - 远程获取cookie的方法 <br> - Cookie的安全隐患 <br> - 如何防范cookie被篡改或盗用 | ⭐⭐⭐⭐⭐ |
JavaScript操作Cookie | document对象的cookie属性进行增删改查 | - 读取cookie:document.cookie <br> - 写入cookie:document.cookie = "key=value" <br> - 删除cookie:设置过期时间为过去时间 | ⭐⭐ |
跨站脚本攻击(XSS) | 将恶意JavaScript脚本注入到网页中 | - XSS攻击原理 <br> - 如何防范XSS攻击 <br> - XSS与SQL注入的异同点 | ⭐⭐⭐⭐⭐ |