20232304 2025-2026-1 《网络与系统攻防技术》实验八实验报告

news/2025/11/15 2:49:47/文章来源:https://www.cnblogs.com/alexander619/p/19223993

20232304 2025-2026-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)安装DVWA或WebGoat平台,并完成SQL注入、XSS、CSRF攻击。

2.实验过程

2.1 Web前端HTML

Apache已经预装在Kali Linux上,不用额外安装,所以我们要做的首先是确认80端口是否被占用,输入如下命令

netstat -tupln | grep 80

如图所示:

a7131ae27bae0e4996c3cd456a16db25

可以看到端口被pid为56542的python程序占用,所以我们需要先kill掉这个进程才能继续,在命令行中输入如下命令:

kill 56542

以杀掉进程,再次检查直到没有进程占用80端口为止,如图所示:
c4f1438049d8418ec63223663e426f80

现在没有占用,可以启动Apache,在命令行中输入:

systemctl start apache2

以启动Apache,再使用如下命令确认服务状态:

systemctl status apache2.service

如图所示:

0f042526484ff36f52d9e96d204661cb

Apache已成功启动。

我们进入当前用户的/var/www/html目录下,新建一个html文件,使用命令

vi 20232304fty.html

输入如下内容:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>登录与搜索</title><style>body {font-family: Arial, sans-serif;max-width: 600px;margin: 50px auto;padding: 20px;line-height: 1.6;}.form-section {margin-bottom: 40px;padding: 20px;border: 1px solid #ddd;border-radius: 5px;}input[type="text"], input[type="password"] {width: 100%;padding: 10px;margin: 8px 0;border: 1px solid #ddd;border-radius: 4px;box-sizing: border-box;}input[type="submit"] {background-color: #4CAF50;color: white;padding: 10px 15px;border: none;border-radius: 4px;cursor: pointer;margin-top: 10px;}input[type="submit"]:hover {background-color: #45a049;}label {display: block;margin-top: 10px;}</style>
</head>
<body><h1>简单网页示例</h1><!-- 登录表单 - 使用POST方法 --><div class="form-section"><h2>用户登录</h2><form action="/login" method="post"><label for="username">用户名:</label><input type="text" id="username" name="username" required><label for="password">密码:</label><input type="password" id="password" name="password" required><input type="submit" value="登录"></form></div><!-- 搜索表单 - 使用GET方法 --><div class="form-section"><h2>搜索功能</h2><form action="/search" method="get"><label for="search">搜索关键词:</label><input type="text" id="search" name="q" required><input type="submit" value="搜索"></form></div>
</body>
</html>

该网页的效果如下:
87d50ab43703de4dca556d88368fdbc0

2.2 Web前端JavaScript

先了解一下什么是JavaScript和DOM

JavaScript:Web上的一种编程语言,主要用于嵌入动态文本于HTML页面、响应浏览器事件、读写HTML元素、验证数据等。
DOM:全名是文档对象模型,是浏览器用来解析HTML和XML文档的编程接口,将文档描绘成一个层次化的节点树,允许开发人员动态地访问和操作文档的内容和结构。

我们在原HTML上加入JavaScript对用户输入进行验证,添加的JavaScript代码如下:

        function submit_login() {const username = document.getElementById('username').value;const password = document.getElementById('password').value;const welcomeMessage = document.getElementById('welcomeMessage');// 验证用户名规则:至少3个字符,只能包含字母和数字if (username.length < 3) {alert('用户名至少需要3个字符');return;}// 验证密码规则:至少6个字符if (password.length < 6) {alert('密码至少需要6个字符');return;}// 显示欢迎信息welcomeMessage.innerHTML = '欢迎 ' + username;welcomeMessage.style.display = 'block';// 清空表单document.getElementById('loginForm').reset();}

注意HTML中使用JavaScript的时候需要将代码用<script></script>包围,最后网页的效果如下:

db3b73fff907b8203f420d7d327c1e86
de0734b4bf48be409dc4743ce725ced9
88f0ba006ebf8f41cbf12d216e8c166a

实现了用户输入验证和登录成功回显显示用户名的功能。

我们进行JavaScript注入,在用户名处输入下面的代码:

<script type="text/javascript">alert("JavaScriptInjectionSucceed.")</script>

效果如下:
b313d2bc151f488a7e3d5768427d29bb

可以看到注入成功;

使用HTML代码注入,注入代码为<h1>HTML injection succeed.</h1>,效果如下:
f32bbd8b848afbe9f30f1b169b9b84d5

可以看到注入成功。

2.3 Web后端MySQL基础

MySQL是Kali自带。

使用systemctl start mysql打开MySQL服务,systemctl status mysql确认服务状态,如图所示

a054e1f963eff6e4fdd17735288153fc

输入下面的命令完成建库,修改密码,建表等操作:

mysql
-- 创建数据库
CREATE DATABASE 20232304db;
-- 使用数据库
USE 20232304db;
-- 创建用户
CREATE USER 'user20232304' IDENTIFIED BY 'Alex1234';
-- 授予用户权限
GRANT ALL PRIVILEGES ON 20232304db.* TO 'user20232304';
FLUSH PRIVILEGES;
-- 修改用户密码
ALTER USER 'user20232304' IDENTIFIED BY 'Fty1234';
-- 创建表
CREATE TABLE testtable (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL,pwd VARCHAR(255) NOT NULL
);
-- 插入数据
INSERT INTO testtable (name, pwd) VALUES ('fengtianyue', 'Fty1234');
-- 查看表中所有内容
SELECT * FROM testtable;

运行结果如图所示:

ba79d268a121a993e7df7caff2cc405b

2.4 Web后端编写PHP网页

PHP也是Kali Linux里面本来就有的,不需要额外下载,如图所示:

9321db9a3ace4874910db82f1321e045

我们使用下面的PHP代码来实现数据库连接和用户认证

<?php
$host = 'localhost';
$dbname = '20232304db';
$user = 'user20232304';
$password = 'Fty1234';//创建数据库连接
$conn = new mysqli($host, $user, $password, $dbname);//检查连接是否成功
if ($conn->connect_error) {die("数据库连接失败: " . $conn->connect_error);
}//获取POST数据
$username = $_POST['username'];
$password = $_POST['password'];//使用查询语句进行查询
$sql = "SELECT * FROM testtable WHERE name='$username' AND pwd='$password'";  
$result = $conn->query($sql);//检查是否有匹配的记录
if ($result->num_rows > 0) {echo "欢迎登录成功: " . $username . "!";
} else {echo "用户名或密码错误";
}//关闭结果集和预处理语句
$result->close();
$stmt->close();//关闭数据库连接
$conn->close();
?>

之后我们在之前的前端代码中将登录按钮的action改为执行该php文件,如图所示:

ded02216b488424bb6c4404072576ca5

之后我们尝试在前端登录,如图所示:

ae173867fa71826aa975379d7f15618f
4aa29af79f274646b1e5eca87bfdc837

可以看到输入正确用户名密码可以成功登录,如果输入错误用户名密码会给出适当提示

2.5 SQL注入与XSS注入

实现SQL注入,只需要随机输入用户名,密码输入经典的' OR '1'='1即可成功登录,如图所示:

0b9ea69cd2975f69ab12d9e46e0b4964

由于数据库中并没有fengtianyue123这个用户,所以判定SQL注入成功。

在用户名中输入<img src=x onerror=alert("XSSInjectedSucceed")>,密码输入' OR '1'='1,即可实现XSS攻击,如图所示:

f6dbca795f2eadbbfec0911e5e8021df

可以看到XSS注入和SQL注入均成功。

2.6 安装DVWA或WebGoat平台,并完成SQL注入,XSS,CSRF攻击

我们这里选择DVWA,使用本地运行的形式。

主界面如图所示:
3084bef8b5c59b4c27e2fa35e0e73ac2

在做之前一定要先调难度,我这个默认难度是impossible,我在调整难度之前都给我挠秃头了也做不出来。。。

2.6.1 SQL注入部分

我们先输入1,看看结果

ad244fac499f4fc638b9b297680b773b

输入ID并提交会有显示First Name和Surname,并且在URL中显示了id,那么可能就是使用id值在数据库中进行查询,所以我们用1 and 1=2判断是否存在注入:
31481bc8515fcdebdb5c7f64e3e730d5

可以看到和直接输入1的结果是一样的,说明数据库查询是直接把用户输入插入查询语句中,接下来我们判断注入类型,输入1',查看结果:
7cd1e738dc4d4f1b86d38fd2e0634530

报错了,那预计就是字符型注入。

接下来我们来判断表中有几个字段,使用1' order by 1 #1' order by 2 #数字逐渐递加,直到n的时候报错说明有n-1个字段,如图所示:
84abd4c79532e24b9a69eae3dad061b3
5fcb5d36ddd1e89b4b70e04d5dfe962d
c2a892b03cb6c50a70960df830ce1d0b

到3的时候报错了,说明这次查询只返回两个字段。

接下来我们使用union联合查询:

先使用' union select 1,2 #,结果如下:

2f2c55f6bebcf56a1f8eca9d151fc417

接下来获取当前数据库名称,版本以及当前用户,使用' union select database(),version() #
a74671f4c1c1b5d37a78f16b91788e76
1d1f53c160d3341e50a7434b82857a37

数据库名dvwa,

版本11.8.3-MariaDB-1+bl from Debian

用户dvwa@localhost

接下来我们查询数据库中的所有表的名称,使用-1' union select database(),group_concat(table_name) from information_schema.tables where table_schema='dvwa' #

其原理是:首先使用单引号(')提前闭合原查询语句中字符串值的边界,并用注释符(#)使原查询后续部分失效;然后通过 UNION SELECT操作符,恶意附加一个额外的查询,从而能够直接从数据库的系统表(如 information_schema.tables)中查询并获取当前数据库(table_schema='dvwa')包含的所有表名的列表(使用 group_concat函数合并成一个字符串)

9f920c716b181755455268b2fa51f773

可以看到有users和guestbook两张表。

我们再尝试在users表中获取所有的字段名,使用-1' union select database(),group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users' #

其原理是直接访问存储数据库元数据的系统表 information_schema.columns,从而一次性获取 dvwa数据库中 users表的所有列名称(使用 group_concat函数合并成一个字符串)
image

可以看到所有列的名称是user_id,first_name,last_name,user,password,avatar,last_login,failed_login

之后我们就可以针对性的查询出各用户的用户名和密码,使用-1' union select group_concat(user_id,first_name),group_concat(user,password) from users #

6e926f53c375916dd43d6e3fc2f7663c

可以看到用户名很清楚,但是密码被加密了,从形式看来似乎是MD5,我们尝试破解一下:
a4bf4e189747032997d0960b82851eed

可以看到用户admin的密码为password,证明了我们的猜测。

2.6.2 XSS部分

2.6.2.1 XSS(DOM)

让我们选择不同的标签,可以注意到当我们选择不同的标签时url会产生变化,会出现一个叫做default的参数,如图所示:

a5cf0a53fc5496965eb9b5a03dbcea94
2e8e40bcc10b2010007275f8be5b3f79

那么我们可以尝试一下用这个default参数作为突破口,尝试让其值等于我们要执行的脚本,如图所示:
d841d9f2638f15d592fe4362057fc419

可以看到注入成功。

2.6.2.2 XSS(Reflected)

可以看到让我们输入名字,并且url也会随之变化,那么我们也可以认为这个name参数就是注入点,如图所示:

43659133a8923baecd1ec8a327fb4659

我们依然尝试提交一段代码<script>alert(1)</script>,结果如下:
98ab37e0575acfd88c28d07baf1ea0d2

可以看到还是注入成功。

2.6.2.3 XSS(Stored)

可以看到随着我们输入增多,页面上的留言数量也跟着增多,证明我们输入的信息被存储,如图所示:
d8f9119ed57190bd9a6a531496b44745

我们还是先输入代码<script>alert(1)</script>,结果如下:
c5c2cbaa39f5014bd77ca3ba578722e8

可以看到输入不进去了,最多只能输入10个字符。我们来查看一下源代码,看看是在前端做了限制还是在后端做了限制:

e5b3f7a192b2b83aa47202ec6edf5f98

可以看到是在前端做了一个maxlength="10"的限制,既然在前端那就好办,直接改就可以了,如图所示

10b8aac3a183072c4b7f150508253b45

之后我们重新输入代码,结果如图:
75f88622bee20e4b9e8776e3db1825f5

可以看到注入成功,并且弹了两次窗,说明namemessage字段都存在存储型XSS注入点

2.6.3 CSRF部分

可以看到网站的设计意图是让我们修改密码。
d914741833b839b6332eca8a485bc715

如图所示,当我直接提交的时候,在url中出现了两个参数,一个是password_new参数,一个是password_conf参数,内容和我输入的内容是一模一样的,所以大胆猜测这个网站是不经过加密直接使用GET方法传向服务器的,所以我们可以直接尝试修改url,如图所示:

5a494a59d176c34b689b94d9b66e4589
d1ab513b7b9da92d98423498c13f561c

为了方便体现是否修改成功,提交前的页面是一个输入不匹配的页面,结果是密码被成功修改。说明这个网站存在CSRF漏洞,只要被引诱在无意之间点击了被黑客修改过的url,就可能在不知不觉之间被修改密码。

3.问题及解决方案

  • 问题1:不知道怎么安装靶场
  • 问题1解决方案:一开始想用Docker容器安装的,奈何实在是连接不上官方的镜像源,国内的镜像源又都需要登录认证,最终无奈放弃了,后来才发现可能只有在Windows下安装会比较麻烦一些,像Kali这种所需各种软件全部齐备的系统,本地安装也是非常简便的~尤其是DVWA,基于Apache2和MySQL,这两个软件在Kali上都是预装好的,配置起来很方便,WebGoat也是不遑多让,有Java环境就可以很方便的安装,甚至在Windows上也很方便。
  • 问题2:做题没思路
  • 问题2解决方案:都说“天下文章十八抄”,我觉得做CTF相关题目也是如此,初学者最好还是通过别人写好的Writeup来积累思路,做得多了视野开阔了,最终才能融会贯通。

4.学习感悟、思考等

在大一下学期被我放弃的CTF最终还是找上门来(毕竟是专业课),有了以前的经验,这次实验对我来说基本上还算不上特别难,最难的地方是装靶场,还是因为误入歧途才导致的难。虽然本次实验内容对我来说不难,但是在更高阶的技巧积累方面我还差得很远,CTF是一个不断积累的过程,每个人都会有“还能这样解题”的惊叹,但只要肯努力,最后也都能收获属于自己的欣喜和成就。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/965816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAD开发的几种方式

CAD开发的几种方式1. AutoLISP 与 DCLAutoLISP:AutoCAD 内置的 LISP 方言,语法简单、入门门槛低,适合快速编写小型工具(如自定义命令、批量处理图元)。优势:直接访问 AutoCAD 命令和图元,无需编译,脚本可即时运…

KMP(Knuth-Morris-Pratt )算法-模式串lps(Longest Prefix Suffix)最长相同前后缀长度数组算法证明

KMP(Knuth-Morris-Pratt )算法-模式串lps(Longest Prefix Suffix)最长相同前后缀长度数组算法证明被KMP算法折磨了几天,在chatgpt的帮助下终于了解了lps数组,或者叫next数组计算过程中非常关键点的原理,这里着重…

Universal Flip Key Remote KD NB59-3 – 5-Pack for Easy Car Key Replacement

Today were featuring an excellent product: **KEYDIY KD NB59-3 Universal Flip Remote Key 3 Buttons 5pcs/lot**. **KEYDIY KD NB59-3 Universal Flip Remote Key 3 Buttons 5pcs/lot** This tool is designed to …

Autel MK900TS: Advanced Wireless TPMS Scanner with Android 11 40+ Services

Today were featuring an excellent product: **Autel MaxiCOM MK900TS MK900-TS Wireless TPMS Diagnostic Scanner with Android 11 Support DoIP/CAN FD Protocols and 40+ Services Upgraded of MK808TS**. **Aute…

RimWorld 断点调试——第一回

本文记录了一种能逐步调试 RimWorld Mod 代码的方法。众所周知,写 RimWorld Mod 时,没法儿直接对代码进行断点调试,那如何才能实现这个功能就成为了一个问题。现在介绍我第一个成功使用的办法。该方法依赖 Windows …

gateway网关实现路由基于nacos注册中心

首先你需要启动nacos服务,才能开始下面的效果 这里10010为网关端口 nacos你需要当服务都启动后,你应该看到如下服务 好了,下面开始上代码了 首先是网关部分<project xmlns="http://maven.apache.org/POM/…

Upgrade Your Diagnostics with OTOFIX VCI V1 Bluetooth Connector for Seamless Scanning

Today were featuring an excellent product: **OTOFIX VCI V1 Bluetooth Connector Used with OTOFIX Diagnostic Tablets D1, D1 Lite, D1 Pro, D1 MAX, D1 Plus, IM1, BT1**. **OTOFIX VCI V1 is a VCI (Vehicle Co…

Unlock BOSCH MPC5xx ECU Data with CG FC200 Programmer – Bench Read/Write Tool

Today were featuring an excellent product: **CG FC200 ECU Programmer Full Version with MPC5XX Adapter for BOSCH MPC5xx Read/Write Data on Bench**. **CG FC200 ECU Programmer Full VersionWith MPC5XX Adap…

2025 Autel IM608 PRO II Full Kit – Advanced Diagnostics with Free G-Box3

Today were featuring an excellent product: **2025 Autel MaxiIM IM608 PRO II (Autel IM608 II) Full Kit with JVCI+ Plus IMKPA Accessories Get Free G-Box3 APB112**. **Autel MaxiIM IM608 PRO II (IM608S II)…

Python 在 Windows 上提示文本消息的实现(模拟安卓手机上的 Toast 效果)

用 tkinter 实现,在桌面上即时显示文字消息(置顶显示、可拖动),经过 duration 毫秒后消失。 效果演示:代码实现:"""使用方法: toast(message_text, bg="#075077", duration=3000)&quo…

小红书-强共鸣、高热度的话题----每一个都精准命中测试员的日常,非常适合在小红书打造“测试职场达人”人设。

1、 类似“被老板问:这个问题为什么没有测试出来?”的热门话题还有哪些?请结合软测职场高频场景(面试压力提问、工作追责、能力考察),整理排名靠前的 20 个热门话题,贴合真实职场痛点,适配小红书 “强共鸣 + 干…

每日一导4

Problem 已知函数 $ g(x) =\sin x $ , 点列 $ A_n( 2^{-n} , g(2^{-n} ) ) \hspace {0.2cm} (n\in N^*) $ . 设直线 $ A_nA_{n+1} $ 斜率为 $ k_n$ ,求证: $ \sum_{i=1}^{n}k_i >n-\frac{1}{9} $ .分析 原题前面的…

基于FPGA的BPSK+costas环实现,包含testbench,高斯信道,误码统计,可设置SNR

1.算法仿真效果 加入频偏:设置SNR=30db(无误码,上图中误码个数8为costas锁定过程中带来的) 设置SNR=15db(无误码,上图中误码个数8为costas锁定过程中带来的) 设置SNR=5db (误码2400个测试符号,错误30个,其中…

一个基于 .NET 8 + DDD 搭建的模块化微服务框架

前言 今天大姚给大家分享一个基于 .NET 8 + DDD 搭建的模块化微服务框架:NetCoreKevin。 项目介绍 NetCoreKevin 是一个基于 .NET 8 + DDD 搭建的模块化微服务框架,其模块化设计使得每个功能都可以独立引用,非常适…

【硬件测试】基于FPGA的BPSK+costas环系统开发与硬件片内测试,包含高斯信道,误码统计,可设置SNR

1.算法硬件测试效果 vio设置SNR=30 vio设置SNR=8硬件测试操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 Costas环是一种用于载波同步的常见方法,特别是在调制解调中,它被广泛用于解调相位调制信号,如…

### 4

4.4 切口效应 由于表面切口应力集中效应导致应力水平增加,典型的零件疲劳失效通常发生在表面上的切口处。切口被定义为几何上的不连续,是由设计(如一个孔)或加工工艺引入的(以材料和制造缺陷的形式出现,如夹杂、…

每日一句

没做一件事,我们首先想到的就是别人会怎样看,人生中几乎有一半的麻烦与困扰就是来自我们对行动结果的焦虑上。 ———— 叔本华

4.3 基于极限拉伸强度估算零件S-N曲线

4.3 基于极限拉伸强度估算零件S-N曲线 在没有S-N实验数据可用时,零件S-N特性的估算方法对于设计过程是非常有用而且至关重要的。本节重点介绍根据有限的信息估算S-N曲线的方法,素材主要取自大量的参考文献 [16] [3] …

2025年宁夏AI客服服务商/供应商最新top5专业推荐:智能交互重构企业服务新范式

随着AI技术深度赋能服务领域,具备多模态交互能力的智能客服已成为企业降本增效的核心工具。本榜单基于技术创新性、场景适配度、服务效能三大维度,结合宁夏本地企业数字化转型需求,深度解析四家头部服务商综合实力,…

Windows 文件删除命令详解

1. rmdir - 删除目录命令 基本语法 rmdir [参数] 目录名主要参数说明参数 作用 等效 Linux 命令/s 递归删除目录树(包含子目录和文件) rm -r/q 安静模式(不提示确认) rm -f常用组合 # 基本删除(只能删除空文件夹)…