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
在浏览器中输入127.0.0.1启动Apache的界面
2 1.2编写含有表单的HTML
找到这个路径下的/var/www/html文件夹,新建一个文件存放代码。
具体代码如下
点击查看代码
<!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>
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>
我们看到实现了我们预期的功能。
2.2.2注入攻击
HTML攻击<h1>20222401</h1>
其实是构造标题
JS攻击<script>alert("20222401")</script>
这个是JS的提示输出
2.3Web后端
2.3.1安装并启动MySQL
命令systemctl start mysql
systemctl status mysql
service mysql start
mysql_secure_installation
加下来输入(就是登录数据库)
mysql -u root -p
use mysql
show databases;
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');
然后需要允许用户从任何主机连接到数据库,并对名为2022201yinzixin的数据库拥有所有权限,理论上是不安全的,但是为了方便,这里就给予全部权限。
GRANT ALL PRIVILEGES ON 20222401yinzixin.* TO '20222401'@'%';
FLUSH PRIVILEGES;
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>
然后就可以了
2.5最简单的SQL注入,XSS攻击测试
2.5.1SQL注入
输入admin' or 1=1 #
2.5.2XSS攻击
与JS攻击一致。
2.6安装DVWA平台
2.6.1SQL注入
先打开服务
进入SQL注入页面后首先输入1
再输入1 and 1=2
输入1'就会跳转
2.6.2xss攻击
首先提交正常表单,观察网址。
再URL处的English替换为<script>alert(20222401)</script>
2.6.3CSRF攻击
输入和重复密码123456
Change=Change#是核心,只需要修改这里就可以了。
更改为http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=20222401&password_conf=1&Change=Change#
3.问题及解决方案
- 问题1:PHP后端跳转失败
- 问题1解决方案:修改数据库root密码,kali好像有BUG,不能使用原密码,需要设置一个新的。
4.学习感悟、思考等
在尝试注入攻击时,我通过输入特殊字符来试图破坏页面的正常显示。例如,输入<script>alert('xss');</script>
可以触发JavaScript弹窗,显示XSS攻击的效果。通过编写PHP网页,我学会了如何连接MySQL数据库,并进行用户认证。这包括接收用户输入的数据,查询数据库以验证用户身份,并根据查询结果返回相应的页面。通过本次实验,我深刻认识到Web安全的重要性。无论是前端还是后端,都需要严格的安全措施来防止各种攻击。