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

一、实验内容及要求

(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)Web前端HTML

HTML:超文本标记语言,它是用于创建网页的标准标记语言。HTML 是一种纯文本文件,它可以被任何文本编辑器创建和编辑。HTML 使用标记(也称为标签)来定义网页的结构和内容。
表单:在网页中,表单对于用户而言是数据的录入和提交的界面;对于网站而言,表单是获取用户信息的途径。表单从用户收集信息,然后将这些信息提交给服务器进行处理。表单信息的处理过程为:当单击表单中的提交按钮时,在表单中输入的信息就会被提交到服务器中,服务器的有关应用程序会处理提交信息。处理结果或者是将用户提交的信息储存在服务器端的数据库中,或者是将有关信息返回到客户端的浏览器上。
GET:GET方法主要用于从服务器获取指定资源,它是HTTP协议中最基础、最常用的一种请求方法。
POSt:POST方法主要用于创建或更新资源,也常被用于提交表单数据到服务器。

检查80端口是否被占用,没有则打开apache2,输入:

netstat -tupln | grep 80
systemctl start apache2
//开启apache服务
systemctl status apache2.service
//查看apache是否开启

在这里插入图片描述进入 /var/www/html目录下,用touch命令创建html文件:

在这里插入图片描述
刚开始可以用文本方式打开新创建的html文件,或者使用vim命令打开创建的html文件,输入代码:

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">  
    <title>登录界面</title>  
    <style>  
        body, html {  
            height: 100%;  
            margin: 0;  
            display: flex;  
            align-items: center;  
            justify-content: center;  
            background: url('/home/oujinyuan/Desktop/background.jpg') no-repeat center center fixed;   
            -webkit-background-size: cover;  
            -moz-background-size: cover;  
            -o-background-size: cover;  
            background-size: cover;  
        }  
  
        .login-container {
	    display:flex;
	    flex-direction:column;
	    align-items:center;
	    justify-content:center;
            background-color: rgba(255, 255, 255, 0.8);  
            padding: 20px;  
            border-radius: 10px;  
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);  
        }  
  
        .login-container input, .login-container button {  
            width: 100%;  
            padding: 10px;  
            margin-bottom: 10px;  
            border-radius: 5px;  
            border: 1px solid #ccc;
	    box-sizing:border-box;
        }  
  
        .login-container button {  
            background-color: #4CAF50;  
            color: white;  
            border: none;  
            cursor: pointer;  
        }  
  
        .login-container button:hover {  
            background-color: #45a049;  
        }  
    </style>  
</head>  
<body>  
    <div class="login-container">
	<h2 algin="center">20212421Test</h2>
        <h2 algin="center">欢迎登录</h2>  
        <form id="loginForm">  
            <input type="text" id="username" placeholder="用户名" required>  
            <input type="password" id="password" placeholder="密码" required>  
            <button type="submit">登录</button>  
        </form>  
    </div>  
</body>  
</html>

效果如下:
在这里插入图片描述

(2)Web前端javascript

JavaScript:JavaScript 是一种在浏览器中运行的脚本语言,它赋予了网页动态和交互性的能力。基本功能有:
1:变量和数据类型:JavaScript 支持多种数据类型,如字符串、数字、布尔值、数组、对象等,并使用变量来存储这些数据。
2:控制结构:JavaScript 提供了各种控制结构,如条件语句(if…else)、循环语句(for、while、do…while)和异常处理(try…catch)。
3:函数:JavaScript 中的函数是一段可重复使用的代码块,它可以接受输入(参数)并返回输出(返回值)。
4:事件处理:JavaScript 可以处理用户与网页的交互事件,如点击按钮、提交表单等。
5:异步编程:JavaScript 支持异步编程,可以使用回调函数、Promises、async/await 等技术来处理异步操作。
6:BOM (Browser Object Model):浏览器对象模型,提供了与浏览器窗口交互的功能,如导航、弹出窗口、设置cookie等。
7:JSON (JavaScript Object Notation):一种轻量级的数据交换格式,JavaScript 内置了对 JSON 的解析和生成能力。

DOM:DOM 是将 HTML 和 XML 文档解析为一系列对象(如元素、属性和文本)的模型。这些对象可以通过 JavaScript 进行操作,从而动态地改变页面的内容和结构。
以下是关于 DOM 的一些关键点:
1:文档结构:DOM 将 HTML 文档表示为一个树形结构,其中每个 HTML 元素都是树中的一个节点。
2:节点类型:DOM 中的节点有多种类型,包括元素节点(如 < p>、< div> 等)、属性节点(如元素的 class、id 等属性)、文本节点等。
3:遍历 DOM:JavaScript 提供了多种方法来遍历 DOM 树,如 parentNode、childNodes、firstChild、lastChild、nextSibling、previousSibling 等。
4:修改 DOM:JavaScript 可以创建、修改或删除 DOM 节点,从而改变页面的内容和结构。例如,可以使用 createElement 方法创建新元素,使用 appendChild 方法将新元素添加到 DOM 树中,使用 removeChild 方法删除元素等。
5:事件处理:DOM 定义了各种事件,如点击、鼠标移动、键盘输入等。JavaScript 可以为这些事件绑定处理函数,以响应用户与页面的交互。
6:CSSOM (CSS Object Model):与 DOM 类似,CSSOM 是将 CSS 样式表解析为一系列对象的模型。这些对象可以通过 JavaScript 进行操作,从而动态地改变页面的样式。

编写前端的javascript,用来验证用户和密码是否正确,放在body内,同时将登录设置成一个onclick事件,输入代码:

<button type="button" onclick="validateLogin()">登录</button>//修改后的登录按钮
<script style="text/javascript">
    function validateLogin(){
	    var username=document.getElementById('username').value;
	    var password=document.getElementById('password').value;
	    if(username==""||password==""){
		    alert("Name or Password is NULL");
	    }
	    else{
		    document.write("Welcome Respected User "+username);
	    }
    }
    </script>

效果如下:
在这里插入图片描述
在这里插入图片描述
注入攻击部分:

1.注入HTML:

HTML注入原理:
1:攻击者尝试在用户输入的地方(如搜索框、评论框等)输入恶意的HTML代码。
2:如果网站没有对这些输入进行适当的过滤或转义,恶意代码将被直接插入到生成的HTML页面中。
3:当用户或其他用户查看这个页面时,恶意代码将在他们的浏览器中执行。

在用户输入框处输入:

<p>This is HTML injection from XXX</p>

结果为:
在这里插入图片描述

2.注入JavaScript

JavaScript注入(也称为跨站脚本攻击,Cross-Site Scripting,简称XSS)是一种安全漏洞,攻击者通过在Web页面中插入恶意JavaScript代码来利用这种漏洞。
JavaScript注入原理
1:攻击者尝试在用户输入的地方(如搜索框、评论框等)输入恶意的JavaScript代码。
2:如果网站没有对这些输入进行适当的过滤或转义,恶意代码将被直接插入到生成的HTML页面中。
3:当其他用户访问这个页面时,他们的浏览器会执行这个JavaScript代码,导致攻击者能够窃取用户数据、篡改页面内容或执行其他恶意操作。

在用户框处输入:

<script type="text/javascript"> alert("This is JavaScript injection from XXX") </script>

结果为:
在这里插入图片描述

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

kali虚拟机自带得有MySQL,输入:

systemctl start mysql
systemctl status mysql

在这里插入图片描述
在这里插入图片描述
输入mysql或者mysql -u root -p登录MySQL:
在这里插入图片描述输入:show databases; 查看数据库:
在这里插入图片描述
输入:

CREATE DATABASE 2012421_db;//创建新的数据库
use mysql;//这里的mysql是上一部查询到的数据库名称
select user, password,host from user;//mysql中的user表
set password for 'root'@'localhost' = password('20212421');//给root用户设置密码
quit;//退出mysql
flush privileges;//更新
mysql -u root -p//重新登录mysql,并输入密码

在这里插入图片描述进入mysql后,输入:

use 20212421_db;//刚才创建的数据库
create table loginuser (uname VARCHAR(30),password VARCHAR(30));//创建用户登陆表
insert into loginuser values('ojy20212421','20212421');//插入新的数据
select * from loginuser; //查看刚才插入的数据
grant select,insert,update,delete on 20212421_db.* to ojy20212421@localhost identified by "20212421";
//添加新用户可以登录mysql,密码为20212421
quit;
mysql -u ojy20212421 -p//用新添加的用户进行登录

在这里插入图片描述

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

输入apt-get install php下载php:
在这里插入图片描述创建login.php文件,输入:

<?php
$servername = "localhost";  
$usrname = "ojy20212421";  
$pasword = "20212421";  
$dbname = "20212421_db";  
  
// 创建连接  
$conn = new mysqli($servername, $usrname, $pasword, $dbname);  
  
// 检查连接  
if ($conn->connect_error) {  
    die("连接失败: " . $conn->connect_error);  
}   
  
if ($_SERVER["REQUEST_METHOD"] == "POST") {  
    // 从表单获取用户名和密码  
    $username = $_POST["username"];  
    $password = $_POST["password"];  
  
    
  
    // 查询数据库  
    $sql = "SELECT * FROM loginuser WHERE uname='$username' AND password='$password'";  
    $result = $conn->query($sql);  
  
    if ($result->num_rows > 0) {  
        // 登录成功  
	echo "<br> 欢迎 {$username}! 登陆成功! <br>";   
    }
    else {  
        // 登录失败  
        echo "用户名或密码错误";  
    }  
}  
  
// 关闭数据库连接  
$conn->close();  
?>

修改html文件:

<div class="login-container">
	<h2 align="center">20212421Test</h2>
        <h2 align="center">欢迎登录</h2>  
        <form id="loginForm" action="http://192.168.223.138/login2421.php" method="post">  
            <input type="text" id="username" name="username" placeholder="用户名" required>  
            <input type="password" id="password" name="password" placeholder="密码" required>  
            <button type="submit">登录</button>  
        </form>  
</div> 

运行html:
在这里插入图片描述
在这里插入图片描述

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

1:SQL注入:
在密码框输入如下,而用户随便:

' OR '1'='1

在这里插入图片描述原理:

SELECT * FROM users WHERE username = ‘$username’ AND password = ‘’ OR ‘1’=‘1’ ;

2:XSS攻击:

在用户框处输入:

<script>alert("你已被XSS攻击!");</script>
//密码框处输入如下
' OR '1'='1

结果如下:
在这里插入图片描述

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

根据实验参考1 下载安装好pikachu:
启动phpstudy_pro,输入http://127.0.0.1/pikachu-master/ 进入pikachu平台:
在这里插入图片描述
在这里插入图片描述1:SQL注入:
选择字符型注入或者搜索型注入,输入 ’ OR ‘1’='1
在这里插入图片描述

在这里插入图片描述

原理:题目要求输入用户名,可惜我们并不知道,但可以用 ’ OR ‘1’='1 ,将查询语句变成永真式。
如:

SELECT * FROM users WHERE username = ‘$username’ AND password = ’ $password’;
在用户处输入’ OR ‘1’='1,后变成
SELECT * FROM users WHERE username = ‘’ OR ‘1’=‘1’;

选择xx型注入,输入 ’ OR ‘1’='1–,将语句的后面都注释掉:
在这里插入图片描述
在这里插入图片描述

2:XSS攻击

选择反射型XSS(post),登录用户,输入:

<script>alert("XSS来了")</script>

在这里插入图片描述
在这里插入图片描述
选择存储型XSS,输入和上面一样:
在这里插入图片描述

3:CSRF攻击

这里需要用到burp工具,需要下载安装burp,详细步骤见实验参考。

选择CSRF(get),根据提示选择一个用户登录:
在这里插入图片描述

登陆后,点击修改个人信息,打开火狐浏览器的扩展FoxyProxy,点击刚创建的地址,将burp打开进行抓包:
初始信息如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述将要修改的信息填好并提交,就能抓到修改的信息了(第一二行就是提交的信息):
在这里插入图片描述
创建php文件,输入:

<!DOCTYPE html>
<html>
<head>
	<meta charest="utf-8">
	<meta name="viewport" content="width=device-width,initial-scale=1">
	<title>CSRF_GET</title>
</head>
<body>
<a href="http://127.0.0.1/pikachu-master/vul/csrf/csrfget/csrf_get_edit.php?sex=%E5%A5%B3&phonenum=13566784325&add=%E5%A4%A9%E4%B8%8A%E4%BA%BA%E9%97%B4&email=8848842%40163.com&submit=submit HTTP/1.1">性感美女在线发牌</a>
</body>
</html>

用浏览器打开该文件,点击链接,就能看到信息已经更改完毕了:
在这里插入图片描述
在这里插入图片描述

三、实验问题及解决方案

问题1:apache无法开启,虚拟机没有网络,主机与虚拟机之间无法互相复制粘贴内容…

在这里插入图片描述
在这里插入图片描述解决方案:重装kali虚拟机,详细见实验参考

问题2:编写php网页连接数据库时,无论输入什么,都是用户或密码错误

解决方案:原因在于form表单的用户和密码没有name,而form表单传到后端是根据name来获取信息的,加上name要素就可以正常运行了。

问题3:php网页无法进行跳转,显示是否成功登录

解决方案:在form表单的action元素中添加http://192.168.223.138/… IP地址为虚拟机的IP地址,回环地址也可以。

问题4:进行CSRF部分时,开启FoxyProxy后无法提交信息,甚至无法点击进行修改个人信息界面,其他网页也会变得十分的卡

解决方案:先进入个人信息界面,提交修改的信息后,关闭FoxyProxy,这时burp已经抓好了包,对后续操作没有影响。

四、实验感悟

在实验中,我学习到了许多关于Web安全的技术细节,如SQL注入、跨站脚本攻击(XSS)、跨站请求伪造(CSRF)等。这些技术细节在攻击者手中是极具破坏力的。同时这次Web安全实践实验让我深刻认识到了网络安全的重要性和复杂性。我将继续保持对网络安全领域的关注和学习,努力提高自己的安全防护能力。

五、实验参考

1:Pikachu漏洞靶场的简介、下载与安装
2:【2024年最新版】Kali安装详细教程
3:pikachu通关教程通关详解超详细
4:pikachu sql注入 通关手册
5:Pikachu靶场之XSS漏洞详解
6:BurpSuite超详细安装教程-功能概述-配置-使用教程—(附下载链接)
7:pikache靶场通关——CSRF攻击
8:Pikachu靶场之CSRF漏洞详解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值