98
社区成员




(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)安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击。
(1)三大前端语言HTML、CSS、JavaScript
HTML (HyperText Markup Language)
CSS (Cascading Style Sheets)
JavaScript
这三种语言在前端开发中各自扮演着不同的角色,HTML负责构建网页的结构和内容,CSS负责网页的样式和布局,而JavaScript则负责网页的动态功能和交互性。
(2)GET、POST方法
1.GET 方法基本内容:
2.POST 方法基本内容:
3.GET与POST的主要区别:
(3)SQL注入攻击
SQL注入(SQL Injection)是一种常见的网络攻击技术,通过在应用程序的输入字段中插入或“注入”恶意SQL代码,攻击者可以执行未授权的数据库操作,包括读取、修改和删除数据。这种攻击方式能够破坏数据的完整性、泄露敏感信息甚至完全控制整个系统。
当Web应用程序不正确地构建其SQL查询时,就可能会受到SQL注入的攻击。例如,一个常见的错误做法是在拼接SQL语句时不使用参数化查询或适当的转义机制,而是直接使用用户的输入作为SQL的一部分。这样,攻击者就可以通过构造特殊的输入字符串来操纵SQL语句的执行。会造成 数据泄露、数据篡改、 系统瘫痪、提升权限等严重后果。
(4)XSS攻击
XSS攻击,全称跨站脚本攻击(Cross-Site Scripting),是一种网络安全攻击方式,攻击者通过在目标网站上注入恶意脚本,当用户浏览该网站时,恶意脚本会被执行,从而达到攻击者窃取用户数据、劫持用户会话、进行钓鱼攻击等目的。
定义与原理
攻击危害
攻击类型:
(5)CSRF攻击
CSRF攻击,全称跨站请求伪造(Cross-Site Request Forgery),是一种针对Web应用程序的安全威胁
定义与原理:
攻击类型:
攻击危害:
(6)DOM
DOM 是HTML和XML文档的编程接口。它提供了对文档的结构化表示,并定义了一种方式,使得程序(如JavaScript)可以访问和更新文档的内容、结构和样式。DOM 把文档映射为一个由节点(如元素节点、文本节点和属性节点)组成的树形结构。
JavaScript 通过DOM API(应用程序接口)来操作DOM。
1.安装并启动Apache
在kali终端输入如下命令:
netstat -tupln | grep 80 //查找正在监听TCP或UDP端口80的进程
systemctl start apache2 //启动Apache HTTP服务器
netstat -aptn //显示系统上所有的TCP连接和监听套接字
结果如下图:
在浏览器中访问网址 http://127.0.0.1/ ,发现Apache开启成功,如下图所示:
2.编写一个含有表单的HTML
在kali终端输入“ vi /var/www/html/20212407.html ”命令( /var/www/html/ 通常是Apache HTTP服务器在Linux系统中用于存放Web内容的默认目录),编辑创建一个登陆界面,代码具体如下:
<!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>
</html>
如下图所示:
3.浏览器打开编辑的网页
打开浏览器,访问网址 http://127.0.0.1/20212407.html
1.编写JavaScript验证用户名、密码的规则,在用户点击登陆按钮后回显“欢迎+输入的用户名”
<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 !== "20212407") {
alert(" Your username is wrong!");
return;
}
else {
document.write("Welcome! "+username)
}
}
</script>
具体如下图所示:
3.浏览器打开编辑的网页
打开浏览器,访问网址 http://127.0.0.1/20212407.html
若输入的账号或者密码为空:
若输入的密码错误:
输入密码正确,则登陆成功:
4.尝试注入攻击
注入HTML
在网页的账号的文本框中输入“
注入JavaScript
在网页的账号的文本框中输入“”进行JavaScript注入,密码不变,最后会出现“20212407”的提示框,如下图所示:
注入成功。
1.打开kali中安装并启动MySQL
kali有自带的数据库,在终端输入如下代码:
systemctl start mysql
systemctl status mysql
service mysql start
mysql_secure_installation
mysql -u root -p
use mysql
show databases;
2.创建用户
输入“create user 'linyuanyuan'@'%' IDENTIFIED BY '20212407';”命令创建一个名为'linyuanyuan'的用户,允许该用户从任何主机('%' 表示任何主机)连接到数据库,并使用密码 '20212407' 进行身份验证。具体如下图所示:
3.建库
输入“create database 20212407lyy;”命令创建数据库,具体如下图所示:
输入“use 20212407lyy”命令使用该数据库,具体如下图所示:
4.建表
输入“create table user (username VARCHAR(30),password VARCHAR(20));”命令创建一个名为user的表,该表包含两个字段:username和password。具体如下图所示:
使用mysql语言“insert into user values('linyuanyuan','20212407');”插入数据,插入操作成功后可以输入“select * from user”命令查看数据表中的内容,具体如下图所示:
5.授权
输入如下命令,允许用户'linyuanyuan'从任何主机连接到数据库,并对名为'20212407lyy'的数据库拥有所有权限:
GRANT ALL PRIVILEGES ON 20212407lyy.* TO 'linyuanyuan'@'%';
FLUSH PRIVILEGES;
具体如下图所示:
1.kali终端输入“vi /var/www/html/20212407.php”命令创建一个php文件,编写代码具体如下:
<?php
// 设置数据库服务器的名称
$servername = "localhost";
// 设置连接数据库的用户名
$username = "root";
// 设置连接数据库的密码
$password = "lyy2735760343-";
// 设置要连接的数据库名
$dbname = "20212407lyy";
// 使用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();
?>
2.修改之前的20212407.html文件,使用创建的PHP脚本来处理登录验证,具体如下所示:
3.浏览器打开编辑的网页
打开浏览器,访问网址 http://127.0.0.1/20212407.html
使用的登录账号和密码(linyuanyuan、20212407)正确,效果如下:
使用的账号密码错误,效果如下:
1.实现SQL注入
在账号的文本框中输入“20212407' or 1=1 #” ,密码随便输入(我输入的是“11111”),具体如下:
这个账号数据库中并没有,但是因为1=1始终为真,并且# 后面的内容被注释掉了,所以这个查询将返回users表中的所有记录,而不是仅返回username为20212407的记录,由上图可知,SQL注入成功。
2.实现XSS攻击
在账号的文本框中输入“”,密码随便输入 ,具体如下:
出现提示框,XSS攻击成功。
1.完成SQL注入
选择搜索型SQL注入 ,输入 “20212407' or 1=1 #” ,可以看到注入成功,结果具体如下:
2.完成XSS攻击
选择存储型XSS攻击 ,输入“”,可以看到攻击成功,结果具体如下:
3.完成CSRF攻击
选择CSRF(get)攻击,点一下提示:
选择一个登录:
出现如下界面:
修改个人信息,用bp抓包(红框标出部分为修改的主要内容):
修改数据部分的手机号和个人邮箱部分(红框标出):
点击“Action->Send to Intruder”,发现个人信息又被更改完成具体如下图所示:
本次实验中,我深入探索了Web安全的多个方面,从Web前端HTML到后端PHP与MySQL数据库的交互,从攻击到防御的实践都让我印象深刻。首先,我学习了如何安装和配置Apache服务器,以及HTML的基础知识。我通过编写一个简单的登录表单,了解了GET与POST方法的区别,并学会了如何在HTML中正确地使用它们,这个过程让我对Web前端有了更为直观的认识。接着,我进行了JavaScript的学习。JavaScript不仅用于网页的交互效果,还能通过DOM操作来动态地修改网页内容。
在Web后端,我学习了MySQL数据库的基础操作,并使用PHP编写了一个连接数据库并进行用户认证的网页。这个过程让我认识到后端在Web安全中的重要性,任何前端验证都无法替代后端的安全防护。
在实验的后半部分,我尝试了SQL注入和XSS攻击测试,以及在Pikachu平台上进行了SQL注入、XSS和CSRF等攻击实验,这也是本次实验中最难的部分,但也让我更加深入地了解了各种攻击方式的原理和方法,还让我学会了如何在实际环境中检测和防御这些攻击。通过这次实验,我深刻体会到了Web安全的重要性。无论是前端还是后端,都需要我们具备足够的安全意识和防护措施。整个过程既充满挑战又让人收获颇丰。