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

20212407林媛媛 2024-06-05 22:48:46

目录

  • 1.实验内容
  • 1.1实验内容及要求
  • 1.2相关知识点
  • 2.实验过程
  • (1)Web前端HTML
  • (2)Web前端javascipt
  • 20212407
  • (3)Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
  • (4)Web后端:编写PHP网页,连接数据库,进行用户认证
  • (5)最简单的SQL注入,XSS攻击测试
  • (6)安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击
  • 3.问题及解决方案
  • 4.学习感悟、思考等
  • 参考资料

1.实验内容

1.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)安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击。

1.2相关知识点

(1)三大前端语言HTML、CSS、JavaScript

  1. HTML (HyperText Markup Language)

    • 作用:HTML是构建网页内容的基础,是一种标记语言,用来定义网页的结构,如标题、段落、列表、表格、图像、链接等元素。
    • 优点:易于学习,广泛兼容,标准化程度高,是任何Web页面必不可少的部分。
    • 缺点:本身不具备表现样式和交互能力,需要结合CSS和JavaScript才能构建出丰富且互动的网页。
  2. CSS (Cascading Style Sheets)

    • 作用:CSS负责网页的表现形式,可以定义网页元素的颜色、字体、布局、尺寸、响应式设计等样式规则。
    • 优点:增强了网页的视觉吸引力,使页面布局更加灵活和适应性强。
    • 缺点:浏览器兼容性问题可能导致样式在不同浏览器中有差异。
  3. JavaScript

    • 作用:JavaScript为网页提供动态功能和交互性,可以直接操控HTML元素,处理用户事件,实现AJAX通信,构建复杂的单页应用等。
    • 优点:灵活性极高,适用范围广,现在已经成为前端开发的核心。
    • 缺点:JavaScript在浏览器中的执行速度相比原生语言较慢,安全性需谨慎处理,而且如果不遵循良好的编码规范和设计模式,代码维护性可能降低。

  这三种语言在前端开发中各自扮演着不同的角色,HTML负责构建网页的结构和内容,CSS负责网页的样式和布局,而JavaScript则负责网页的动态功能和交互性。

(2)GET、POST方法

1.GET 方法基本内容

  • 目的:用于从指定的资源请求数据。GET请求通常用于获取数据,而不是修改数据。
  • 参数传递:GET请求的参数直接附加在URL的查询字符串(query string)中。
  • 缓存:GET请求是可以被缓存的,这有助于提升性能。
  • 幂等性:GET请求是幂等的,即多次执行相同的GET请求不会对资源状态产生任何影响。
  • 安全性:由于GET请求的参数直接暴露在URL中,因此它不适合用于传输敏感数据或执行具有副作用的操作。

2.POST 方法基本内容

  • 目的:用于向指定的资源提交数据,请求服务器进行处理(如插入、更新数据)。POST请求通常用于提交表单数据或上传文件。
  • 参数传递:POST请求的参数包含在请求体中,而不是URL的查询字符串中。
  • 缓存:POST请求通常不会被缓存,因为每次请求都可能导致服务器上的资源状态发生变化。
  • 幂等性:POST请求通常不是幂等的,但某些实现可能是幂等的,这取决于服务器的具体处理逻辑。
  • 安全性:POST请求的参数包含在请求体中,相对于GET请求来说更加安全,因为参数不会暴露在URL中。

3.GET与POST的主要区别

  1. 参数传递:GET请求的参数通过URL的查询字符串传递,而POST请求的参数包含在请求体中。
  2. 安全性:GET请求的参数暴露在URL中,可能导致信息泄露,而POST请求的参数在请求体中,相对更安全。
  3. 使用场景:GET请求常用于获取数据,而POST请求常用于提交表单数据、上传文件或执行其他具有副作用的操作。

(3)SQL注入攻击
  SQL注入(SQL Injection)是一种常见的网络攻击技术,通过在应用程序的输入字段中插入或“注入”恶意SQL代码,攻击者可以执行未授权的数据库操作,包括读取、修改和删除数据。这种攻击方式能够破坏数据的完整性、泄露敏感信息甚至完全控制整个系统。
  当Web应用程序不正确地构建其SQL查询时,就可能会受到SQL注入的攻击。例如,一个常见的错误做法是在拼接SQL语句时不使用参数化查询或适当的转义机制,而是直接使用用户的输入作为SQL的一部分。这样,攻击者就可以通过构造特殊的输入字符串来操纵SQL语句的执行。会造成 数据泄露、数据篡改、 系统瘫痪、提升权限等严重后果。

(4)XSS攻击
  XSS攻击,全称跨站脚本攻击(Cross-Site Scripting),是一种网络安全攻击方式,攻击者通过在目标网站上注入恶意脚本,当用户浏览该网站时,恶意脚本会被执行,从而达到攻击者窃取用户数据、劫持用户会话、进行钓鱼攻击等目的。

定义与原理

  • 定义:XSS攻击指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。
  • 原理:当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了。

攻击危害

  • 窃取用户信息:攻击者可以窃取用户的敏感信息,如用户名、密码、Cookie等。
  • 执行恶意操作:攻击者可以在用户浏览器中执行恶意操作,如重定向用户到恶意网站、发送恶意邮件等。
  • 影响网站功能:XSS攻击还可能导致网站功能异常,如破坏网站结构、修改路由器配置信息等。

攻击类型:

  • 反射型XSS:页面仅把用户输入直接回显在页面或源码中,需要诱使用户点击才能成功。
  • 持久型XSS:攻击代码会被存储在服务器中,由于用户可能会主动浏览被攻击页面,此种方法危害较大。
  • DOM型XSS:基于DOM(文档对象模型)的XSS漏洞是指受害者端的网页脚本在修改页面的DOM节点时形成的XSS。

(5)CSRF攻击
  CSRF攻击,全称跨站请求伪造(Cross-Site Request Forgery),是一种针对Web应用程序的安全威胁

定义与原理:

  • 定义:CSRF攻击指的是攻击者诱导用户进入一个第三方网站,然后该网站向被攻击网站发送跨站请求。如果用户在被攻击网站中保存了登录状态,那么攻击者就可以利用这个登录状态,绕过后台的用户验证,冒充用户向服务器执行一些操作。

攻击类型:

  • GET类型的CSRF攻击:例如,在网站中的一个img标签里构建一个请求,当用户打开这个网站的时候就会自动发起提交。
  • POST类型的CSRF攻击:比如构建一个表单,然后隐藏它,当用户进入页面时,自动提交这个表单。
  • 链接类型的CSRF攻击:比如在a标签的href属性里构建一个请求,然后诱导用户去点击。

攻击危害:

  1. 数据泄露:攻击者可以利用CSRF攻击窃取用户的敏感信息,如账户密码、信用卡信息等,造成用户的隐私泄露和财产损失。
  2. 非法操作:攻击者可以通过CSRF攻击对受信任的网站进行非法操作,如篡改数据、发布虚假信息等,给企业或个人带来损失。
  3. 拒绝服务:攻击者可以利用大量的伪造请求对服务器进行攻击,导致服务器瘫痪,使合法用户无法正常访问。
  4. 传播CSRF蠕虫:例如,某个社交网站爆出的漏洞,让某个用户查看恶意页面后,给他所有好友发送短信,短信中又包含了这个恶意页面,从而进行传播。

(6)DOM
  DOM 是HTML和XML文档的编程接口。它提供了对文档的结构化表示,并定义了一种方式,使得程序(如JavaScript)可以访问和更新文档的内容、结构和样式。DOM 把文档映射为一个由节点(如元素节点、文本节点和属性节点)组成的树形结构。
  JavaScript 通过DOM API(应用程序接口)来操作DOM。

2.实验过程

(1)Web前端HTML

1.安装并启动Apache
在kali终端输入如下命令:

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

结果如下图:

img

在浏览器中访问网址 http://127.0.0.1/ ,发现Apache开启成功,如下图所示:

img

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>

如下图所示:

img

3.浏览器打开编辑的网页
打开浏览器,访问网址 http://127.0.0.1/20212407.html

img

(2)Web前端javascipt

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>

具体如下图所示:

img

3.浏览器打开编辑的网页
打开浏览器,访问网址 http://127.0.0.1/20212407.html
若输入的账号或者密码为空:

img

若输入的密码错误:

img

输入密码正确,则登陆成功:

img

4.尝试注入攻击

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

20212407

”进行HTML注入,密码不变,最后会在登陆界面输出一级标题“20212407”,如下图所示:

img

img

注入JavaScript
在网页的账号的文本框中输入“”进行JavaScript注入,密码不变,最后会出现“20212407”的提示框,如下图所示:

img

img

img

注入成功。

(3)Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表

1.打开kali中安装并启动MySQL
kali有自带的数据库,在终端输入如下代码:

systemctl start mysql 
systemctl status mysql

img

service mysql start
mysql_secure_installation 
mysql -u root -p 
use mysql 
show databases; 

img

img

2.创建用户
输入“create user 'linyuanyuan'@'%' IDENTIFIED BY '20212407';”命令创建一个名为'linyuanyuan'的用户,允许该用户从任何主机('%' 表示任何主机)连接到数据库,并使用密码 '20212407' 进行身份验证。具体如下图所示:

img

3.建库
输入“create database 20212407lyy;”命令创建数据库,具体如下图所示:

img

输入“use 20212407lyy”命令使用该数据库,具体如下图所示:

img

4.建表
输入“create table user (username VARCHAR(30),password VARCHAR(20));”命令创建一个名为user的表,该表包含两个字段:username和password。具体如下图所示:

img

使用mysql语言“insert into user values('linyuanyuan','20212407');”插入数据,插入操作成功后可以输入“select * from user”命令查看数据表中的内容,具体如下图所示:

img

5.授权
输入如下命令,允许用户'linyuanyuan'从任何主机连接到数据库,并对名为'20212407lyy'的数据库拥有所有权限:

GRANT ALL PRIVILEGES ON 20212407lyy.* TO 'linyuanyuan'@'%';  
FLUSH PRIVILEGES;  

具体如下图所示:

img

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

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脚本来处理登录验证,具体如下所示:

img

3.浏览器打开编辑的网页
打开浏览器,访问网址 http://127.0.0.1/20212407.html

使用的登录账号和密码(linyuanyuan、20212407)正确,效果如下:

img

使用的账号密码错误,效果如下:

img

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

1.实现SQL注入
在账号的文本框中输入“20212407' or 1=1 #” ,密码随便输入(我输入的是“11111”),具体如下:

img

img

这个账号数据库中并没有,但是因为1=1始终为真,并且# 后面的内容被注释掉了,所以这个查询将返回users表中的所有记录,而不是仅返回username为20212407的记录,由上图可知,SQL注入成功。

2.实现XSS攻击
在账号的文本框中输入“”,密码随便输入 ,具体如下:

img

出现提示框,XSS攻击成功。

(6)安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击

1.完成SQL注入
选择搜索型SQL注入 ,输入 “20212407' or 1=1 #” ,可以看到注入成功,结果具体如下:

img

2.完成XSS攻击
选择存储型XSS攻击 ,输入“”,可以看到攻击成功,结果具体如下:

img

img

3.完成CSRF攻击
选择CSRF(get)攻击,点一下提示:

img

选择一个登录:

img

出现如下界面:

img

修改个人信息,用bp抓包(红框标出部分为修改的主要内容):

img

img

修改数据部分的手机号和个人邮箱部分(红框标出):

img

点击“Action->Send to Intruder”,发现个人信息又被更改完成具体如下图所示:

img

img

3.问题及解决方案

  • 问题1:我使用浏览器登录20212407.html,发现浏览器无法访问
  • 问题1解决方案:我一开始使用https访问20212407.html,使用的路径为 https://127.0.0.1/20212407.html ,kali虚拟机可能无法使用https访问网页,所以一直失败,后面改成http访问就可以了。
  • 问题2:下载bp工具包时,我无法打开burp-loader-keygen.jar,直接运行运行.bat也出现闪退现象
  • 问题2解决方案:我在准备环境时重新下载了一个jdk,但是和之前我主机上的jdk冲突了,所以无法打开jar包。直接将两个jdk都卸载干净后,重新下载一个新的jdk。(但是一定要注意必须卸载干净,否则还是无法打开jar包,可以在卸载干净后在主机终端输入“java -version”查看是否卸载干净)。
  • 问题3:bp抓进行CSRF攻击的数据包时,没有看见数据包
  • 问题3解决方案:我在火狐上访问pikachu网站,但是火狐上没有bp的证书,bp对于火狐来说是不受信任的网站,所以需要先下载bp证书导入至火狐中,才可以访问火狐进行数据包的抓取。解决方法是去相应网址下载bp的证书导入至火狐即可。

4.学习感悟、思考等

  本次实验中,我深入探索了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安全的重要性。无论是前端还是后端,都需要我们具备足够的安全意识和防护措施。整个过程既充满挑战又让人收获颇丰。

参考资料

...全文
199 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

98

社区成员

发帖
与我相关
我的任务
社区描述
网络攻防作业
网络安全 高校
社区管理员
  • blackwall0321
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧