首页 > 其他分享 >20222401 2024-2025-2 《网络与系统攻防技术》实验八实验报告

20222401 2024-2025-2 《网络与系统攻防技术》实验八实验报告

时间:2024-12-09 21:43:22浏览次数:7  
标签:username Web 密码 数据库 2024 2025 20222401 password

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.1Web前端HTML

2.1.1安装启动Apache

命令systemctl start apache2
image
在浏览器中输入127.0.0.1启动Apache的界面
image

2 1.2编写含有表单的HTML

找到这个路径下的/var/www/html文件夹,新建一个文件存放代码。
具体代码如下
image

点击查看代码
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"></head>
 
<body>
    <h1>Login</h1>
    <form  method="post">
        <font>账号:</font>
        <input type="text" name="username" id="username"><br>
        <font>密码:</font>
        <input type="password" name="password" id="password"><br>
        <button onclick="login()">login</button>
    </form>
</body>
</html>
然后在浏览器打开网页

image

2.2Web前端javascipt

2.2.1实现验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”

在刚才的代码中加入逻辑验证功能。

点击查看代码
<script>
	function login() {
	    const username = document.getElementById("username").value;
	    const password = document.getElementById("password").value;

	    // 检查账号和密码是否为空
	    if (username === "" || password === "") {
	    alert("Username or password cannot be null!");
	    return;
	    }

	    // 检查密码是否正确
	    if (password !== "password") {
	    alert("Your password is wrong!");
	    return;
	    }

	    // 显示欢迎信息
	    document.body.innerHTML = "Welcome, " + username + "!";
      }
</script>

image
image
我们看到实现了我们预期的功能。

2.2.2注入攻击

HTML攻击<h1>20222401</h1>其实是构造标题
JS攻击<script>alert("20222401")</script>这个是JS的提示输出
image
image

2.3Web后端

2.3.1安装并启动MySQL

命令systemctl start mysql systemctl status mysql
image

service mysql start
mysql_secure_installation
image
加下来输入(就是登录数据库)
mysql -u root -p
use mysql
show databases;
image

2.3.2创建用户、数据库、表

首先创建用户,允许该用户从任何主机连接到数据库,并使用密码password进行身份验证。
create user '20222401'@'%' IDENTIFIED BY 'password';
创建数据库
create database 20222401yinzixin;
使用该数据库
use 20222401yinzixin
创建一个名为user的表,该表包含两个字段:username和password
create table user (username VARCHAR(30),password VARCHAR(20));
插入数据
insert into user values('yinzixin','20222401');
image
然后需要允许用户从任何主机连接到数据库,并对名为2022201yinzixin的数据库拥有所有权限,理论上是不安全的,但是为了方便,这里就给予全部权限。
GRANT ALL PRIVILEGES ON 20222401yinzixin.* TO '20222401'@'%';
FLUSH PRIVILEGES;
image

2.4Web后端PHP

2.4.1编写PHP网页

/var/www/html/2406.php路径下创建一个PHP文件,代码如下:

点击查看代码
<?php  
  
// 设置数据库服务器的名称  
$servername = "localhost";  
  
// 设置连接数据库的用户名  
$username = "root";  
  
// 设置连接数据库的密码  
$password = "kali";  
  
// 设置要连接的数据库名  
$dbname = "20222401yinzixin";  
 
// 使用mysqli创建一个新的数据库连接  
$conn = new mysqli($servername, $username, $password, $dbname);  
  
// 检查连接是否成功  
if ($conn->connect_error) {  
    // 如果连接失败,输出错误信息并停止脚本执行  
    die("连接数据库失败: " . $conn->connect_error);  
}  
  
// 使用null合并运算符从POST请求中获取用户名,如果POST请求中没有该值,则将其设置为空字符串  
$username = $_POST['username'] ?? '';  
  
// 使用null合并运算符从POST请求中获取密码,如果POST请求中没有该值,则将其设置为空字符串  
$password = $_POST['password'] ?? '';  
  
// 创建一个SQL查询语句,用于从user表中查找与给定用户名和密码匹配的用户  
$sql = "SELECT * FROM user WHERE username = '$username' AND password = '$password'";  
  
// 执行SQL查询并获取结果  
$result = $conn->query($sql);  
  
// 检查查询结果中的行数是否大于0,即是否找到了匹配的用户  
if ($result->num_rows > 0) {  
    // 如果找到了匹配的用户,输出登录成功的消息  
    echo " 欢迎 ! 登陆成功!";  
} else {  
    // 如果没有找到匹配的用户,输出用户名或密码错误的消息  
    echo "用户名或密码错误!";  
}  
  
// 关闭数据库连接  
$conn->close();  
?>

然后需要改一下前端代码,实现功能匹配

点击查看代码
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>20222401</title>
    <script>
        function login() {
            const usrname = document.getElementById("username").value;
            const password = document.getElementById("password").value;
        }
    </script>
</head>

<body>
    <h1>Login</h1>
    <form name="20222401" action="20222401.php" method="post">
        <font>账号:</font><input type="text" name="username" id="username"><br>
        <font>密码:</font><input type="password" name="password" id="password"><br>
        <button onclick="login()">login</button>
    </form>
</body>

</html>


然后就可以了
image

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

2.5.1SQL注入

输入admin' or 1=1 #
image

2.5.2XSS攻击

与JS攻击一致。

2.6安装DVWA平台

2.6.1SQL注入

先打开服务
image
image
进入SQL注入页面后首先输入1
image
再输入1 and 1=2
image
输入1'就会跳转
image

2.6.2xss攻击

首先提交正常表单,观察网址。
image
再URL处的English替换为<script>alert(20222401)</script>
image

2.6.3CSRF攻击

输入和重复密码123456
image
Change=Change#是核心,只需要修改这里就可以了。
更改为http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=20222401&password_conf=1&Change=Change#
image

3.问题及解决方案

  • 问题1:PHP后端跳转失败
  • 问题1解决方案:修改数据库root密码,kali好像有BUG,不能使用原密码,需要设置一个新的。

4.学习感悟、思考等

在尝试注入攻击时,我通过输入特殊字符来试图破坏页面的正常显示。例如,输入<script>alert('xss');</script>可以触发JavaScript弹窗,显示XSS攻击的效果。通过编写PHP网页,我学会了如何连接MySQL数据库,并进行用户认证。这包括接收用户输入的数据,查询数据库以验证用户身份,并根据查询结果返回相应的页面。通过本次实验,我深刻认识到Web安全的重要性。无论是前端还是后端,都需要严格的安全措施来防止各种攻击。

参考资料

标签:username,Web,密码,数据库,2024,2025,20222401,password
From: https://www.cnblogs.com/Orchidaceae/p/18592641

相关文章

  • 2024.12.9~2024.12.14
    2024.12.9早上有点小困,多睡了半个小时,上午把矩阵快速幂写完了,感觉效率有点小低然后中午去外面屯了一点食物下午开始写CDQ分治,迅速的切掉了一道题,然后下一道题就开始了漫长的调题,然后一直调调不过,情绪有点崩溃了晚上准备出去打乒乓球放松一下,结果一直赢,把一直霸台的老师都给打......
  • PAT 2024年春季 甲级 A-3 Degree of Skewness(二叉树的构建)
     给出后序和中序遍历序列,求出只有左子树和只有右子树的结点之差1#include<bits/stdc++.h>2usingnamespacestd;3intn;4intnl=0,nr=0;5structnode{6intdata,lchild=-1,rchild=-1;7};8vector<node>nodes(1005);9vector<int>in_o......
  • 2025计算机毕设选题推荐【Java方向】【带创新点】
    ✅博主介绍:CSDN毕设辅导博主、Java领域优质创作者✅技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、>Python、爬虫、数据可视化、小程序、安卓app、大数据、机器学习等设计与开发。✅主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码......
  • 敏捷开发+PMP考试:2024年你必须掌握的10个关键技巧!
    一、PMP考试关键技巧1.答题技巧按顺序作答,遇难题跳过,合理分配时间。在PMP考试中,题目数量较多,答题时间相对紧张。因此,考生应按照题目顺序进行作答,遇到难题时不要纠结,做好标记暂时跳过,待完成其他题目后再回头解决,以确保整体答题进度不受影响。可只看中文,根据情况选择......
  • 20222422 2024-2025-1 《网络与系统攻防技术》实验八实验报告
    一、实验内容(一)总结本周学习内容本周主要学习了web安全,首先是从前端技术(包括HTML、JavaScript、CSS以及Web前端框架)和后端技术(主要使用C、Java、PHP、Python、C#等语言)引入,随后学习了:SQL注入攻击(通过构造特殊的SQL语句,注入到Web应用的输入字段中,从而绕过正常的身份验证和数据......
  • Mitel MiCollab企业协作平台存在任意文件读取漏洞(CVE-2024-41713)
    免责声明:本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在使用本......
  • MitelMiCollab 身份绕过导致任意文件读取漏洞复现(CVE-2024-41713)
    0x01产品描述:        MitelMiCollab是一个企业协作平台,它将各种通信工具整合到一个应用程序中,提供语音和视频通话、消息传递、状态信息、音频会议、移动支持和团队协作功能。0x02漏洞描述:        MitelMiCollab的NuPoint统一消息(NPM)组件中存在身......
  • 2025 年你应该告别的 5 个 JavaScript 库
    2025年你应该告别的5个JavaScript库来源:OSCHINA编辑: 白开水不加糖2024-12-0915:03:58 2AI总结干不动了伙计们,老板说每天导它个5000App下载TheNewStack 发文梳理了他们认为在2025年可能过时的5个JavaScript库,分别是:jQuery、Moment.js、Lod......
  • 2024数证杯决赛团体
    请根据计算机以及内存检材,回答以下问题:(17道题,共54.0分)1.计算机中曾挂载的bitlocker加密的分区的驱动器号为?(答案格式:大写字母,如C)(2.0分)先找到对应的虚拟磁盘仿真直接挂载就能看到,还有一个挂载起来是X盘结果为V2.分析计算机和内存检材,计算机中的Bitlocker加密分区的......
  • Python-geopandas-读取MapInfor-20241209
    #读取数据,需要制定坐标格式shapefile_path=r'd:\Mapinfor\map\赣江新区新增图层.TAB'mapinfo_gdp=gpd.read_file(shapefile_path,driver="MapinfoFile")#先设置一个坐标系,否则会报提示性错误mapinfo_gdp=mapinfo_gdp.to_crs(epsg=4326)#校验坐标系,转换到目标投影......