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

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

1.实验内容

1)编写一个含有表单的HTML
2)编写JavaScript并尝试注入攻击
3)正常安装、启动MySQL,建库、创建用户、修改密码、建表
4)编写PHP网页,连接数据库,进行用户认证
5)最简单的SQL注入,XSS攻击测试
6)安装DVWA或WebGoat平台,并完成SQL注入、XSS、CSRF攻击。

2.实验过程

2.1 Web前端HTML

HTML:网页的基础结构语言,用来定义网页内容(文字、输入框等)和布局,是表单等组件的载体。
表单:HTML中的数据收集组件(由

标签包裹),包含输入框、按钮等元素,用于获取用户输入并提交给服务器。
GET方法:表单数据提交方式之一,数据拼接在URL中传递,适合搜索之类的简单、非敏感数据,传输量有限。
POST方法:表单数据提交方式之一,数据在请求体中隐藏传递,适合登录密码之类的敏感数据或大量数据,更安全。

kali虚拟机上输入命令systemctl start apache2启动Apache,再输入systemctl status apache2.service确认Apache已经启动。

屏幕截图 2025-12-03 105747

输入cd /var/www/html进入kali的/var/www/html目录下,再输入指令vi 20232420lzy_get.htmlvi 20232420lzy_post.html创建两个简单的提交表单信息的html文件,分别采用GET方法和POST方法。

20232420lzy_get.html:

<!DOCTYPE html>
<html>
<head><title>GET表单提交</title>
</head>
<body><form method="get" action="">用户名: <input type="text" name="username" required><br>密码: <input type="password" name="password" required><br><input type="submit" value="提交"></form>
</body>
</html>

20232420lzy_get.html实际效果:

图片

输入信息提交,发现GET方法下数据会在URL中显示。

图片

20232420lzy_post.html:

<!DOCTYPE html>
<html>
<head><title>POST表单提交</title>
</head>
<body><form method="post" action="">用户名: <input type="text" name="username" required><br>密码: <input type="password" name="password" required><br><input type="submit" value="提交"></form>
</body>
</html>

20232420lzy_post.html实际效果:

图片

输入信息提交,发现POST方法下数据不会在URL中显示。

图片

2.2 Web前端javascipt

JavaScript:网页的动态脚本语言,用于给HTML页面添加如按钮点击响应、表单验证、数据计算等交互功能。
DOM(文档对象模型):将HTML文档抽象成树形结构的接口,让JavaScript能访问、修改网页中的元素(如修改文字、隐藏或显示内容、添加样式)。

输入指令vi 20232420lzy_2.2.html,在20232420lzy_2.2.html中修改2.1中采用GET方法的表单,添加验证用户名、密码的代码,在用户点击登陆按钮后回显“欢迎+输入的用户名”。

<!DOCTYPE html>
<html>
<head><title>GET表单提交</title>
</head>
<body><form method="get" action="" onsubmit="return validateForm()">用户名: <input type="text" name="username" id="username" required><br>密码: <input type="password" name="password" id="password" required><br><input type="submit" value="登录"><div id="greeting"></div></form><script>function validateForm() {// 获取输入值const username = document.getElementById('username').value.trim();const password = document.getElementById('password').value;const greetingDiv = document.getElementById('greeting');// 验证规则:用户名不为空,密码长度至少6位if (password.length < 6) {alert('密码长度不能少于6位');return false; // 阻止表单提交}// 验证通过,回显欢迎信息greetingDiv.innerHTML = `欢迎${username}`;// 阻止默认表单提交return false;}</script>
</body>
</html>

输入用户名、密码并登录,能正确回显“欢迎+输入的用户名”。

图片

输入密码小于6位会报错。

图片

尝试利用回显用户名注入HTML,在用户名一栏输入<span style="color:red;">HTML injection succeed.</span>。回显中输出红色的“HTML injection succeed.”,表明注入HTML成功。
图片

尝试利用回显用户名注入JavaScript,在用户名一栏输入<img src=x onerror="document.getElementById('greeting').innerText='JavaScript injection succeed.'; document.getElementById('greeting').style.color='red'">

显示红色的“JavaScript injection succeed.”,表明注入JavaScript成功。代码会尝试加载图片x,但x并不存在,会触发onerror事件,事件里藏了注入的JS代码,浏览器解析标签时会执行这段代码,最终替换页面文字,完成注入。

图片

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

输入命令systemctl start mysql启动MySQL,输入命令systemctl status mysql确认MySQL已经启动。

图片

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

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

图片

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

输入命令sudo apt-get install php下载php。

图片

输入命令vi 20232420lzy.php,创建php文件。
输入以下代码:

<?php
$host = 'localhost';
$dbname = '20232420DataBase'; 
$user = '20232420'; 
$password = 'liuzhenyu123';//连接数据库
$conn = new mysqli($host, $user, $password, $dbname);//检查连接是否成功
if ($conn->connect_error) {die("数据库连接失败: " . $conn->connect_error);
}//获取GET数据
$username = $_GET['username'];
$password = $_GET['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();//关闭数据库连接
$conn->close();
?>

vi 20232420lzy_2.4.html,对HTML表单作出修改,将action属性改为PHP文件路径,保存在新html文件20232420lzy_2.4.html:

<!DOCTYPE html>
<html>
<head><title>GET表单提交</title>
</head>
<body><form method="get" action="20232420lzy.php" onsubmit="return validateForm()">用户名: <input type="text" name="username" id="username" required><br>密码: <input type="password" name="password" id="password" required><br><input type="submit" value="登录"><div id="greeting"></div></form><script>function validateForm() {const username = document.getElementById('username').value.trim();const password = document.getElementById('password').value;const greetingDiv = document.getElementById('greeting');if (password.length < 6) {alert('密码长度不能少于6位');return false; }   }</script>
</body>
</html>

正确输入数据库中的用户名和密码时:

图片

用户名或密码输入错误时:

图片

2.5 最简单的SQL注入,XSS攻击测试

随意输入用户名,密码中输入' OR '1'='1,1=1恒为真,成功登录,实现简单的SQL注入。

图片

在用户名中输入<script>alert("XSS attack succeed.");</script>,密码中输入' OR '1'='1,网页弹出窗口“XSS attack succeed.”,实现简单的XSS攻击。浏览器解析innerHTML时,会把输入的< script>标签当成合法的JS代码执行,触发alert弹窗,XSS攻击成功。

图片

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

sudo apt install dvwa下载dvwa。
dvwa-start启动dvwa。
默认用户名和密码是admin和password。
推荐先在DVWA Security中将难度改为Low。

2.6.1 完成SQL注入

输入11+2都是一样的admin,应该是字符注入型。

图片

图片

输入1' union select password,user from users -- 就能获得所有的用户名和加密存储的密码。

图片

2.6.2 完成XSS攻击

(1)XSS(DOM)

先直接点select English,发现URL处有“?default=English”。

图片

将URL处的“English”替换为<script>alert("xss attack from 20232420.")</script>,能看到xss攻击成功。

图片

(2)XSS(Reflected)

输入<script>alert("xss attack from 20232420.(Reflected)")</script>,能看到xss攻击成功。

图片

图片

(3)XSS(Stored)
Name处随意输入,Message处输入<script>alert("20232420(Stored)")</script>(Message有长度限制),能看到xss攻击成功。

图片

图片

2.6.3 完成CSRF攻击

修改密码为20232420,可以看到URL中会显示,是GET方法。

图片

随后在New password中输入liuzhenyu123,在Confirm new password中输入20232420,会提示Passwords did not match.,同样显示在URL中。

图片

直接在URL中作修改,将后面的20232420改为liuzhenyu123,可以看到密码修改成功。

图片

3.问题及解决方案

问题1:HTML文件里的中文在kali的浏览器里打开时会变成乱码。

图片

问题1解决方案:询问AI得知,原因在于Apache服务器未明确告知浏览器用UTF-8解析,vim /etc/apache2/conf-available/charset.conf打开 Apache的字符集配置文件,将#AddDefaultCharset UTF-8开头的注释“#”去掉,输入命令systemctl restart apache2重启Apache,再在浏览器中按Ctrl+F5刷新后就能正常显示中文了。

图片

屏幕截图 2025-12-04 205809

图片

图片

4.学习感悟、思考等

本次实验简单实现了web页面的前后端,同时进行了简单的web攻击实践。
页面代码的编写与攻击使我深刻体会到Web应用的安全漏洞平等地存在于开发的全过程,前端简单的输入回显、后端基础的数据库查询,若缺乏安全处理就很容易引发漏洞。
利用平台学习攻击,我既掌握了攻击手段,也学会反向思考如何在开发时避免类似的问题。这些安全漏洞不是留到最后才处理的,而是在开发过程中就要随时留意,一开始就要避免写出容易出问题的代码。

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

相关文章:

  • BZOJ1278 向量 vector
  • 14.jdbc第三步PreparedStatement防sql注入
  • java
  • 详细介绍:【STL源码剖析】从源码看 heap:元素的 “下沉” 与 “上浮”
  • 大信息环境搭建从零开始(十四)CentOS 7 系统更新源更换详解:阿里云镜像源配置完整指南
  • 大信息环境搭建从零开始(十四)CentOS 7 系统更新源更换详解:阿里云镜像源配置完整指南
  • 动态规划
  • 2025年度安全狗狗驱虫药品牌排行榜:专业评测助力科学养宠
  • 2025留学生求职机构哪家强?5万offer全周期不限次服务+在职导师
  • 【Java】ArrayList
  • 实用指南:Vue编程式路由导航
  • Ubuntu 22.04 与 24.04 常用操作命令
  • 【Java】String
  • 拒绝智商税!2025最新学习机榜单发布,十大热门机型横向对比,一看就懂
  • 2025年12月留学生求职陪跑服务推荐榜:哪家更贴合专业背景定制
  • 2025年留学生求职机构排名推荐指南 途鸽求职榜首领跑赛道
  • 网络安全的守护与利器:r/netsec 月度技术讨论与工具分享
  • 重组蛋白表达纯化技术流程解析:从基因到蛋白的精准制备
  • 拒绝“中间商赚差价”!2025南京静音舱源头工厂综合实力排名发布:声博士Soundbox断层领先
  • 软件测试的分类1(含黑盒测试、白盒测试、Alpha测试、Beta测试、灰盒测试)
  • 全国中医师承选哪个机构靠谱?——在对比多家机构后最终选择了阿虎医考师承
  • 全国中医师承选哪个机构靠谱?——理性对比后选择了阿虎医考师承
  • 小白必看!CAD 超详细安装教程
  • 深入解析:探索JavaScript前端开发:开启交互之门的神奇钥匙(二)
  • 2025.12.5——2蓝
  • Node-RED:5分钟快速上手:安装与环境安装
  • 个人电脑本地私有知识库推荐:访答软件全解析
  • Java中的反射
  • 缓存击穿,缓存穿透,缓存雪崩的原因和解决方案(或者说使用缓存的过程中有没有遇到什么问题,怎么应对的)
  • 12月5日总结 - 作业----