实操环境描述和准备

环境配置

  • 数据库服务器:安装MySQL数据库系统,用于存储和管理数据。
  • Web服务器:安装Apache HTTP Server并配置PHP环境,用于运行Web应用。
  • 攻击机:用于模拟SQL注入攻击,测试防护措施的有效性。
  • 网络连接:所有计算机需连接到同一局域网,确保相互访问正常。

工具准备

  • MySQL客户端:执行数据库查询和管理操作。
  • mysqldump:用于数据库备份。
  • OpenSSL:实现数据加密。
  • SQLmap:检测SQL注入漏洞。
  • 含SQL注入漏洞的Web应用:用于测试防护措施。

准备工作

  • 网络配置:验证所有计算机的IP地址、子网掩码、网关等配置正确,确保可相互访问。
  • 数据库服务器:安装并配置MySQL,创建测试数据库及表(如test_db,包含users表)。
  • Web服务器:安装Apache和PHP环境,部署含SQL注入漏洞的Web应用(如vulnerable_app)。
  • 攻击机:安装SQLmap及其他测试工具(如Burp Suite)。

实操试题

项目一:数据安全管理与审计

题目1:数据库安全配置和权限管理

工具:MySQL数据库管理系统。

步骤

  1. 登录MySQL数据库

    1
    mysql -u root -p

    输入密码后进入MySQL命令行,选择要操作的数据库(如test_db):

    1
    USE test_db;
  2. 创建新用户并限制访问地址

    1
    2
    CREATE USER 'test_user'@'192.168.10.10' IDENTIFIED BY 'password123';
    CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'password123';
  3. 分配权限

    1
    2
    GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'test_user'@'192.168.10.10';
    GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'test_user'@'localhost';
  4. 测试权限设置

    • 192.168.10.10localhost登录MySQL:
      1
      mysql -u test_user -p -h 192.168.10.10  # 或 -h localhost
    • 执行插入操作测试:
      1
      2
      INSERT INTO users (username, password) VALUES ('test', 'test123');
      SELECT * FROM users; -- 验证数据是否插入成功

项目二:数据备份与恢复

题目2:数据库的定期备份与恢复

工具:MySQL的mysqldump工具。

步骤

  1. 备份整个数据库(含触发器)

    1
    mysqldump -u root -p --triggers test_db > /backup/test_db_backup.sql

    /backup为安全存储路径,需提前创建)

  2. 删除表的部分数据(测试场景)

    1
    DELETE FROM users WHERE id = 1;  -- 假设删除id为1的记录
  3. 恢复数据

    1
    mysql -u root -p test_db < /backup/test_db_backup.sql
  4. 验证恢复结果

    1
    SELECT * FROM users;  -- 确认删除的记录已恢复

项目三:数据加密与保护

题目3:数据加密存储

工具:OpenSSL进行数据加密。

步骤

  1. 选择敏感数据表:如users表(包含idusernamepassword等字段)。

  2. 生成加密密钥和IV

    1
    2
    3
    4
    # 生成32字节密钥(AES-256)
    openssl rand -base64 32 > /path/to/encryption_key.txt
    # 生成16字节IV
    openssl rand -base64 16 > /path/to/iv.txt
  3. 编写加密脚本(PHP示例)

    1
    2
    3
    4
    5
    6
    7
    <?php
    $key = file_get_contents('/path/to/encryption_key.txt');
    $iv = file_get_contents('/path/to/iv.txt');
    $data = "sensitive_info"; // 需加密的敏感数据
    $encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv);
    // 将$encrypted存储到数据库的敏感列(如password字段)
    ?>
  4. 验证加密存储:查询数据库中的敏感列,确认存储的是加密后的密文(如U2FsdGVkX1+...)。

  5. 完整性验证(解密测试)

    1
    2
    $decrypted = openssl_decrypt($encrypted, 'aes-256-cbc', $key, 0, $iv);
    echo $decrypted; // 输出应为原始明文"sensitive_info"

项目四:数据安全漏洞检测与防护

题目4:Web应用SQL注入防护措施实施

工具:SQLmap进行安全测试。

步骤

  1. 选择存在SQL注入漏洞的Web应用:如http://192.168.10.20/vulnerable_app/login.php?username=admin

  2. 使用SQLmap扫描注入点

    1
    sqlmap -u "http://192.168.10.20/vulnerable_app/login.php?username=admin" --dbs

    --dbs用于枚举数据库,确认注入点存在)

  3. 应用防御措施

    • 输入验证:在Web应用代码中对用户输入进行过滤(如使用正则表达式限制特殊字符)。
    • WAF配置:部署WAF(如ModSecurity),规则示例:
      1
      SecRule ARGS "@rx union\s+select" "id:1001,deny,status:403"
  4. 验证防护有效性
    重新使用SQLmap扫描:

    1
    sqlmap -u "http://192.168.10.20/vulnerable_app/login.php?username=admin" --dbs

    若扫描结果提示“no SQL injection detected”,则防护措施有效。