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

news/2025/12/6 11:45:59/文章来源:https://www.cnblogs.com/shi0195/p/19294467

1. 实验内容

1.1 实验基本内容概述

(1)编写含有表单的前端代码,启用Apache,可以访问对应网页。
(2)在前端代码中添加javascript代码,进行验证和登录回显的操作,并对其进行注入攻击。
(3)启动MySQL,并对其进行基础操作。
(4)修改前端代码,编写PHP代码,使网页可以通过请求PHP文件,连接数据库,进行用户认证。
(5)对编写的网页进行SQL注入、XSS攻击。
(6)安装WebGoat平台,完成SQL注入、XSS、CSRF攻击。

1.2 学习内容概述

(1)学习网页编写的相关内容,包括html、Javascript、php。
(2)熟悉前后端项目设计的软件,包括Apache、MySQL。
(3)学会进行HTML注入、JavaScript注入、SQL注入、XSS攻击。
(4)利用平台进一步学习SQL注入、XSS、CSRF攻击。

2. 实验内容

2.1 Web前端HTML

  HTML:超文本标记语言,用于创建和设计网页及其内容的标准标记语言。
表单:HTML中的一种元素,用于收集用户输入的数据,如文本、密码、选项等。
GET方法:一种HTTP请求方法,用于请求从服务器获取数据,并将参数附加在URL中。
POST方法:一种HTTP请求方法,用于向服务器提交数据,数据通常包含在请求体中,适合提交敏感或大量数据。
在kali虚拟机上已安装了Apache服务,我们先使用命令netstat -tupln | grep 80检查端口是否被占用,再用systemctl start apache2开启Apache,用systemctl status apache2.service确认服务状态,用systemctl stop apache2关闭Apache,从结果中可以看出Apache正常启动

启动Apache

  确定Apache正常启动后,我们进入kali虚拟机的/var/www/html目录下,用vi 20232416szw.html命令创建html文件,并输入以下内容:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>表单示例</title><style>body {font-family: Arial, sans-serif;background-color: #f0f0f5;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}.container {background-color: #fff;padding: 30px;border-radius: 10px;box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);width: 400px;text-align: center;}.container img {border-radius: 50%;width: 100px;height: 100px;margin-bottom: 20px;}.container h2 {margin-bottom: 20px;}.form-group {margin-bottom: 15px;}.form-group label {display: block;margin-bottom: 5px;}.form-group input[type="text"],.form-group input[type="password"],.form-group input[type="email"],.form-group button[type="submit"] {width: 100%;padding-top: 10px;padding-bottom:10px;border: 1px solid #ccc;border-radius: 5px;}.form-group button[type="submit"] {margin-top:5px;background-color: #007BFF;color: #fff;border: none;cursor: pointer;}.form-group button[type="submit"]:hover {background-color: #0056b3;}</style>
</head>
<body><div class="container"><img src="1.jpg" alt="Profile Picture"><h2>注册表单</h2><form action="/submit-form" method="post"><div class="form-group"><label for="username">用户名</label><input type="text" id="username" name="username" required></div><div class="form-group"><label for="email">邮箱</label><input type="email" id="email" name="email" required></div><div class="form-group"><label for="password">密码</label><input type="password" id="password" name="password" required></div><div class="form-group"><button type="submit">注册</button></div></form><p>或者通过GET方法获取数据:</p><form action="/get-data" method="get"><div class="form-group"><label for="search">搜索</label><input type="text" id="search" name="search" required><button type="submit">搜索</button></div></form></div>
</body>
</html>

  接下来我们在对应文件夹中找到.html文件并打开,我们可以看到效果如下:

登陆网页

2.2 Web前端javascript

  JavaScript:Web的编程语言,主要用于嵌入动态文本于HTML页面、响应浏览器事件、读写HTML元素、验证数据等。
DOM:文档对象模型,是浏览器用来解析HTML和XML文档的编程接口,将文档描绘成一个层次化的节点树,允许开发人员动态地访问和操作文档的内容和结构。
在此前基础上移除了action和method属性,注册按钮改为“登录”,并添加了onclick="submit_login()",添加验证脚本,证用户名、密码的规则,并在用户成功登录后回显"欢迎+输入的用户名",具体代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>登录表单</title><style>body {font-family: Arial, sans-serif;background-color: #f0f0f5;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}.container {background-color: #fff;padding: 30px;border-radius: 10px;box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);width: 400px;text-align: center;}.container img {border-radius: 50%;width: 100px;height: 100px;margin-bottom: 20px;}.container h2 {margin-bottom: 20px;}.form-group {margin-bottom: 15px;}.form-group label {display: block;margin-bottom: 5px;}.form-group input[type="text"],.form-group input[type="password"],.form-group button {width: 100%;padding-top: 10px;padding-bottom:10px;border: 1px solid #ccc;border-radius: 5px;}.form-group button {margin-top:5px;background-color: #007BFF;color: #fff;border: none;cursor: pointer;}.form-group button:hover {background-color: #0056b3;}</style><script>function submit_login() {var username = document.getElementById('username').value;var password = document.getElementById('password').value;var usernameRegex = /^.{4,}$/;var passwordRegex = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,}$/;if (!usernameRegex.test(username)) {alert('用户名必须在4个字符以上');return;}if (!passwordRegex.test(password)) {alert('密码必须是6个字符以上,包含至少一个字母和一个数字');return;}document.write('欢迎 ' + username);};</script>
</head>
<body><div class="container"><img src="1.jpg" alt="Profile Picture"><h2>登录表单</h2><!-- 移除了action和method属性,改为登录表单 --><form><div class="form-group"><label for="username">用户名</label><input type="text" id="username" name="username" required></div><!-- 移除了邮箱输入框(登录表单通常不需要) --><div class="form-group"><label for="password">密码</label><input type="password" id="password" name="password" required></div><div class="form-group"><!-- 登录按钮添加了onclick事件 --><button type="button" onclick="submit_login()">登录</button></div></form><p>或者通过GET方法获取数据:</p><form action="/get-data" method="get"><div class="form-group"><label for="search">搜索</label><input type="text" id="search" name="search" required><button type="submit">搜索</button></div></form></div>
</body>
</html>

  以下分别是登录成功和登录失败的截图:

登录成功

用户名过短

密码过短

  接下来我们进行注入攻击
①HTML注入,在用户名一栏填入< h1>HTML injection succeed.< /h1>,成功实现HTML注入

HTML注入成功

②JavaScript注入,在用户名一栏填入< script type="text/javascript"> alert("JavaScript injection succeed.") </ script>,成功实现JavaScript注入

JavaScript注入成功

2.3 Web后端MySQL基础

  kali虚拟机自带MySQL,输入命令systemctl start mysql打开服务,输入命令systemctl status mysql确认服务已开启,从结果中可以看出MySQL正常启动。

查看数据库状态

  接下来我们输入以下命令,完成建库、创建用户、修改密码、建表等操作

mysql
-- 创建数据库
CREATE DATABASE 20232416db;
-- 使用数据库
USE 20232416db;
-- 创建用户
CREATE USER 'user20232416' IDENTIFIED BY 'Szw666';
-- 授予用户权限
GRANT ALL PRIVILEGES ON 20232416db.* TO 'user20232416';
FLUSH PRIVILEGES;
-- 修改用户密码
ALTER USER 'user20232416' IDENTIFIED BY 'Szw6666';
-- 创建表
CREATE TABLE onetable (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,pwd VARCHAR(255) NOT NULL
);
-- 插入数据
INSERT INTO onetable (name, pwd) VALUES ('szw', '20232416szw');
-- 查看表中所有内容
SELECT * FROM onetable;

查看数据库

2.4 Web后端编写PHP网页

  我们输入命令apt-get install php下载php,可以发现kali虚拟机已经安装过php

PHP已安装

  此处我们编写php代码,建立与MySQL数据库的连接,并执行用户认证。

<?php
$host = 'localhost';
$dbname = '20232416db';
$user = 'user20232416';
$password = 'Szw6666';//创建数据库连接
$conn = new mysqli($host, $user, $password, $dbname);//检查连接是否成功
if ($conn->connect_error) {die("数据库连接失败: " . $conn->connect_error);
}//获取POST数据
$username = $_POST['username'];
$password = $_POST['password'];//使用查询语句进行查询
$sql = "SELECT * FROM onetable WHERE name='$username' AND pwd='$password'";  
$result = $conn->query($sql);//检查是否有匹配的记录
if ($result->num_rows > 0) {echo "欢迎登录成功: " . $username . "!";
} else {echo "用户名或密码错误";
}//关闭结果集和预处理语句
$result->close();
$stmt->close();//关闭数据库连接
$conn->close();
?>

  接下来,我们修改前端代码,主要是修改登录表单的属性如下,删除按钮的onclick属性,具体代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>登录表单</title><style>body {font-family: Arial, sans-serif;background-color: #f0f0f5;display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;}.container {background-color: #fff;padding: 30px;border-radius: 10px;box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);width: 400px;text-align: center;}.container img {border-radius: 50%;width: 100px;height: 100px;margin-bottom: 20px;}.container h2 {margin-bottom: 20px;}.form-group {margin-bottom: 15px;}.form-group label {display: block;margin-bottom: 5px;}.form-group input[type="text"],.form-group input[type="password"],.form-group button {width: 100%;padding-top: 10px;padding-bottom:10px;border: 1px solid #ccc;border-radius: 5px;}.form-group button {margin-top:5px;background-color: #007BFF;color: #fff;border: none;cursor: pointer;}.form-group button:hover {background-color: #0056b3;}</style><script>function submit_login() {var username = document.getElementById('username').value;var password = document.getElementById('password').value;var usernameRegex = /^.{4,}$/;var passwordRegex = /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,}$/;if (!usernameRegex.test(username)) {alert('用户名必须在4个字符以上');return;}if (!passwordRegex.test(password)) {alert('密码必须是6个字符以上,包含至少一个字母和一个数字');return;}document.write('欢迎 ' + username);};</script>
</head>
<body><div class="container"><img src="1.jpg" alt="Profile Picture"><h2>登录表单</h2><!-- 修改1:添加了action和method属性 --><form id="loginForm" action="http://localhost/20232416szw.php" method="post"><div class="form-group"><label for="username">用户名</label><input type="text" id="username" name="username" required></div><div class="form-group"><label for="password">密码</label><input type="password" id="password" name="password" required></div><div class="form-group"><!-- 修改2:删除了onclick属性 --><button type="submit">登录</button></div></form><p>或者通过GET方法获取数据:</p><form action="/get-data" method="get"><div class="form-group"><label for="search">搜索</label><input type="text" id="search" name="search" required><button type="submit">搜索</button></div></form></div>
</body>
</html>

  连接成功和失败会有提示,如图

远程数据库登录成功

数据库远程连接失败

2.5 实现基础攻击测试

2.5.1 SQL注入

  在用户名中随机输入,密码中输入' OR '1'='1,即可成功登录,实现了SQL注入。

SQL注入攻击

2.5.2 XSS攻击

  在用户名中输入< script>alert("xss atack succeed.");< /script>,密码中输入' OR '1'='1,网页弹出窗口,实现了XSS攻击。

XSS攻击成功

2.6 安装DVWA或WebGoat平台,并完成SQL注入、XSS、CSRF攻击

2.6.1 完成SQL注入

  我们先看第九个,第九个是通过注入看到表中所有用户的数据
构建查询语句的代码应如此"SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '" + lastName + "'";
执行语句是SELECT * FROM user_data WHERE first_name = 'John' and last_name 'Smith' or '1' = '1';

image

  接下来我们看第十二道题,第十二个是通过注入改变工资数量
我们最终的输入内容分别是Employee Name:Smith,Authentication TAN:1'; UPDATE employees SET SALARY = 999999 WHERE LAST_NAME = 'Smith'; --

SQL注入第12题

2.6.2 完成XSS攻击

  我们来看第七题,这题是反射型XSS攻击,页面显示一共有两个提交框,所以需要测试哪个提交框可以完成攻击。
我们呢分别尝试在两个框中输入<script>alert('xss attack20222408')</script>,发现在第一个框中输入时会弹框,说明XSS攻击成功。

CSS攻击第7题

  第十个是基于DOM的XSS攻击,需要先找到在生产过程中留在应用程序中的测试代码的路径。我们可以看到题目当中告诉了我们"The ‘base route’ in this case is: start.mvc#lesson",而js文件中写道“‘test/:param’: ‘testRoute’”,因此答案就是start.mvc#test/

CSS攻击第10题

2.6.2 完成CSRF攻击

  我们查看第八题,该题是登录CSRF攻击,即使用其他用户登录
在保持原界面不变的基础上,我们注册并登陆一个csrf-dank666的账、用户,并且在原用户dank666上进行攻击,显示攻击成功

CSRF攻击成功-0

CSRF攻击成功

3. 问题及解决方案

  问题1:在Web后端编写PHP网页后,运行始终无法进入我数据库中注册的用户

问题2

  解决方案1:查询AI后显示我的网站服务器端出现故障,具体可能包括服务器程序(比如 PHP 代码)出错、配置错误;服务器资源不足(过载、内存不够);相关服务(如 Apache、MySQL)未正常运行。于是根据这些反馈我重启了Apache和重新编辑了一个新的MySQL数据库,依旧显示这样的问题,我重新检查了PHP文件,发现是我的密码的第一位没有大写导致和数据库中密码不一致产生这样的问题。

4. 学习感悟及思考

  本次Web开发与网络安全实验,让我在亲手搭建前后端项目、完成数据库交互的过程中,夯实了HTML、JavaScript、PHP的实操能力,也熟悉了Apache和MySQL的基础运维。从成功实现HTML、JavaScript注入,到用' OR '1'='1完成SQL注入登录,再到在WebGoat平台开展XSS、CSRF攻击测试,我直观感受到了代码漏洞带来的巨大安全风险,深刻意识到安全防护绝非空谈。实验中因密码大小写不一致导致数据库认证失败的排查经历,也让我明白严谨的重要性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/989983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年厦门五大实力强的税务师事务所推荐,专业税务服务企业

在企业经营管理中,财税服务是保障企业合规运营、优化成本结构的核心支撑。面对市场上众多税务师事务所,如何挑选专业可靠的合作伙伴?以下结合厦门本地财税服务需求,为你推荐2025年厦门十大实力强的税务师事务所。一…

2025年度郑州包装公司TOP5权威推荐:森一包装,甄选企业

在制造业全球化与供应链效率升级的浪潮下,企业对安全合规、成本可控、响应极速的包装解决方案需求激增。2024年数据显示,我国工业包装市场规模超3200亿元,年增速18%,但62%的企业投诉集中在包装成本高、出口合规风险…

PbootCMS 上一篇/下一篇调用:如何将“没有了”改为英文

1. 功能概述 在 PbootCMS 中,通过 {content:precontent} 和 {content:nextcontent} 标签可以调用当前内容的上一篇和下一篇。如果不存在上一篇或下一篇,默认会显示“没有了”。为了满足多语言需求,可以通过 notext …

PbootCMS上传文件大小限制(PbootCMS上传文件大小限制的全面解决方案)

1. 问题概述 在使用 PbootCMS 时,如果需要上传大体积文件(如超过默认限制的文件),可能会遇到上传失败的问题。这是由于 PHP 和服务器配置对文件上传大小进行了限制。本文将详细介绍如何通过修改相关配置解决此问题…

完整教程:springcloud:理解springsecurity安全架构与认证链路(二)RBAC 权限模型与数据库设计

完整教程:springcloud:理解springsecurity安全架构与认证链路(二)RBAC 权限模型与数据库设计2025-12-06 11:32 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !im…

实用指南:面向多模态医学图像配准与分割的MambaMorph模型:基于状态空间建模的全流程分析与应用

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

MySQL 数据库知识点扫盲:从基础到核心,全面掌握关键特性

MySQL 是一款由 Oracle 公司维护的开源关系型数据库管理系统(RDBMS),以 “轻量高效、跨平台兼容、易用性强、社区活跃” 为核心优势,广泛应用于 Web 开发、企业级应用、嵌入式系统等场景,是 LAMP(Linux+Apache+M…

闻气即知

徐灵胎医案 郡中朱姓,素有饮癖,在左胁下,发则胀痛呕吐,始发甚轻,医者每以补剂疗之,发益勤而甚,余戒之曰:“此饮癖也,患者甚多,惟以消饮通气为主,断不可用温补,补则成坚癖,不可治矣。”不信也。后因有郁结…

2025厦门税务师事务所TOP5权威推荐:实力口碑双优企业甄

在企业数字化转型与合规经营的双重驱动下,专业税务师事务所的价值愈发凸显。2024年数据显示,厦门财税服务市场规模突破60亿元,年增速达28%,但企业对税务服务的投诉中,42%集中在服务碎片化、政策解读滞后、疑难问题…

2025年流体输送安全设备五大推荐品牌解析:曼太柯产品质量可

在化工石油、海工船舶等领域,流体输送的安全性直接关系到生产安全、环保合规与企业成本控制。干式快速接头与拉断阀作为流体输送系统的安全阀门,其性能与可靠性备受行业关注。面对市场上众多品牌,如何选择适配性强、…

一站式在线图片工具箱:多功能、免安装的图像处理解决方案

在数字内容创作日益普及的今天,每个人都可能遇到需要处理图片的情况——无论是压缩照片以便分享、转换格式适应不同平台、添加水印保护版权,还是提取颜色获取灵感、生成二维码方便传播。传统上,这些需求往往需要多个…

让数据处理更简单:一款完全在浏览器中运行的轻量级文件转换工具

在日常工作和生活中,我们常常需要处理各种文件格式转换的问题。比如整理笔记时想将文字保存为TXT文件、分析数据时需要把Excel转换为更通用的CSV格式,但又担心使用在线工具会泄露敏感信息,或是厌倦了繁琐的注册流程…

2025年光伏线束定制企业推荐:专业制造厂与加工厂综合排名解

一、光伏线束定制领域TOP5企业推荐 品恩泰克 - TOP1 推荐指数:★★★★★ 口碑评分:4.9分(满分5分) 品牌介绍:浙江品恩泰克科技有限公司是专注光伏/储能线束研发、生产的国家高新技术企业,以专注绿色能源,守护生…

2025年上海注册公司服务哪家好?注册公司服务选哪家好?

TOP1 推荐:上海汇礼财务咨询 推荐指数:★★★★★ 口碑评分:上海口碑TOP1的注册公司服务机构 专业能力:植根上海12年的财税服务标杆,以合规、透明、负责为核心,构建全生命周期财税服务体系:初创期提供公益注册公…

2025 --【J+S 二十连测】-- 第十七套 总结

总结 T1 考场上想出来了解法。但是不太对。解的一个小策略,没想到。 T2 考场上想出来了正解并打出了代码,没什么问题。 T3 考场上没想到正解也没有打出部分分。 T4 T5 考场上也没有打出正解。但是打出了部分分。 题解…

AutoCAD 2021 下载安装激活 绘图新体验:修剪 / 延伸快速模式,复杂图纸处理更流畅

AutoCAD 2021 是 Autodesk 公司于 2020 年推出的专业计算机辅助设计软件,在建筑、机械、电气等多个工程设计领域应用广泛。该版本核心围绕绘图效率提升、协作便捷性优化和功能实用性增强做了升级,既保留了传统 CAD 绘…

pbootcms模板后台编辑器无法上传图片提示:后端配置项没有正常加载,上传插件不能正常使用!

PbootCMS后台编辑器上传图片失败:后端配置项加载错误的解决方法在使用PbootCMS模板开发网站时,后台编辑器(如UEditor)可能遇到无法上传图片的问题。常见表现为:单图片上传按钮无反应,多图片上传提示“后台配置项…

待学知识点汇总

前言:未完成 待办+Date:已学但需巩固以及上次的 Date 完成+Date分治 cdq(顺便学手写排序):未完成 树上问题 点分治:未完成 边分治:未完成 启发式合并:待办+2025.11.18 虚树:未完成 树剖:完成+不熟练 图论 Ta…

2025年中国十大木门品牌排名:看哪家品牌口碑好?

本榜单依托市场调研与真实用户反馈,深度筛选十家标杆企业,为消费者与合作方选型提供客观依据,助力精准匹配适配的木门品牌伙伴。 TOP1 推荐:广东洋诚木业有限公司 推荐指数:★★★★★ 口碑评分:国内评价高的木门…