# 漏洞加固报告

## 1. 漏洞点名称
文件上传功能的安全漏洞
该漏洞属于**文件上传类型漏洞**,可能导致攻击者上传恶意文件。关键特征包括:
- 缺乏对上传文件的严格校验(文件类型校验逻辑存在缺陷)。
- 未对服务器端文件路径和文件类型进行有效验证,可能被绕过。

---

## 2. 漏洞代码

### 前端代码
function checkFile() {
    var file = document.getElementsByName('upload file')[0].value;
    if (file == null || file == "") {
        alert("请选择要上传的文件!");
        return false;
    }
    // 定义允许上传的文件类型
    var allow_ext = ".jpgl. pngl .gif";
    // 提取上传文件的类型
    var ext_name = file.substring(file.lastIndexOf("."));
    // 判断上传文件类型是否允许上传
    if (allow_ext.indexof(ext_name) == -1) {
        var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name;
        alert(errMsg);
        return false;
    }
}


### 后端代码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = UPLOAD_PATH . '/' . $_FILES['upload_file']['name'];
        if (move_uploaded_file($temp_file, $img_path)) {
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}


---

## 3. 漏洞产生的危害
1. **文件类型校验缺陷**:
- 前端的文件校验机制仅通过字符串匹配检查文件扩展名,极易被篡改或绕过。
- 后端未对文件类型进行进一步验证,允许上传非图片类型的文件,如恶意脚本文件(`.php`、`.jsp` 等)。

2. **潜在风险**:
- 攻击者可能上传恶意脚本,通过访问恶意脚本获取对服务器的控制权。
- 可能泄露敏感信息或导致数据被篡改,甚至让服务器沦为攻击平台。

3. **业务影响**:
- 数据完整性和机密性受损。
- 攻击者可能实施勒索攻击,导致严重经济损失。

---

## 4. 漏洞产生的原因以及修复思路

### 漏洞产生的原因
1. **客户端校验缺陷**:客户端文件类型校验缺乏可靠性,容易被篡改。
2. **后端安全措施不足**:未严格验证上传文件的 MIME 类型、扩展名及文件内容一致性。

### 修复思路
1. **后端严格校验**:
- 使用 mime_content_type() 或类似函数验证文件真实的 MIME 类型。
- 限制允许的文件扩展名。
- 对文件内容进行校验,防止伪装攻击。

2. **前端增强校验**:
- 使用更加健壮的文件校验逻辑,但前端校验仅作为用户体验的辅助措施,不能替代后端校验。

3. **其他防御措施**:
- 上传目录设置不可执行权限,防止上传的文件被执行。
- 对上传文件进行重命名,防止路径预测攻击。

---

## 5. 漏洞修复后代码截图

### 修复后的前端代码
function checkFile() {
    var file = document.getElementsByName('upload_file')[0].value;
    if (!file) {
        alert("请选择要上传的文件!");
        return false;
    }
    var allow_ext = [".jpg", ".png", ".gif"];
    var ext_name = file.substring(file.lastIndexOf(".")).toLowerCase();
    if (!allow_ext.includes(ext_name)) {
        alert(`该文件不允许上传,请上传以下类型的文件:${allow_ext.join(", ")}`);
        return false;
    }
    return true;
}


### 修复后的后端代码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $file_info = finfo_open(FILEINFO_MIME_TYPE);
        $mime_type = finfo_file($file_info, $temp_file);
        finfo_close($file_info);

        // 允许的 MIME 类型和扩展名
        $allowed_types = ['image/jpeg', 'image/png', 'image/gif'];
        $allowed_ext = ['jpg', 'png', 'gif'];

        $file_ext = pathinfo($_FILES['upload_file']['name'], PATHINFO_EXTENSION);

        if (in_array($mime_type, $allowed_types) && in_array($file_ext, $allowed_ext)) {
            $new_file_name = uniqid() . '.' . $file_ext;
            $img_path = UPLOAD_PATH . '/' . $new_file_name;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
                $msg = '文件上传成功!';
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '文件类型不合法!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}


---

## 关键词
#文件上传漏洞 #安全校验 #MIME类型验证 #恶意文件上传 #安全加固
漏洞加固报告

## 命令注入
### 漏洞点

代码中使用 system() 函数直接执行拼接的命令,用户输入的内容未经任何过滤或验证,因此可能会导致命令注入漏洞。

### 漏洞代码

<?php
$command = 'ping -c 1 '.$_GET['ip'];
system($command); //system函数特性 执行结果会自动打印
?>


### 漏洞产生的危害

- 攻击者可以通过操控 $_GET['ip'] 参数,注入恶意命令,执行系统命令或绕过限制进行信息泄露、文件删除、植入恶意代码等。
- 可能导致服务器被远程控制,数据泄露,甚至完全控制系统。

### 漏洞产生的原因

- 未对用户输入的 $_GET['ip'] 进行有效的验证和过滤,导致恶意输入直接进入 system() 函数执行。
- 过度依赖命令行执行的方式,未使用更安全的替代方法。

### 修复思路

- 最小化修改**:只需对用户输入进行适当的过滤或限制,而无需大规模重写代码。
- **采用更安全的方式**:使用 `escapeshellarg()` 或 `escapeshellcmd()` 函数对用户输入进行处理,防止命令注入。

### 漏洞修复

```php
<?php
$ip = escapeshellarg($_GET['ip']); // 安全处理用户输入
$command = 'ping -c 1 ' . $ip;
system($command); // 执行安全命令
?>
```

**解释**:

- `escapeshellarg()` 会对用户输入的 IP 地址进行转义,避免特殊字符引发的注入攻击。
- 这样就能保证用户输入不被直接当作命令的一部分执行,同时仍保留原功能。

#命令注入 #PHP安全

## 代码注入
### 漏洞点

代码中使用 `eval()` 函数直接执行用户输入的内容,`$_GET['a']` 作为代码片段传递给 `eval()`,如果未经过过滤,攻击者可以注入任意 PHP 代码。

### 漏洞代码

```php
<?php
eval( 'echo ('.$_GET['a'].');');
?>
```

### 漏洞产生的危害

- 攻击者可以通过注入恶意 PHP 代码来执行任意操作,包括但不限于:读取服务器文件、执行系统命令、修改数据库等。
- `eval()` 是 PHP 中非常危险的函数,它会执行传入的 PHP 代码,如果不对用户输入进行严格验证和过滤,可能导致严重的安全问题。

### 漏洞产生的原因

- 使用了 `eval()` 函数执行动态代码,而输入的数据来自用户的 GET 请求(`$_GET['a']`),没有任何过滤或验证。
- `eval()` 函数将用户的输入当作 PHP 代码执行,这使得攻击者能够控制执行内容。

### 修复思路

- **最小化修改**:只需避免使用 `eval()` 或对其输入进行严格的过滤,避免引入复杂的重构。
- **避免使用危险函数**:尽量避免使用 `eval()`,它在安全性方面存在重大隐患。若必须使用,需对输入进行严格限制。

### 漏洞修复

#### 方法一:避免使用 `eval()`,直接处理用户输入

```php
<?php
$input = htmlspecialchars($_GET['a']); // 安全转义用户输入
echo $input;
?>
```

**解释**:

- 使用 `htmlspecialchars()` 函数来转义用户输入,避免将恶意的代码当作 HTML 输出,防止 XSS 等攻击。
- 这样既能保留原有功能,又能避免执行潜在的恶意代码。

#### 方法二:仅允许特定的安全操作

如果必须执行某些运算或操作,可以使用白名单的方式进行限制,而不是直接执行用户输入的代码。

```php
<?php
$allowed_operations = ['operation1', 'operation2']; // 定义允许的操作
if (in_array($_GET['a'], $allowed_operations)) {
// 安全地执行代码
echo $_GET['a'];
} else {
echo 'Invalid operation';
}
?>
```

**解释**:

- 通过白名单限制用户输入的值,避免执行任何不在允许列表中的操作。

#PHP安全 #eval #代码注入

## 文件包含
### 漏洞点

代码中使用 `include()` 函数引入用户提供的文件路径,且文件路径来源于 `$_GET['page']`,没有对输入进行验证或过滤。这可能导致文件包含漏洞,允许攻击者通过控制输入路径来包含恶意文件。

### 漏洞代码

```php
<?php
$file = $_GET['page'];
include("pages/$file");
?>
```

### 漏洞产生的危害

- 攻击者可以利用此漏洞,通过提供恶意的 `$_GET['page']` 值,包含本地系统文件(如 `/etc/passwd`)或外部远程文件(如通过 URL 引入恶意 PHP 脚本)。
- 可能导致信息泄露、远程代码执行、权限提升等严重安全问题。

### 漏洞产生的原因

- 代码直接使用了来自用户输入的值 (`$_GET['page']`) 来构建文件路径,未对输入进行任何验证或过滤。
- `include()` 函数在没有严格限制输入时,允许攻击者通过路径遍历或远程文件包含等方式利用该漏洞。

### 修复思路

- **最小化修改**:只需对用户输入进行严格验证,限制文件路径的范围,不需要大规模重写代码。
- **验证和清理用户输入**:通过白名单限制用户可以包含的文件,避免路径遍历攻击,并防止远程文件包含(RFI)。

### 漏洞修复

#### 方法一:验证文件路径,限制访问的文件

```php
<?php
$allowed_pages = ['home.php', 'about.php', 'contact.php']; // 定义允许的文件
$file = $_GET['page'];
if (in_array($file, $allowed_pages)) {
include("pages/$file");
} else {
echo 'Invalid page request';
}
?>
```

**解释**:

- 使用白名单来限制用户只能包含指定的文件,避免攻击者输入任意文件路径。
- 通过验证文件名,防止路径遍历或包含恶意文件。

#### 方法二:清理用户输入,防止路径遍历

```php
<?php
$file = basename($_GET['page']); // 获取文件名而不是完整路径
$file = preg_replace('/[^a-zA-Z0-9_-]/', '', $file); // 仅允许字母、数字、下划线和短横线
include("pages/$file.php");
?>
```

**解释**:

- `basename()` 函数将用户提供的路径转化为文件名,防止路径遍历(例如 `../../etc/passwd`)。
- 使用 `preg_replace()` 过滤掉不安全的字符,确保文件名符合预期的格式。

### 总结

- **白名单**:限制允许的页面或文件,提高代码的安全性。
- **路径清理**:使用函数如 `basename()` 和正则过滤来清理用户输入,防止路径遍历攻击。

#文件包含 #PHP安全 #路径遍历 #远程文件包含

## SQL注入

### 漏洞点

该代码存在 SQL 注入漏洞,问题在于用户输入 `$_GET['id']` 和 `$_GET['name']` 被直接拼接到 SQL 查询中,未进行任何过滤或参数化处理。

### 漏洞代码

```php
<?php
include('conn.php'); // 数据库连接省略
$sql = "SELECT id, name FROM users WHERE id=$_GET['id'] AND name='$_GET['name']'";
$result = $mysqli->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["name"];
}
} else {
echo "没有查询到结果";
}
?>
```

### 漏洞产生的危害

- **信息泄露**:攻击者通过注入恶意 SQL 代码,可以获取数据库中的敏感信息,如用户数据、管理员权限等。
- **数据篡改**:攻击者可以删除、修改数据库中的数据,导致数据丢失或篡改。
- **系统破坏**:通过 SQL 注入,攻击者可能执行危险命令,导致数据库或应用的完整性受到威胁。
- **完全控制**:在某些情况下,攻击者可能利用 SQL 注入漏洞执行系统命令,从而进一步攻击服务器,甚至获取控制权限。

### 漏洞产生的原因

- 代码直接将用户输入(`$_GET['id']` 和 `$_GET['name']`)拼接到 SQL 查询中,缺乏对输入的过滤和处理。
- 由于没有使用安全的参数化查询或预处理语句,攻击者可以通过操控用户输入来修改查询语句的逻辑,从而注入恶意 SQL 代码
# 简练的渗透测试文件命名规范

为了实现简洁高效的文件命名,可以缩减字段长度,同时保留关键信息,突出目标、步骤和结果,以下是优化后的命名规范:

---

## 1. 命名的基本结构
<目标标识>_<步骤缩写>_<内容描述>_<日期>.<文件格式>

- 目标标识**:用 IP 地址、域名或简短代号表示目标。
- **步骤缩写**:用固定缩写表示操作阶段,如 `RE`(信息收集)、`PE`(提权)、`EX`(漏洞利用)、`LM`(横向移动)、`DC`(解密)。
- **内容描述**:简要说明文件内容,如工具名称、数据类型。
- **日期**:避免冲突和区分时间。

---

## 2. **常见步骤的缩写和命名示例


### 1) 信息收集(Reconnaissance, `RE`)
- 命名结构:

  <目标>_RE_<内容描述>_<日期>.<文件格式>
  

- 示例:
- `192.168.1.1_RE_ports_1121.txt` (端口扫描结果)
- target_RE_subdomains_1121.txt (子域名枚举结果)
- 192.168.1.1_RE_banner_1121.txt (服务探测结果)

---

### 2) 提权(Privilege Escalation, `PE`)
- 命名结构:

  <目标>_PE_<方法或工具>_<日期>.<文件格式>
  

- 示例:
- `192.168.1.1_PE_kernel_1121.log` (内核漏洞提权日志)
- 192.168.1.1_PE_suggester_1121.txt (提权建议工具输出)
- 192.168.1.1_PE_token_1121.dmp (提取的用户 Token)

---

### 3) 漏洞利用(Exploitation, `EX`)
- 命名结构:

  <目标>_EX_<漏洞编号或工具>_<日期>.<文件格式>
  

- 示例:
- `192.168.1.1_EX_cve-2021-1234_1121.log` (CVE 利用日志)
- 192.168.1.1_EX_payload_1121.bin (生成的 Payload 文件)
- target_EX_rce_1121.log (远程代码执行日志)

---

### 4) 横向移动(Lateral Movement, `LM`)
- 命名结构:

  <源IP>_<目标IP>_LM_<方法>_<日期>.<文件格式>
  

- 示例:
- `192.168.1.1_192.168.1.2_LM_passhash_1121.log` (Pass-the-Hash 攻击日志)
- 192.168.1.1_192.168.1.3_LM_rdp_1121.log (RDP 横向移动日志)
- 192.168.1.1_192.168.1.4_LM_smb_1121.txt (SMB 横向移动记录)

---

### 5) 数据提取与解密(Decryption, `DC`)
- 命名结构:

  <目标>_DC_<描述>_<日期>.<文件格式>
  

- 示例:
- `192.168.1.1_DC_hashdump_1121.txt` (密码哈希提取)
- target_DC_creds_1121.txt (解密的凭据)
- 192.168.1.1_DC_ssl_1121.log (SSL 解密流量)

---

### 6) 数据收集(Data Collection, `DT`)
- 命名结构:

  <目标>_DT_<数据描述>_<日期>.<文件格式>
  

- 示例:
- `192.168.1.1_DT_files_1121.zip` (收集的文件)
- target_DT_creds_1121.txt (提取的凭证)
- 192.168.1.1_DT_dbs_1121.sql (数据库导出文件)

---

### 7) 报告生成(Reporting, `RP`)
- 命名结构:

  <目标>_RP_<类型>_<日期>.<文件格式>
  

- 示例:
- `target_RP_summary_1121.pdf` (渗透测试总结报告)
- 192.168.1.1_RP_full_1121.docx (完整测试报告)
- target_RP_incident_1121.xlsx (事件分析报告)

---

## 3. 常用的命名缩写表

| 步骤 | 缩写 | 说明 |
|------------|-------|--------------------|
| 信息收集 | RE | Reconnaissance |
| 提权 | PE | Privilege Escalation |
| 漏洞利用 | EX | Exploitation |
| 横向移动 | LM | Lateral Movement |
| 解密 | DC | Decryption |
| 数据提取 | DT | Data Collection |
| 报告生成 | RP | Reporting |

---

## 4. 简化文件夹分类建议
创建简单的文件夹分类管理:
/project/
├── RE/   # 信息收集
│   └── target_RE_ports_1121.txt
├── PE/   # 提权
│   └── 192.168.1.1_PE_kernel_1121.log
├── EX/   # 漏洞利用
│   └── 192.168.1.1_EX_payload_1121.bin
├── LM/   # 横向移动
│   └── 192.168.1.1_192.168.1.2_LM_passhash_1121.log
├── DC/   # 数据提取与解密
│   └── target_DC_creds_1121.txt
├── RP/   # 报告生成
│   └── target_RP_summary_1121.pdf


---

## 关键词总结
#渗透测试 #文件命名 #简练命名 #提权 #漏洞利用 #横向移动 #解密 #报告生成
### 示例目录结构:
/project/
├── privilege_escalation/
│   └── 192.168.1.1_privesc_kernel_cve-2021-4034_20241121.log
├── password_cracking/
│   ├── target.com_password_hashdump_20241121.txt
│   └── 192.168.1.1_password_john_the_ripper_results_20241121.txt
├── sensitive_data/
│   ├── 192.168.1.1_data_lsass_dump_mimikatz_20241121.dmp
│   └── target.com_data_credentials_cookies_20241121.txt
├── reports/
│   └── target.com_report_full_test_20241121.pdf


---

## 关键词总结
#渗透测试 #文件命名规范 #提权 #密码破解 #解密 #后门植入 #报告生成 #敏感数据
 
 
Back to Top