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