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

1. 实验内容

1.1 Web前端HTML。能安装启停Apache,编写含表单的HTML网页。
1.2 Web前端javascript。通过JS验证表单回显欢迎信息,测试XSS注入。
1.3 Web后端数据库。安装启动MySQL,完成创建库、用户、表等操作。
1.4 Web后端数据库连接。编写PHP网页并连接数据库,实现认证功能。
1.5 基础攻击测试。能进行简单的SQL注入与XSS攻击测试。
1.6 安全攻防平台。安装DVWAt平台,完成SQL注入、XSS、CSRF攻击实践。

2. 实验目的

通过搭建Web应用环境,实践前后端开发,实践并深入理解SQL注入、XSS等常见安全漏洞原理与防护方法。

3. 实验环境

Kali镜像的VMware虚拟机,具体配置如下图所示:
image

4. 实验过程与分析

4.1 Web前端HTML

4.1.1 Apache Web服务器的安装与配置

Apache是一款开源的Web服务器软件,广泛用于托管网站、提供Web服务和应用程序。
使用bash命令启动Kali虚拟机中自带的Apache服务:

systemctl start apache2

命令查看Apache状态:

systemctl status apache2.service

由于本身没有设置防火墙,所以不需要进行额外设置。
image

打开Kali的浏览器,在地址栏输入localhost,可以看到Apache的欢迎页面,说明Apache Web服务器安装成功,可以继续实验。
image

4.1.2 HTML表单功能实现

在Kali终端使用bash命令进入虚拟机的/var/www/html目录:

cd /var/www/html/

输入bash命令创建html文件:

vim form20232325lyd.html

创建两个分别使用POST和GET方法提交表单信息的html文件。
使用POST方法数据会在请求体中发送,不会在URL中显示,更加安全;而使用GET方法数据会在URL中显示,因此可以看到明文的用户名口令。下图为GET方式的代码与运行情况。
image
image

由图可见,在输入密码后GET方法会在URL中显示登录的账号与密码明文。
image

下图为POST方式的代码与运行情况。
image
image

由图可见,在输入密码后POST方法不会在URL中显示登录的账号与密码,很明显比get方式更加安全。
image

4.2 Web前端 JavaScript

4.2.2 JavaScript表单功能实现

静态的HTML本身无法实现复杂的验证逻辑,为实现“用户名与密码非空”及“密码长度不低于8位”的验证要求,决定使用JavaScript实现基本的验证逻辑。它能够在数据发送到服务器前,通过DOM API获取输入值并进行逻辑判断,从而提供即时反馈。
当用户点击登录按钮后,程序会检查用户的输入是否满足要求。如果用户名或口令为空,则在对应位置给出错误提示;若口令长度不满足,则弹出弹框给出错误信息;若所有条件均满足,则回显用户登录信息。下图为JavaScript代码。
image

下图为网站登录情况,由图可见,网站在密码不符合要求或者为空时会给予正确的反馈,符合要求后就可以正确登录并且回显。
image
image
image

4.2.2 注入攻击

(1)利用回显用户名注入HTML
由于程序未对用户输入进行安全检查或转义处理,直接将其作为HTML的一部分拼接输出,这会导致注入攻击的发生。
由下图可见,在用户名输入框中输入:<u>HTML injection succeed.</u>,如果其余字段满足验证逻辑,HTML injection succeed.会被回显到页面,并且以下划线的形式展示。
image

在用户名输入框中输入:<img src='x' onerror='document.body.innerHTML = "JavaScript injection succeed."'>,这段代码会尝试加载一个名为x的图片,但是图片x不存在,因此会触发加载错误,然后执行JavaScript代码,将整个网页的body内容替换为"JavaScript injection succeed."这段文字。
image

4.3 Web后端MySQL

在Kali终端中使用bash命令启动kali虚拟机自带的MySQL:

systemctl start mysql

通过bash命令查看服务的启用情况:

systemctl status mysql

如图所示,已经成功启动。
image

输入mysql进入数据库,随后进行数据库创建,用户创建、授权,建表、插入查看数据等操作。具体SQL代码如下,操作过程如图所示:

CREATE DATABASE db20232325; #创建数据库
USE db20232325; #进入数据库
CREATE USER 'user1' IDENTIFIED BY 'user@111'; #创建用户
GRANT ALL PRIVILEGES ON db20232325.* TO 'user1'; #授予用户所有权限
FLUSH PRIVILEGES; #刷新权限
ALTER USER 'user1' IDENTIFIED BY 'user@1110'; #修改用户密码
CREATE TABLE tablefirst (
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 tablefirst; #查看表中所有内容

image

4.4 使用PHP连接数据库

PHP是为一种编写后端的语言,用于处理前端提交的表单数据。该部分需要利用php编写代码,建立与MySQL数据库的连接,并执行用户认证。
该部分代码需要完成的内容包括:查询用户是否存在,校验密码是否匹配,最终根据结果返回登录成功或失败信息,并安全关闭数据库连接。
为确保表单数据能正确提交,后端处理程序的文件名须与表单的action属性一致,即命名为login.php。该部分代码如图所示:
image

登录网站查看运行情况,对于用户名口令均存在于数据库中的情况,可以返回欢迎信息+登录用户用户名;对于用户不存在或用户存在而口令错误的情况,能够正确提示口令错误。具体运行情况如下图所示:
image
image

4.5 基础攻击测试

4.5.1 SQL注入

由于所写的程序未对用户输入进行任何安全过滤,直接将前端表单数据拼接至SQL语句中,这导致用户的恶意输入可能改变原语句的执行逻辑。
当攻击者已知用户名时,可在密码框注入:

' OR '1'='1

这使得后端拼接的SQL查询条件由验证特定密码,转变为AND pwd='' OR '1'='1'。由于'1'='1'恒成立,整个WHERE子句返回值恒为真,导致攻击者无需密码即可登录。
image
image

即使不知合法账号,攻击者亦可在用户名与密码栏中均输入:

' OR '1'='1

这类永真条件,从而绕过整个身份验证逻辑,实现非法登录。
image
image

4.5.2 XSS攻击

XSS(跨站脚本)攻击是一种通过向网页中注入恶意脚本代码,从而在用户浏览器中执行的攻击。
在用户名输入框内注入:

<img src=x onerror=alert('XSS成功')>

并在密码框输入任意值提交。由于系统未对用户输入内容进行过滤或编码处理,该段代码被直接回显至页面中。当浏览器尝试加载不存在的图片x时,触发onerror事件,进而执行其中所包含的JavaScript代码,弹出警告框。
image

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

在kali终端中输入bash命令安装DVWA:

sudo apt install dvwa

image

使用bash命令开启dvwa:

dvwa-start

image

初始用户为:admin,初始密码为:password,登录成功之后在DVMA Security将难度更改为low。
image

4.6.1 SQL注入部分

在界面选择SQL Injection部分,判断注入点:输入1,正常输出id为1的信息。
image

获取数据库名:输入:

' union select database(),version() #

可获取数据库名为dvwa,数据库版本,以及当前用户。
image

输入:

-1' union select database(),group_concat(table_name) from information_schema.tables where table_schema='dvwa' #

来获取表名,由图可知可获取表名有guestbook、users。
image

使用:

-1' union select database(),group_concat(column_name) from information_schema.columns where table_schema='dvwa' and table_name='users' #

尝试在users表中获取所有的字段名,由图可知名称有user_id,first_name,last_name,user,password,avatar,last_login,failed_login。
image

使用:

-1' union select group_concat(user_id,first_name),group_concat(user,password) from users #

因此查询出各用户的用户名和密码,得到密码为5f4dcc3b5aa765d61d8327deb882cf99。
image

很明显得到的密码进行过加密,判断为MD5加密,在网上找到一个MD5的解密网站,解密后得到密码为password。
image

4.6.2 XSS部分

XSS(Dom)

在界面中选择选择XSS(Dom),在下拉菜单中选择English选项,点击select,URL 会变为:

http://localhost/dvwa/vulnerabilities/xss_d/?default=English

可以知道其中default参数是用户可控输入。
image

将URL修改为:

http://localhost/dvwa/vulnerabilities/xss_d/?default=></option><script>alert('DOM XSS弹窗成功')</script>

就可以成功进行攻击,可以通过控制URL来控制弹窗显示,DOM XSS攻击成功,下图为攻击详情。
image

XSS(Reflected)

在界面中选择选择XSS(Reflected),在name栏输入:

<script>alert('XSS攻击成功!')</script>

可以看见注入成功。
image
image

XSS(Stored)

在界面中选择选择XSS(Stored),填写name保证其不为空,在Message填写:

<script>alert('20232325XSS攻击成功!')</script>

点击 “Sign Guestbook” 提交。出现注入成功的提示符。点击左上角的刷新然后又出现了注入成功的提示符。每次刷新都会有注入成功的弹窗,那认为存储型XSS攻击注入成功。
image
image

4.6.3 CSRF

选择DVWA 中的CSRF漏洞测试,核心是利用用户已认证的身份,诱导其在不知情的情况下执行非预期操作(如修改密码、提交表单等)。
在 CSRF 页面输入新密码20232325,点击 “Change”,观察浏览器地址栏的请求 URL:

http://127.0.0.1:42001/vulnerabilities/csrf/?password_new=20232325&password_conf=20232325&Change=Change#

此时我在Test Creadentials中使用20232325登录是可以登录成功的,说明现在的密码就是20232325。
image
image

使用上述 URL,将password_new和password_conf改为攻击者指定的密码,我指定密码为attacker。生成一个新的URL:

http://127.0.0.1:42001/vulnerabilities/csrf/?password_new=attacker&password_conf=attacker&Change=Change#

image

此时我在Test Creadentials中使用20232325登录无法登录,我的密码就已经被修改了。而使用我指定的attacker就可以登录。
image
image

5. 问题及解决

问题一:

在实现Web前端 JavaScript时,编写代码想要访问网站时浏览器弹出如下窗口,无法正常使用。
image

解决一:

发现是因为Web服务器没有正确解析PHP文件,导致浏览器将PHP文件当作普通下载文件处理,而不是执行其中的代码。不能通过file://协议访问,必须通过服务器本地地址访问,在修改为本地地址访问后可以成功运行。

6. 心得体会

本次实验主要内容为Web安全,实验的目的为通过搭建Web应用环境,实践前后端开发,实践并深入理解SQL注入、XSS等常见安全漏洞原理与防护方法。

实验内容非常丰富,难度也并不低,比如现在使用的浏览器已经有了基础的防护措施,部分攻击手段过于拙劣不能成功,同时我也感受到我的Web前后端知识匮乏,有时候不得不依靠AI才能继续实验,之前学习过数据库课程所以还相对顺利,PHP部分耗费了我不短的时间进行调试与改正。后续DVWA平台的实践让我再次感受到了网络攻防的魅力所在,尽管耗费了我不少时间,但每一次成功都让我有不小的成就感。
总之,通过这次实验,我再次对网络攻防这门丰富的技术有了新的认识,也巩固和收获了很多新的知识。对于网络攻防,我知道我所掌握的知识仍旧不多,但是八次实验不仅是实践,更是指导方向,推动我在接下来的日子继续精进自己,努力锻炼自己的网络攻防技术。

posted @ 2025-12-02 19:03  DDD?  阅读(10)  评论(0)    收藏  举报