20232422 2025-2026-1 《网络与系统攻防技术》实验八实验报告

1.实验内容

1.掌握Apache服务的安装、启停操作,编写含GET和POST方法表单的HTML页面。
2.基于HTML页面开发JavaScript脚本,实现用户名和密码的验证规则及登录后用户名回显功能,尝试利用回显逻辑进行HTML和JavaScript注入攻击。
3.完成MariaDB(MySQL)的安装、启动,建库、创建用户、修改密码、建表。
4.编写PHP网页实现与数据库的连接及用户认证功能,测试最简单的SQL注入和XSS攻击。
5.安装DVWA平台并完成SQL注入、XSS反射型和存储型、CSRF三类典型漏洞的复现。

2.实验过程

2.1 Web前端HTML开发

2.1.1 Apache服务安装与启停

  • 启动Apache:在Kali执行sudo systemctl start apache2完成启动。
  • 服务操作:执行sudo systemctl start apache2启动服务,sudo systemctl stop apache2停止服务,sudo systemctl status apache2验证运行状态;
  • 验证结果:Apache服务启动成功,状态显示为active(running)。
    ad7811fa9af35e16deccb26f870a82f5
    f0b61558fc4f095489426c3d9019bc60
    357b5c238a96472ba89a9fb46da78aea

2.1.2 含GET/POST表单的HTML页面编写

  • 新建文件:在/var/www/html目录下创建20232422_login.html
  • 页面开发:编写GET、POST两种提交方式的登录表单。他们的提交目标不同,页面有用户名、密码输入框和登录按钮。
  • 编辑验证:保存文件后确认路径与Apache根目录一致,确保页面可正常访问。

6dccabe369f3ad388b4c261913fb673e
GET\POST登录代码如下:
0f9d484b164a7860ff7b12fcce84e6ee
实现页面如下:
f980dbeb8c4cd14188d749692f76a87a
此时登录
d6654520eaf345432b7d3d9aed5a012c
ead7c715525a20d0fe3b524f1299b498

2.2 Web前端JavaScript开发

2.2.1 表单验证脚本编写

  • 代码加入:在20232422_login.html中加入JavaScript代码,设定验证的规则:用户名不能输入为空、密码长度不能小于6位;
  • 最终实现:验证不通过时弹出提示框,验证通过则在页面回显“欢迎+输入的用户名”;
  • 功能测试:用空用户名和短密码试着登录,提示框触发,验证成功。
    问AI修改了一下代码如下:
    1c7e5ef8fe9227c3572ff3b1fbe3f980

其中JavaScript代码如下:
ed6c63392343f7fd9e21628d156ff6ec

空用户输入测试:
c3a21af90b2f179cd2f3b3a12c9e408f

小于6位密码输入测试:
82f824023c8b6d70c8618105d0ead0e7

正常用户名longhaoran密码123456输入提交登录测试。中!
fa88410547dce4528c3c1cff484dcee7
835529752a9f26f5fc81ff9876d4022f

2.2.2 HTML/JavaScript注入攻击尝试

  • HTML注入:在用户名输入框输入<h1>龙浩然</h1>,提交后页面回显大号字体用户名,注入成功。
    image

  • JavaScript注入:输入<script>alert('龙浩然的XSS攻击成功!')</script>,验证XSS漏洞存在。没有触发弹窗,问AI发现是浏览器XSS防护机制拦截,关闭浏览器XSS防护后重新测试,输入new URLSearchParams(window.location.search).get('username'),能正确获取到恶意代码(如 ),成功XSS攻击。

2490c5ea2036d83022d29cc71ac80941
1e16e6f785f50ad8dd9d8d0dcf530a91

2.3 Web后端MariaDB(MySQL)基础操作

2.3.1 MariaDB安装与启动

  • 安装操作:因Kali无MySQL官方安装源,执行sudo apt install mariadb-server -y安装MariaDB;
    77e1ff7b11eabf4606005314c6c69e53

  • 服务配置:sudo systemctl start mariadb启动服务,sudo systemctl enable mariadb设置开机自启;

  • 状态验证:执行systemctl status mariadb,确认服务处于运行状态。
    fc7df79b69b9efcaf81a15a532b3ce1a

2.3.2 数据库配置(建库、建用户、建表)

  • 密码设置:无密码登录MariaDB后,执行ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';设置root密码;
    2b890c6b3bd3c9bc8fada61d74c7cf27

  • 建库授权:创建数据库websec_db,新建用户webuser(密码123456)并授权其操作websec_db的全部权限;
    执行CREATE DATABASE IF NOT EXISTS websec_db;,创建名为websec_db数据库
    041e3d95d25eed6f01ac952d5ba7b6fd
    执行SELECT DATABASE();,查看当前选中的数据库,因未切换库,返回NULL。
    c1d060d17437ceb37921e943df91c479
    执行CREATE USER 'webuser'@'localhost' IDENTIFIED BY '123456';,创建本地数据库用户webuser,密码设为123456。
    b93c81625dee2760e3758974fbb18d8b7f6f5043548cfe5816cda8c7bf3b9def

执行GRANT ALL PRIVILEGES ON websec_db.* TO 'webuser'@'localhost';,授予webuser操作websec_db数据库的所有权限。
828d9fe5b7db598b5b808fed05d7923f

执行FLUSH PRIVILEGES;,刷新权限配置,使授权立即生效。
2e0c2ffd024ee32d77db22e4c325af02

执行SHOW GRANTS FOR 'webuser'@'localhost';,查看webuser的权限列表,确认对websec_db的权限已正确授予。
980cba4fa8ff780ea3dc3da1f52f7cbf

执行USE websec_db;,切换到websec_db数据库,后续操作将在该库下执行。
7f434d2344417cc11fe499da5a501e2a

  • 建表插数:在websec_db中创建users表(字段:id、username、password、email),插入3条测试数据。

执行CREATE TABLE IF NOT EXISTS users (...),在websec_db中创建users表,定义id(自增主键)、username(唯一非空)、password(非空)、email(可选)的字段结构。
4cb4949d312f4b183ffe75d9224a34fb

执行DESCRIBE users;,查看users表的字段类型、约束等结构信息,确认表创建符合预期。
5d500202c8ae1410a8d136f5809d7997

执行INSERT INTO users (username, password, email) VALUES (...),向websec_db数据库的users表中插入 3 条测试用户数据(包含admin、longhaoran、test三个账号);执行结果提示 “3 rows affected”,说明数据无重复、无警告,成功插入。
518d7e9585825605c395932b545d2b77

执行SELECT * FROM users;,查询users表的全部记录;结果显示 3 条完整的用户信息(含id、username、password、email字段),确认数据插入正确且完整。
787317aac15188490b3e0ace1b7e0a0e

2.4 Web后端PHP用户认证开发

2.4.1 PHP及MySQL扩展安装

  • 安装命令:执行sudo apt install php libapache2-mod-php php-mysql -y安装PHP及MySQL扩展组件;
    fc57d2032681acd5fe0189e6c2fad2a0

  • 配置生效:执行sudo systemctl restart apache2重启Apache,使PHP扩展配置生效。
    18d557d0044e28558ef6dc20bf0d63d5

2.4.2 PHP用户认证脚本编写与测试

  • 配置文件:创建20232422_db_config.php,写入数据库连接信息(主机、用户名、密码、库名);
    c7d6a74f4d0b1654def408af6b49a776
    代码如下:
    43661bd921fe37514f2a9f6894232a12
    将数据库配置文件的权限设置为 “所有者可读可写、其他用户只读”(权限 644),既确保 Apache 服务能正常读取连接配置,又限制非所有者的修改权限,提升文件安全性。
    fadb52a4c53025c90ddee922c07f4aa5

  • 认证脚本:创建20232422_auth.php,接收表单提交的用户名/密码,拼接SQL语句查询users表,返回登录成功/失败提示;
    319391f2f8d50c44235f0283dfb950a3
    代码如下:
    9a0bd70f0f7cd63873c451279d257559
    设置权限。
    68ff9d062560b5bb332ad54ddc62cdc2

  • 功能测试:输入正确和错误凭据,页面返回了正确的认证结果,认证功能正常。
    php
    afc60c3492b1f09d35dda111b51e0ddc
    e32782366591f15a123d433f327f5975
    702bf3ef35067225ec4e274041aa3187

2.5 SQL注入与XSS攻击测试

2.5.1 SQL注入测试

  • 注入操作:在POST表单用户名输入框输入longhaoran' OR '1'='1,密码随便写(但要满足之前设置的不小于6位);
    54095a2068bf28a0efc8af92524c3b4d

  • 结果验证:成功绕过用户认证登录系统,验证SQL注入漏洞。
    3529cb8550537f09af9f1f99c9e82f18

2.5.2 XSS攻击测试

  • 存储型XSS:通过MariaDB向users表插入含<script>alert("存储型XSS:龙浩然20232422")</script>的用户名,登录后触发弹窗;
    8e6a900c18bdfd4f825b23a35d997088
    登录弹窗:
    6da7349bf53b29aeadd15ec0955e1fe6
    成功登录:
    a58d15dbab9fafbfff97610a6bd488f5

  • 反射型XSS:在 POST 方法登录表单的 “用户名” 输入框中,输入包含恶意 JavaScript 的内容 “存储型XSS:龙浩然”,提交后触发弹窗。
    59bb55cbc9b4a3b08c3650c3aecf7888
    触发弹窗:
    ebe165820100daaf81330b4477466f69
    成功登录:
    5c0891404c3fedd04637de9d61e2d488

2.6 DVWA平台安装与漏洞测试

2.6.1 DVWA平台部署

  • 源码获取:因校园网限制git clone失败,切换电脑网络为手机热点执行git clone https://github.com/digininja/DVWA.git
    21f310745d59eac9f089d0efda869b8b
    执行sudo apt install git php-gd php-mbstring php-xml php-curl -y,安装 DVWA 运行所需的工具(git)及 PHP 扩展(gd、mbstring 等,用于支持图片处理、字符串操作等功能);系统自动下载并完成安装,确保 DVWA 的依赖环境配置完整。
    21f310745d59eac9f089d0efda869b8b

  • 配置修改:编辑config.inc.php,配置数据库连接信息(用户webuser、密码123456、库名websec_db),设置目录权限为www-data
    313e718a057fee14902fcb6b40ca4809

执行sudo chown -R www-data:www-data /var/www/html/DVWA给DVWA目录及所有内容赋予 Web 服务Apache运行权限,让Apache能正常读写DVWA的文件,从而确保DVWA平台能正常运行。
a0ab9f944b4edc16cb4a64c7fda79c07

  • 平台登录:访问http://192.168.216.128/DVWA初始化数据库,使用默认账号admin/password登录成功。
    d1084c8cea2182c8e32983cc8992e791
    创建
    b7d7b276244d5d7148234cd0a60f8ba6
    登录
    91ff82b6b56f4cc6da89764a0c4796f1
    c332ad275933954a3721c725cbb6d7cc

2.6.2 典型漏洞复现

  • SQL Injection:设置安全级别为Low。
    2b85560e7cc04096fd73a13737b05db9

输入1' OR 1=1 -- ,成功读取所有用户信息。
71bfee1c5af1b2af2e20def9c185316c

  • XSS (Reflected):输入<script>alert("DVWA反射型XSS:20232422")</script>,触发弹窗;
    4a476d6279aa5e61a9055556644eca65
    弹窗如下:
    6289abc9122e48070e11c3bdadecabc3

  • XSS (Stored):填写name,在Message栏注入恶意脚本,点击 “Sign Guestbook” 提交触发弹窗;刷新页面后弹窗复现,存储型 XSS 攻击注入成功。
    1366da0f96be16915d05420c546d24e4
    image

  • CSRF:构造恶意URL http://192.168.216.128/DVWA/vulnerabilities/csrf/?password_new=newpass123&password_conf=newpass123&Change=Change,登录状态下访问该URL修改密码,并用newpass123登录验证成功。
    59c3002adc062ebe890fa9118517e93b
    e2f5231a2b96bdc9beb07e53de2db6b6
    f25d6469fc034d4ef3a4aeeb0ffc1cc5
    797338174b0d35d015e984cb22bfec8b

3.问题及解决方案

  • 问题1:执行sudo apt install mysql-server提示无安装候选,无法安装MySQL。
    解决方案:了解到Kali默认以MariaDB替代MySQL且功能完全兼容,转而安装mariadb-server,后续数据库操作沿用MySQL语法,未影响实验进度。
  • 问题2:校园网环境下执行git clone https://github.com/digininja/DVWA.git提示“连接被对方重置”,克隆失败。
    解决方案:切换手机热点重新执行克隆命令,成功获取DVWA源码;若仍失败,可手动下载DVWA压缩包,传输至Kali系统后解压部署至Apache根目录。
  • 问题3:JavaScript注入后未触发预期弹窗,回显仅显示纯文本。
    解决方案:检查HTML页面用户名回显逻辑确认无输入转义,判定为浏览器XSS防护机制拦截,关闭浏览器XSS防护后重新测试。

4.学习感悟、思考等

这次Web安全的实验让我亲手走通了从开发到攻击的全流程。我发现如果前端验证不严会引发XSS,后端SQL拼接直接导致注入漏洞,CSRF更是钻了身份验证的漏洞。从安装数据库到搭建靶场,各种突发状况让我学会了灵活应对。感觉绝大多数漏洞都源于盲目信任用户输入。