20232302 2025-2026-1 《网络与系统攻防技术》实验八实验报告
1.实验内容
1.1Web前端HTML。能安装启停Apache,编写含表单的HTML网页。
1.2Web前端javascipt。能用JS验证表单并回显欢迎信息,测试XSS注入。
1.3Web后端数据库。能安装配置MySQL,完成建库建用户建表操作。
1.4Web后端数据库连接。能用PHP连接数据库,实现用户登录认证功能。
1.5基础攻击测试。能进行简单的SQL注入与XSS攻击测试。
1.6安全攻防平台。安装DVWA或WebGoat平台,完成三项主要攻击实践。
2.实验目的
通过搭建Web应用环境,实践前后端开发,并深入理解SQL注入、XSS等常见Web安全漏洞的原理与防护方法。
3.实验环境
安装Kali镜像的VMware虚拟机
4.实验过程与分析
4.1 Web前端HTML
4.1.1 Apache Web服务器的安装与配置
Apache HTTP Server(简称 Apache)是世界上最流行的开源 Web 服务器软件,由 Apache 软件基金会开发和维护。
首先我们使用netstat -tupln | grep 80查看一下80端口的占用情况

如图所示没有被占用,接着我们使用systemctl start apache2以及systemctl status apache2.service来启动Apache

我们还可以通过打开浏览器,输入localhost来查看Apache启动情况

如图所示,启动成功。
接着我们利用cd进入/var/www/html目录创建html文件,进行编写

4.2 Web前端JavaScript

get表单:(可明确显示提交结果)


以及密码缺失和长度的检测:


接着我们分别使用avaScript注入和HTML注入来测试
(1)JavaScript注入

(2)HTML注入
用户名处输入<h1>HTML injection succeed.</h1>

4.3 Web后端MySQL基础
由于kali中自带MySQl,所以这一步我们直接使用systemctl start mysql打开MySQL服务
接着用systemctl status mysql确认服务状态

服务正常,这样我们就可以使用mysql进入数据库,随后进行数据库创建:
CREATE DATABASE db20232302;# 创建数据库
USE db20232302;#使用数据库
CREATE USER 'user1' IDENTIFIED BY 'user@111'; #创建用户
GRANT ALL PRIVILEGES ON db20232302 .* TO 'user1'; #授予用户所有权限
FLUSH PRIVILEGES; #刷新权限
ALTER USER 'user1' IDENTIFIED BY 'user@1110'; #修改用户密码
CREATE TABLE table2302 (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(100) NOT NULL
);#创建表
INSERT INTO tablefirst VALUES (1,'user1', 'user@111'),(2,'user2', 'user@222'); #插入数据
SELECT * FROM table2302;#查看表中所有内容

4.4 Web后端编写PHP网页

我们在更改好代码之后,进入网页输入用户名和密码进行登录
我们先随意输入,查看是不是可以查出来

如下图可以检测出该用户名不在数据库中

接着我们改好用户名,密码还是乱写

如下图还是可以检测出来密码错误

最后我们按照数据库中的信息输入正确的用户名和代码

4.5 基础攻击测试
4.5.1 SQL注入
SQL注入,用户名随意,密码输入' OR '1'='1即可成功登录


4.5.2 XSS攻击
XSS攻击,在用户名输入框内注入<img src=x onerror=alert('XSS成功')>,即可得到如下界面


4.6 安装DVWA或WebGoat平台,并完成SQL注入,XSS,CSRF攻击
DVWA(Damn Vulnerable Web Application)是一个专门为安全教学而设计的Web应用。它故意包含了多种常见的安全漏洞(如SQL注入、XSS等),方便学习者在合法环境中进行安全测试和攻防练习。
这一步我们先在虚拟机上安装dvwa,使用sudo apt install dvwa,接着使用dvwa-start启动dvwa

初始账号密码分别是admin和password,直接登陆即可

进来之后,首先要把难度改了方便后面实验的进行

4.6.1 SQL注入部分
进入dvwa的sQL Injection界面
(1)先输入1试试

(2)输入1 and 1=2

(3)输入1',如下图出现了报错,由此我们可以推断是字符型注入

(4)根据上面的测试,我们这里输入1' order by n #(n递增直到报错),以此来判断表中的字段个数



结果在n=3时出现了报错,也就是说表中只有2个字段
(5)为进一步测试表字段数、验证注入点有效性,我们再输入' union select 1,2 #

接着输入' union select database(),version() #和' union select database(),user() #,
来获取获取当前使用的数据库名以及版本和当前用户


(6)我们继续输入-1' union select database(),group_concat(table_name) from information_schema.tables where table_schema='dvwa' #来查询数据库中所有表的名称

输入-1' union select database(),group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users' #来在users表中获取所有的字段名

最后输入-1' union select group_concat(user_id,first_name),group_concat(user,password) from users #来查询出各用户的用户名和密码

根据图中的密码形式,我们到cmd5网站进行反解它,最终我们可以得到admin的密码

4.6.2XSS
这一步中我们需要切换到XSS(DOM) 界面,我们可以看到上面的URL处会有defaul参数

我们发现default参数后的语言参数会随着我们的选择而变化,所以我们尝试把后面的语言参数改了,改为我们先前用过的脚本<script>alert('XSS')</script>

接着我们将界面切换为XSS reflected,按照界面提示输入name

如图所示,可以看到上面的URL也会跟着改变;
同样的,我们按照刚才的更改方式再更改一下参数

最后我们再尝试切换到XSS stored界面
依旧按照提示输入信息

我们再次更改参数加入我们的脚本

4.6.3 CSRF部分
经过刚才的尝试我们这里直接通过修改URL诱导我们修改密码
我们试着输入新密码然后提交,如下图我们成功了

接着我们修改URL中的参数,重新打开一个页面访问网址,如下图我们会发现密码已经被更改了

我们使用原来的密码再试试,可以发现密码错误

最后我们使用最后更改的密码gjy666,发现可以成功

5.问题及解决方案
问题1:在编写php后端文件时,html中的代码有问题,文件名不对应,因为我为了分辨在文件名后面加了角标,最后导致前端后端根本不联通。
解决:把文件名对应好了就没什么问题了。
问题2:dvwa安装有问题,我直接用代码在终端安装后发现它在submit时一直没有反应
解决:最后从csdn上找了dvwa的配置教程图中的部分需要把off改为On,最后就能用了

6.学习感悟、思考等
这次Web安全实验让我获得了前所未有的沉浸式体验,从零开始搭建靶场环境,到亲手构造攻击代码,完整地走通了从应用开发到渗透攻击的全流程。在实践过程中,我有了一个深刻的发现:前端验证如果仅仅停留在视觉层面而缺乏严格的逻辑校验,就等于为XSS跨站脚本攻击敞开了大门;而后端代码中看似简单的SQL字符串拼接,实际上正是导致致命注入漏洞的根源;至于CSRF攻击,则巧妙地利用了浏览器对用户身份的盲目信任,在一个看似合法的请求中挟持了用户操作。 从安装配置数据库、解决各种环境依赖,到应对部署过程中层出不穷的突发状况,每一个环节都考验着我的问题解决能力。这次经历让我深刻体会到,绝大多数Web安全漏洞的本质,都可以归结为开发过程中对用户输入数据的盲目信任。这让我意识到,安全绝不是事后补救的附加功能,而应该是从代码编写的第一行就开始贯彻的思维习惯。
这也是最后一次的实验了,总的来说这门课程的专业性和实用性我认为都是目前已来我学过的课程中最高的,感觉自己真的学会了好多不限于课本的有用的并且是好用的知识和技能。
最后感谢强哥的悉心指导!
浙公网安备 33010602011771号