20232427 2025-2026-1 《网络与系统攻防技术》实验八实验报告
一、实验目的
1.Web前端HTML。能安装启停Apache,编写含表单的HTML网页。
2.Web前端javascipt。能用JS验证表单并回显欢迎信息,测试XSS注入。
3.Web后端数据库。能安装配置MySQL,完成建库建用户建表操作。
4.Web后端数据库连接。能用PHP连接数据库,实现用户登录认证功能。
5.基础攻击测试。能进行简单的SQL注入与XSS攻击测试。
6.安全攻防平台。安装DVWA或WebGoat平台,完成三项主要攻击实践。
二、实验环境
安装Kali镜像的VMware虚拟机

三、实验过程
1.Web 前端 HTML:Apache 配置与表单页面编写
Apache是一款开源的Web服务器软件,广泛用于托管网站、提供Web服务和应用程序。
命令systemctl start apache2可启动Kali虚拟机中自带的Apache服务
命令systemctl status apache2.service可确认Apache状态
命令systemctl stop apache2可关闭Apache服务。

编写含表单的 HTML 页面
进入 Apache 网站根目录(默认路径:/var/www/html):
cd /var/www/html
sudo vi 20232427zyz.html # 新建并编辑HTML文件

编写表单页面代码(支持 GET/POST 方法):

保存退出,在浏览器访问http://192.168.247.128/20232427zyz.html,可见登录表单。

2.Web前端JavaScript:表单验证与注入测试
编辑20232427zyz.html,添加 JavaScript 代码

用户名空:弹出 “用户名不能为空”;

密码 空:弹出 “请输入密码”;

输入合法信息(如用户名test、密码123456):弹出 “欢迎test”。

步骤 2:XSS 注入测试(利用回显漏洞)
在用户名输入框中输入恶意 HTML/JavaScript 代码,密码任意输入(如123):
HTML 注入:
XSS注入成功
JavaScript 注入:
点击 “登录”,观察效果:
HTML 注入:回显区域显示红色大号文字,说明 HTML 标签被解析;
JavaScript 注入:弹出 “20232427_XSS 攻击” 弹窗,说明恶意脚本被执行。
3.Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
启动 MySQL 服务:sudo systemctl start mysql
查看 MySQL 服务状态(确认是否正常运行):sudo systemctl status mysql

初始化 MySQL(设置 root 密码、创建用户)
登录 MySQL(Kali 默认 root 无密码,直接登录):
设置 root 用户密码(示例:20232427mysql,可自定义):
创建专用数据库用户(如web_user,避免直接使用 root):
退出 MySQL:

建库、建表与授权
用 root 身份重新登录 MySQL:

创建数据库(如web_login_db,用于存储登录数据):

创建用户表(users,存储用户名和密码):

插入测试数据(用于后续认证验证):
授权web_user操作web_login_db数据库:

验证数据:

4.Web后端:编写PHP网页,连接数据库,进行用户认证
编写 PHP 代码

验证 PHP 与 MySQL 连接可用性
浏览器访问http://192.168.247.128/20232427zyz.html;
输入测试账号(用户名20232427,密码zyz123456),点击登录;
页面跳转到login.php,显示 “登录成功!欢迎 20232427”,说明认证正常;

输入错误信息(如用户名test,密码123),显示 “登录失败”,逻辑正常。

5.最简单的SQL注入,XSS攻击测试
SQL 注入测试(利用未过滤的 SQL 语句)
原理:PHP 代码中直接拼接用户输入到 SQL 语句(\(sql = "SELECT * FROM users WHERE username = '\)username' AND password = '$password'";),恶意输入可篡改 SQL 逻辑。
攻击步骤:
打开登录页,用户名随便框输入,密码处输入' OR '1'='1(点击登录,页面显示 “登录成功”,说明注入生效。
注入后实际执行的 SQL:
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '123';
'1'='1恒成立,导致 WHERE 条件始终为真,绕过认证。

XSS 攻击测试(利用 PHP 未过滤输出)
原理:login.php中直接输出用户名(echo "欢迎 " . $username . "),未做转义,恶意脚本被执行。
攻击步骤:
登录页用户名输入框输入:<img src=x onerror=alert("20232427_PHP_XSS")>,密码输入' OR '1'='1;
点击登录,页面弹出 “20232427_PHP_XSS” 弹窗,说明 XSS 攻击生效。

6.安装DVWA或WebGoat平台,并完成SQL注入、XSS、CSRF攻击。
下载 DVWA 源码
sudo git clone https://github.com/digininja/DVWA.git /var/www/html/dvwa

复制并配置默认配置文件


设置目录权限

浏览器访问 DVWA 初始化页面:输入http://192.168.248.128/dvwa/setup.php。
页面下滑至底部,点击 “Create / Reset Database” 按钮初始化数据库(若提示连接失败,检查config.inc.php中 MySQL 信息是否正确)。
初始化成功后,点击页面上方 “Login” 进入登录页,输入默认账号密码:
用户名:admin
密码:password
点击 “Login”,成功进入 DVWA 主界面。


配置安全级别为 Low
进入 DVWA 主界面后,点击左侧菜单栏 “DVWA Security”(安全配置)。
在 “Security Level” 下拉框中选择 “Low”(完全 vulnerable,无安全防护)。
点击 “Submit”,页面提示 “Security Level Set To: Low” 即配置生效。

SQL 注入攻击
漏洞原理
Low 级别未过滤用户输入的特殊字符(如单引号),可通过拼接 SQL 语句篡改查询逻辑,绕过限制获取数据库数据。
攻击步骤
进入 SQL 注入模块:左侧菜单栏点击 “SQL Injection”(SQL 注入),进入 ID 查询页面。
基础测试:在 “User ID” 输入框输入1,点击 “Submit”,页面返回 ID=1 的用户信息(First name: admin,Surname: admin),说明查询正常。

漏洞探测:输入1'(单引号),点击 “Submit”,页面报错 “You have an error in your SQL syntax”,说明单引号未被过滤,存在注入漏洞。

注入攻击:输入1' OR 1=1 --,点击 “Submit”:

原理:注入后 SQL 语句变为 SELECT first_name, last_name FROM users WHERE user_id = '1' OR 1=1 --'
OR 1=1 使查询条件恒成立,-- 注释后续语句,页面返回所有用户信息(如 admin、gordonb 等)
XSS 攻击(反射型 + 存储型)
(1)反射型 XSS 攻击(非持久化)
漏洞原理
用户输入的恶意脚本仅在当前请求中生效,未存储到数据库,仅对当前用户和会话有效。
攻击步骤
进入反射型 XSS 模块:左侧菜单栏点击 “XSS (Reflected)”(反射型 XSS)。
在 “What's your name?” 输入框中输入恶意 JavaScript 代码:
<img src=x onerror=alert('20232427_反射型XSS成功')>
代码说明:img标签的src=x故意出错,触发onerror事件,执行alert弹窗。
点击 “Submit”,页面立即弹出 “20232427_反射型 XSS 成功” 弹窗,攻击生效。
验证非持久化:刷新页面,弹窗消失,说明脚本未存储,仅在本次请求中执行。

(2)存储型 XSS 攻击(持久化)
漏洞原理
用户输入的恶意脚本被存储到数据库,所有访问该页面的用户都会触发脚本执行,影响范围更广。
攻击步骤
进入存储型 XSS 模块:左侧菜单栏点击 “XSS (Stored)”(存储型 XSS,留言板功能)。
输入测试数据:
Name(姓名):20232427(任意合法字符)
Message(留言):输入恶意脚本:
点击 “Sign Guestbook”(提交留言),页面立即弹出弹窗,说明脚本已执行。
验证持久化:刷新页面,弹窗再次出现;退出 DVWA 重新登录后访问该页面,弹窗仍触发,说明脚本已存入数据库,攻击持久有效。

CSRF 攻击(跨站请求伪造)
漏洞原理
Low 级别未验证请求来源,攻击者可构造恶意链接,诱导已登录用户点击,伪造用户操作(如修改密码)。
攻击步骤
步骤 1:测试正常密码修改功能
进入 CSRF 模块:左侧菜单栏点击 “CSRF”(密码修改功能)。
输入原密码password,输入新密码(zyz123)、确认新密码(zyz123),点击 “Change”,页面提示 “Password Changed”,退出后用新密码zyz123可成功登录,确认功能正常。

步骤 2:构造恶意 HTML 文件(伪造密码修改请求)
在 Apache 根目录创建恶意文件attack20232427.html:
sudo nano /var/www/html/attack20232427.html
写入以下代码(自动提交密码修改请求,新密码设为hacked20232427):

保存并退出:Ctrl+O→回车→Ctrl+X。
步骤 3:诱导受害者操作(模拟攻击)
保持 DVWA 登录状态(admin 账号已登录,未退出)。
浏览器访问恶意文件:输入http://192.168.248.128/attack20232427.html,页面显示 “限时福利领取” 诱导文案。

点击 “点击领取” 按钮,页面自动跳转到 DVWA 密码修改成功页面。

退出 DVWA,重新访问登录页http://192.168.248.128/dvwa/login.php。
输入原密码password,点击 “Login”,提示 “Login failed”(登录失败)。

输入伪造的新密码hacked20232427,点击 “Login”,成功进入 DVWA 主界面,CSRF 攻击生效。

四、问题及解决方案
1.打开网站发现是乱码

HTML 页面中的文字(尤其是中文、特殊符号)需要通过字符编码声明告诉浏览器使用何种编码格式解析。如果页面未声明编码,或声明的编码与实际保存的编码不一致,浏览器会使用默认编码(如 ISO-8859-1)解析,而该编码不支持中文等字符,从而导致乱码。
在标签内添加,问题解决
2.下载 DVWA 源码显示出现致命错误,检查后发现无法解析域名
进一步排查后发现是网关 192.168.247.2 完全不可达

还原默认设置,重新配置后解决,虚拟机IP地址变更为192.168.248.128
五、实验感悟与思考
本次实验从 Web 前后端基础到安全攻击实践,完整覆盖了 Web 安全的核心环节。通过搭建 Apache/MySQL/PHP 环境,我理解了 Web 服务的运行逻辑;通过编写表单、验证代码,体会到前端输入未过滤带来的风险;而 SQL 注入、XSS、CSRF 等攻击实践,让我直观认识到 Web 漏洞的危害 —— 简单的代码缺陷即可导致用户信息泄露、权限被篡改。
实验也让我意识到,Web 安全防护需要 “多层防御”:前端需过滤用户输入、后端需使用预处理语句(如 PHP 的 PDO)防止 SQL 注入、服务器需配置安全策略(如 CSP 防 XSS)。作为网络安全学习者,不仅要掌握攻击技术,更要理解防御原理,才能在实际场景中构建安全的 Web 系统。

浙公网安备 33010602011771号