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

20232419 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.实验过程

2.1html相关

在Kali执行sudo systemctl start apache2完成启动,sudo systemctl status apache2验证运行状态,可见成功启动。
image
在自带的火狐浏览器输入localhost,可见也正常运行。
image
用命令sudo vim /var/www/html/20232419.html创建编辑网页,并输入以下代码

点击查看代码
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>登录表单</title>
</head>
<body><div id="welcomeMessage"></div><h2>用户登录(带JS验证)</h2><form name="myForm" action="" method="get" onsubmit="return validateForm()">用户名: <input type="text" name="username" placeholder="请输入用户名"><br><br>密码: <input type="password" name="password" placeholder="请输入密码"><br><br><input type="submit" value="登录(GET)"></form><h2>用户登录(POST 方法)</h2><form action="20232422_auth.php" method="post">用户名: <input type="text" name="username" placeholder="请输入用户名"><br><br>密码: <input type="password" name="password" placeholder="请输入密码"><br><br><input type="submit" value="登录(POST)"></form><script>function validateForm() {var username = document.forms["myForm"]["username"].value;var password = document.forms["myForm"]["password"].value;if (username === "") {alert("用户名不能为空!");return false;}if (password === "") {alert("密码不能为空!");return false;}if (password.length < 6) {alert("密码长度不能少于6位!");return false;}return true;}window.onload = function() {const urlParams = new URLSearchParams(window.location.search);const username = urlParams.get('username');if (username) {document.getElementById("welcomeMessage").innerHTML = "欢迎回来," + username + "!";}};</script>
</body>
</html>
在浏览器输入var/www/html/20232419.html登陆可见如下页面:

image

2.2Web前端JavaScript开发

2.2.1开发

加入JavaScript代码,设定验证的规则:用户名不能输入为空、密码长度不能小于6位
image
image
成功执行代码
image
正常输入也行

2.2.2HTML/JavaScript注入攻击尝试

image
用户名输入框输入<h1>li</h1>,提交后页面回显大号字体用户名,注入成功

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

2.3.1MariaDB安装与启动

命令sudo apt install mariadb-server -y安装MariaDB,sudo systemctl start mariadb启动服务,sudo systemctl enable mariadb设置开机自启,systemctl status mariadb,确认服务处于运行状态
image

2.3.2建立数据库基础结构

命令sudo mysql -u root打开数据库,命令ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('wgws1966');为用户root设置密码;接着CREATE DATABASE IF NOT EXISTS my_db;创建my_db数据库,SELECT DATABASE();查看当前选中的数据库,但未切换库,返回NULL;CREATE USER 'llh'@'localhost' IDENTIFIED BY 'wgws1966';创建用户llh,密码为wgws1966,并且用GRANT ALL PRIVILEGES ON my_db.* TO 'llh'@'localhost';赋予用户llh的my_db数据库的所有权限。
image

FLUSH PRIVILEGES;,刷新权限配置,使授权立即生效;SHOW GRANTS FOR 'llh'@'localhost';,查看webuser的权限列表,确认对websec_db的权限已正确授予;USE my_db;,切换到websec_db数据库;CREATE TABLE IF NOT EXISTS users (...),在websec_db中创建users表,定义id(自增主键)、username(唯一非空)、password(非空)、email(可选)的字段结构;DESCRIBE users;,查看users表的字段类型、约束等结构信息,确认表创建符合预期。。
image

INSERT INTO users (username, password, email) -> VALUES -> ('admin','admin123','admin@123.com'), -> ('lilinhong19','lilin113','lilin19@123.com');插入2条测试用户数据(包含admin、longhaoran、test三个账号),执行结果提示 “2 rows affected”,说明数据无重复、无警告,成功插入;用SELECT * FROM users;查询users表的全部记录,结果显示2条完整的用户信息(含id、username、password、email字段),确认数据插入正确且完整。
image

2.4Web后端PHP用户认证开发

2.4.1相关安装

sudo apt install php libapache2-mod-php php-mysql -y安装PHP及MySQL扩展组件,sudo systemctl restart apache2重启Apache,使PHP扩展配置生效。
image

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

创建20232419_db_config.php,写入数据库连接信息(主机、用户名、密码、库名);将数据库配置文件的权限设置为 “所有者可读可写、其他用户只读”(权限 644),既确保 Apache 服务能正常读取连接配置,又限制非所有者的修改权限,提升文件安全性;创建20232419_auth.php,接收表单提交的用户名/密码,拼接SQL语句查询users表,返回登录成功/失败提示;并设置权限。
image
两个文件代码分别如下:

点击查看代码
<?php
$servername = "localhost";
$dbUsername = "llh";
$dbPassword = "wgws1966";
$dbName = "my_db";$conn = new mysqli($servername, $dbUsername, $dbPassword, $dbName);
if ($conn->connect_error) {die("MariaDB连接失败: " . $conn->connect_error);
}
$conn->set_charset("utf8");
?>
点击查看代码
<?php
require_once "20232419_db_config.php";if ($_SERVER["REQUEST_METHOD"] !== "POST") {die("非法访问!仅允许POST方法提交。");
}$username = trim($_POST["username"]);
$password = trim($_POST["password"]);if (empty($username) || empty($password)) {die("用户名或密码不能为空!");
}$sql = "SELECT id, username, email FROM users WHERE username = '$username' AND password = '$password'";
$result = $conn->query($sql);if ($result->num_rows > 0) {$user = $result->fetch_assoc();echo "<h1 style='color: green; text-align: center; margin-top: 100px;'>";echo "登录成功!欢迎你:" . $user["username"] . "!<br>";echo "你的邮箱:" . $user["email"];echo "</h1>";
} else {echo "<h1 style='color: red; text-align: center; margin-top: 100px;'>";echo "登录失败!用户名或密码错误。";echo "</h1>";echo "<p style='text-align: center;'>执行的SQL查询:" . $sql . "</p>";
}$conn->close();
?>

错误方式登录如下
image

错误的用户名以及密码结果如下
image
正确的如下
image

2.5SQL 注入与XSS攻击测试

2.5.1 SQL注入测试

注入操作:在POST表单用户名输入框输入llh' OR '1'='1,密码随便写(但要满足之前设置的不小于6位),可见成功绕过用户认证登录系统,验证SQL注入漏洞。
image

2.5.2 XSS攻击测试

存储型
通过MariaDB向users表插入含<script>alert("存储型XSS:李林鸿")</script>的用户名,成功登录
image
image

2.6DVWA平台安装与漏洞测试

2.6.1 DVWA平台部署

sudo git clone https://github.com/digininja/DVWA.git命令克隆,sudo apt install git php-gd php-mbstring php-xml php-curl -y安装 DVWA 运行所需的工具(git)及 PHP 扩展(gd、mbstring 等,用于支持图片处理、字符串操作等功能);系统自动下载并完成安装,确保 DVWA 的依赖环境配置完整。(太长了)
image

编辑config.inc.php,配置数据库连接信息(用户llh、密码wgws1966、库名my_db),设置目录权限为www-data。
image

image
访问http://192.168.175.129/DVWA/创建数据库,使用默认账号admin/password登录成功。
image
image
image

2.6.2典型漏洞复现

SQL Injection:点击DVWA Security,设置安全级别为Low。
image
输入1' OR 1=1 --,卡在这了,但是都设置好了,不知道为什么会这样
image
XSS (Reflected):输入<script>alert("DVWA反射型XSS:20232419")</script>,触发弹窗
image
CSRF:将密码均输入123456并点击change,地址栏出现http://192.168.175.129/DVWA/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
之后打开新的页面粘贴此地址进入地址栏,可以发现不需要填密码,直接访问这个 URL 就完成了密码修改。
image

3问题以及解决方案

4学习感悟

这次试验好麻烦,但让我明白了比如注入攻击等方法模式,并且我认为如果严加检查用户输入在一定程度上会减少这些攻击的成功的可能性。

http://www.jsqmd.com/news/65742/

相关文章:

  • 某中心语音AI前沿技术在SLT会议的研究突破
  • 性能jmeter常用注意事项
  • 2025最新电动车锂电池品牌/厂家TOP5评测!技术创新+安全效能权威榜单发布,赋能新能源出行生态升级
  • 12 ORM 处理表关联
  • Rabbit
  • White Album
  • 102302149赖翊煊数据采集与融合技术第四次作业
  • 第四周作业
  • Homework
  • 案例库--工抵协议系承包人主张优先受偿权的合法方式
  • 深入解析:【Rust 探索之旅】Rust 库开发实战教程:从零构建高性能 HTTP 客户端库
  • 251207周天,今天是周天
  • 完整教程:和AI用TDD结对编程:1天开发一个完整的 Python 库
  • 如何保证 RocketMQ 消息不丢失
  • 排列组合
  • 2025 最新西双版纳旅游服务商TOP5推荐!地接社/旅行社五大优质品牌,资源实力 + 服务口碑权威榜单发布,专业赋能构筑美好旅行体验
  • 12.4 maven简介
  • vs2026远程调试linux
  • 深入理解 RocketMQ 核心机制
  • DMY 周作业 47 简要题解
  • 2025最新西双版纳旅行社TOP5推荐!资源整合+服务升级权威榜单发布,品质赋能重构雨林旅游体验
  • 豆包手机助手遭围剿,网友玩梗“微信OS”若成真,会长啥样?
  • 在Android中动态加载类
  • Flutter for HarmonyOS 创建指南(一):环境搭建与项目创建
  • 2025最新西双版纳地接社TOP5评测!品牌实力+服务口碑权威榜单发布,专业赋能品质旅行体验
  • 详细介绍:[特殊字符] 微前端部署实战:Nginx 配置 HTTPS 与 CORS 跨域解决方案(示例版)
  • Git预提交钩子实现代码美化自动化
  • 五、Java数组
  • 20231427田泽航第十二周预习报告
  • 122_尚硅谷_init函数