20222310 2024-2025-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攻击

二、实验过程

1.Web前端HTML

①正常安装、启动Apache

kali终端输入

netstat -tupln | grep 80  //查找正在监听TCP或UDP端口80的进程
systemctl start apache2   //启动Apache HTTP服务器
netstat -aptn             //显示系统上所有的TCP连接和监听套接字

如图

用浏览器访问> http://127.0.0.1,如果出现下面的结果,则表示Apache启动成功

②编写一个含有表单的HTML

kali终端输入vi /var/www/html/20222310.html

编辑此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>

保存后,打开服务器访问> http://127.0.0.1/20222310.html

制作成功

2.Web前端javascipt

①编写JavaScript验证用户名、密码的规则,在用户点击登陆按钮后回显“欢迎+输入的用户名”

kali再次输入vi /var/www/html/20222310.html,编辑刚刚的html文件,加入代码,如图

<script>
function login(){
const usrname=document.getElementById("username").value;
const password=document.getElementById("password").value;
if (username === "" || password === "") {  
    alert(" username or password can not be null!");  
    return;  
}  
 
 
else if (password !== "20222310") {   
    alert(" Your password is wrong!");  
    return;   
}
 
else { 
document.write("Welcome! "+ usrname) 
}
}
</script>

②浏览器打开编辑后的网页

再次用浏览器访问> http://127.0.0.1/20222310.html

若输入的账号或者密码为空,会提示 username or password can not be null!

若输入的密码错误,会提示 Your password is wrong!

若输入的密码正确,登陆成功,会提示 Welcome!zhengxiancheng

③尝试注入攻击

注入HTML,在网页的账号的文本框中输入

zhengxiancheng

,密码不变

登陆成功的界面的zhengxiancheng会变成一级标题的字体

注入JavaScript,在网页的账号的文本框中输入,密码不变

登陆时会弹出zhengxiancheng的提示框

3.Web后端:MySQL基础

①安装并启动MySQL

kali终端输入systemctl start mysql,打开MySQL服务,再输入systemctl status mysql,可以查看MySQL当前的状态

再输入

service mysql start          //启动MySQL服务
mysql_secure_installation    //MySQL安全安装脚本
mysql -u root -p             //登录到MySQL数据库,密码就是root的密码
use mysql                    //切换到MySQL数据库
show databases;              //列出MySQL服务器上的所有数据库

②创建用户

输入create user 'zhengxiancheng'@'%' IDENTIFIED BY '20222310';创建一个名为zhengxiancheng的用户,允许该用户从任何主机连接到数据库,并使用密码20222310进行身份验证

③创建数据库

输入create database 20222310zhengxiancheng;创建数据库,再输入use 20222310zhengxiancheng切换到该数据库

④建表

输入create table user (username VARCHAR(30),password VARCHAR(20));创建一个名为user的表,该表包含两个字段:username和password

输入insert into user values('zhengxiancheng','20222310');插入username为zhengxiancheng,password为20222310的一组数据

输入select * from user;查看表的内容

⑤授权

输入

GRANT ALL PRIVILEGES ON 20222310zhengxiancheng.* TO 'zhengxiancheng'@'%';   //授予用户所有权限 
FLUSH PRIVILEGES;                                                           //刷新权限

允许用户zhengxiancheng从任何主机连接到20222310zhengxiancheng数据库,并拥有该数据库的所有权限

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

①编写php网页

kali输入vi /var/www/html/20222310.php创建一个.php文件

代码具体如下

<?php  
  
// 设置数据库服务器的名称  
$servername = "localhost";  
  
// 设置连接数据库的用户名  
$username = "root";  
  
// 设置连接数据库的密码  
$password = "123456789";  
  
// 设置要连接的数据库名  
$dbname = "20222310zhengxiancheng";  
 
// 使用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();  
?>

②连接数据库

kali输入vi /var/www/html/20222310.html修改原来的html文件,将action指向20222310.php

③认证

用浏览器打开> http://127.0.0.1/20222310.html

若输入的用户名和密码正确(zhengxiancheng,20222310),登陆成功,提示欢迎!登陆成功!

否则,登陆失败,提示用户名或密码错误!

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

①SQL注入

用户名输入20222310' or 1=1 #,密码随便输入,1=1永真,而且后面的内容被 # 注释掉了,所以这个查询将返回user表中的所有记录,而不是仅返回username为20222310的记录,这样一来肯定能筛选出可以登陆的数据,因此登陆成功

②XSS攻击

用户名输入<script>alert("zhengxiancheng")</script>,密码随便输入,弹出提示框zhengxiancheng,攻击成功

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

①安装WebGoat平台

这个可以根据> https://blog.csdn.net/weixin_50012220/article/details/119209336?fromshare=blogdetail&sharetype=blogdetail&sharerId=119209336&sharerefer=PC&sharesource=&sharefrom=from_link 的教程来做

提示可以访问> http://localhost:8080/WebGoat/login 来使用WebGoat,kali浏览器打开该网页

注册账号

②SQL注入

左侧栏选择A3→SQL Injection(Intro)→9号

题目给定"SELECT * FROM user_data WHERE first_name = ‘John’ AND last_name = '" + lastName + “'”;要求能够显示所有的用户信息

常用的技巧是构造永真式,如'1'='1'

回到原题Smith'与last_name=后的'配对,'1'='1与+lastName+"后的'配对,形成SELECT * FROM user_data WHERE first_name = 'John' AND last_name = 'Smith' or '1'='1';的永真式,成功获取信息。

③XSS攻击

左侧栏选择A3→Cross Site Scripting→7号

这一页要求用alert()或者console.log()来试哪里有XSS。由于XSS最终是要浏览器渲染的,先按下Purchase,看看哪个输入是会回显的,发现是card number的内容

在card number输入<script>alert("zhengxiancheng66")</script>,攻击成功

④CSRF攻击

CSRF即跨站请求伪造,即通过伪造用户身份来向网站发出请求的一种攻击方式。

CSRF的主要原理为:用户访问了正常的网站A,生成Cookie,攻击者引诱用户访问恶意网站B,网站B携带用户的cookie向A网站发出请求,A将B当作是用户执行请求,攻击者在用户不知情的情况下冒充用户在A网站执行了操作。

左侧栏选择A10→Cross Site Request Forgeries→8号

在这一题中,查看 WebGoat 是否也容易受到登录 CSRF 攻击。保持此选项卡打开,然后在另一个选项卡中注册一个新用户名csrf-20222310

以新用户身份登录,这就是攻击者使用 CSRF 所做的事情。然后单击原始选项卡中的按钮,由于我以其他用户身份登录,攻击者会得知我单击了该按钮

攻击成功

三、问题及解决方案

问题1:安装MySQL安全脚本时不成功

解决方案:不使用教室网,换用其他无需认证的网络进行安装

四、学习感悟、思考等

通过这次实验,我不仅掌握了Web前端和后端的基本技能,提升了在HTML、JavaScript、PHP、MySQL等技术方面的实践能力,还学会了SQL注入,XSS,CSRF等攻击,深刻认识到了Web安全的重要性。知己知彼,百战不殆,只有深入了解了攻击原理和常见漏洞,才能提高编写安全代码的能力,更好地保护用户的隐私和数据安全。

这是最后一次网络攻防实验了,八次实验下来收获颇丰,还记得当时连安装一个能联网的kali虚拟机都费劲,天天都在为实验操作中出现各种各样的小差错,虚拟机配置中的问题而导致实验失败而烦恼,如今也算是结束了。网络攻防实验不但带给了我们网络安全技术的知识,也培养了我们做事踏踏实实,戒骄戒躁的心境,为我未来的学习和工作奠定了良好的基础。

posted on 2024-12-03 16:32  abe1fan  阅读(24)  评论(0编辑  收藏  举报

导航