当前位置: 首页 > news >正文

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

1.实验内容

(1)Web前端HTML

能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。

(2)Web前端javascipt

  • 理解JavaScript的基本功能,理解DOM。

  • 在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”

  • 尝试注入攻击:利用回显用户名注入HTML及JavaScript。

(3)Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表

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

(5)最简单的SQL注入,XSS攻击测试

(6)安装DVWA或WebGoat平台,并完成SQL注入、XSS、CSRF攻击。

2.实验过程

一.Web前端HTML

kali虚拟机上已安装Apache。先使用命令netstat -tupln | grep 80检查端口是否被占用,再用systemctl start apache2开启Apache,用systemctl status apache2.service确认服务状态。从结果中可以看出Apache正常启动。

image

进入kali的/var/www/html目录下,用vi 20232407lyh.html命令创建html文件

image

image

输入以下内容

<!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文件的效果如下

image

二.Web前端javascipt

在2.1的基础上,删除表单的action和method属性,把注册表单改成登录表单,在登录按钮上加入onclick="submit_login()"的属性,并添加一些script代码。这一段代码会在用户登录时,验证用户名、密码的规则,并在用户成功登录后回显"欢迎+输入的用户名"。

<!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>

最终实现的效果如下。成功对数据进行校验,并能够返回登录结果

image

image

对于实现的页面,进行注入攻击:在用户名一栏填入<h1>HTML injection succeed.</h1>,成功实现HTML注入。

image

image

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

image

image

三.Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表

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

image

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

mysql
-- 创建数据库
CREATE DATABASE 20232407db;
-- 使用数据库
USE 20232407db;
-- 创建用户
CREATE USER 'user20232407' IDENTIFIED BY '050620Lyh';
-- 授予用户权限
GRANT ALL PRIVILEGES ON 20232407db.* TO 'user20232407';
FLUSH PRIVILEGES;
-- 修改用户密码
ALTER USER 'user20232407' IDENTIFIED BY '050620Lyh!';
-- 创建表
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 ('liuyuhang', '20232407lyh');
-- 查看表中所有内容
SELECT * FROM onetable;

image

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

在kali中输入命令apt-get install php安装php

image

编写以下php代码,实现连接数据库和用户认证

<?php
$host = 'localhost';
$dbname = '20232407db';
$user = 'user20232407';
$password = '050620Lyh!';//创建数据库连接
$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/20232407lyh.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>

完成上述操作后,查看实现效果。发现可以正常进行用户认证。输入正确用户名和密码的结果如下:

image

输入错误密码如下:

image

五.实现简单的SQL注入和XSS攻击

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

image

image

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

image

image

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

搭建WebGoat

image

在网页上注册并登录

image

(1)完成SQL注入

  • 第九个是通过注入看到表中所有用户的数据

    构建查询语句的代码为"SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '" + lastName + "'";

    想要查询所有用户数据,要从后面的条件入手,输入内容为Smith' or '1'='1

    则查询语句为SELECT * FROM user_data WHERE first_name = 'John' and last_name 'Smith' or '1' = '1'

    由于'1' = '1'永真,所以就会返回所有表的数据

image

  • 第十个是数字型SQL注入,目的也是看到表中所有用户的数据

    构建查询语句的代码如下"SELECT * FROM user_data WHERE login_count = " + Login_Count + " AND userid = " + User_ID;

    输入内容为login_count=1,userid=1 OR 1=1

    则最终的查询语句是SELECT * From user_data WHERE Login_Count = 1 and userid= 1 OR 1=1

    由于1=1永真,所以就会返回所有表的数据

image

  • 第十三个是删除日志表,避免留痕

    输入内容为1'; drop table access_log; --

    开头的';'使得查询语句结束,之后写入完整的删表语句,并通过'--'使得后续的内容成为注释,因此就可以执行删表语句

image

(2)完成XSS攻击

点击左边的"Cross Site Scripting"

  • 第七个是反射型XSS攻击

    一共有两个提交框,所以需要测试哪个提交框可以完成攻击。分别尝试在两个框中输入,发现在第一个框中输入时会弹框,说明XSS攻击成功。

image

  • 第十个是基于DOM的XSS攻击,需要先找到在生产过程中留在应用程序中的测试代码的路径

    题目当中告诉了我们"The ‘base route’ in this case is: start.mvc#lesson",而js文件中写道“‘test/:param’: ‘testRoute’”,因此答案就是“start.mvc#test/”

image

  • 第十一个是基于DOM的XSS攻击

    使用第十节发现的route,执行如下函数,从route中反射参数webgoat.customjs.phoneHome()。

    通过url在新的标签页触发,然后控制台会显示一个响应,输入响应中的随机数完成这个题。

    构造如下url,访问http://127.0.0.1:8080/WebGoat/start.mvc#test/param1=foobar&param2=DOMXSS%3Cscript%3Ewebgoat.customjs.phoneHome()%3C%2Fscript%3E

image

可以看到控制台已经输出了信息,提交-2091151683

image

(3)完成CSRF攻击(我用的DVWA)

可以看到网站的设计意图是让我们修改密码

image

如图所示,当我直接提交的时候,在url中出现了两个参数,一个是password_new参数,一个是password_conf参数,内容和我输入的内容是一模一样的,所以大胆猜测这个网站是不经过加密直接使用GET方法传向服务器的,我们可以直接尝试修改url

image

image

3.问题及解决方案

4.学习感悟、思考等

通过本次 Web 综合实验,我对前端、后端以及常见 Web 攻击方式有了系统性的理解。首先在前端部分,我掌握了 HTML 表单的结构、GET 与 POST 的区别,并利用 JavaScript 实现了对用户名和密码的简单校验,也通过回显功能体会到 DOM 操作的灵活性。同时,在尝试注入简单 HTML 与脚本代码时,更直观地认识到了 XSS 漏洞产生的根本原因。在后端部分,我完成了 MySQL 的安装、建库与建表,并通过 PHP 编写了用户登录认证程序,理解了 Web 后端与数据库交互的基本流程。随后,通过构造最简单的 SQL 注入语句,我深刻体会到不安全的字符串拼接对系统造成的危害。最后,使用 DVWA 进一步实践 SQL 注入、XSS、CSRF 等漏洞,使我对 Web 安全攻击方式、利用流程以及防护思路有了更加全面的认识。本次实验让我对 Web 安全的重要性有了更深刻的感触,也提升了实际动手能力。

http://www.rkmt.cn/news/76203.html

相关文章:

  • 2025.12.7——1蓝
  • 虚拟机设置网络适配器为桥接模式,并且设置固定ip
  • 北京上门收字画机构推荐榜单
  • 某机构推出AI模型深度定制服务,重塑品牌专属生成式AI
  • Nano-vLLM-Ascend
  • ES2T 34托盘相关报警
  • 20251207 之所思 - 人生如梦
  • 不同深度学习框架中实现人工神经元基本计算单元的模块对比
  • 百度之星 2025 游记
  • 一分钟教你限制腾讯游戏ACE扫盘:告别硬盘损耗与游戏卡顿的完整指
  • 一文读懂激活函数
  • 【Linux篇】信号从哪来?到哪去?—— Linux信号的产生方式与保存机制 - 实践
  • Qt Thread and Worker
  • 2025成都最新旧房装修改造公司 TOP5 评测!金牛等十区装修品牌行业数据市场口碑及选择指南,环保整装 + 品质施工权威榜单发布,匠心赋能焕新理想居家环境
  • 2025最新成都二手房装修公司top5推荐!成都优质家装品牌权威榜单发布,环保健康与品质工艺双保障助力理想家居焕新
  • 【3FS】条带化
  • AI规范编程 - specify-Kit
  • Oracle数据库性能诊断与SQL优化实战指南
  • 56
  • YII框架的三条经典利用链的探究
  • 如何使用QFontDatabase在Qt应用程序中嵌入字体
  • 贪心 [CSP-S 2025] 社团招新
  • 12月7日总结 - 作业----
  • pdf图片处理
  • 2025年大众帕萨特更换轮胎推荐:玲珑、米其林、马牌哪个是全面优选?
  • 《场景化落地:用 Linux 共享内存解决进程间高效数据传输障碍(终篇)》
  • Python 潮流周刊#130:Django 6.0 发布了
  • zebra zt610
  • 基于深度学习的苹果病害检测系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
  • 代码随想录Day30_贪心4