20232317 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
使用命令systemctl start apache2可启动Kali虚拟机中自带的Apache服务,命令systemctl status apache2.service可确认Apache状态,命令systemctl stop apache2可关闭Apache服务。
另外,如果虚拟机上安装启用了防火墙,还需使用命令ufw allow 'Apache'允许HTTP的流量进出防火墙。
屏幕截图 2025-12-04 161402
屏幕截图 2025-12-04 161529
打开浏览器,输入localhost,可以看到Apache的欢迎页面,说明Apache Web服务器安装成功。
屏幕截图 2025-12-04 161752

进入当前用户的/var/www/html目录下,新建一个html文件,使用命令vi 20232317cmc.html
屏幕截图 2025-12-04 162409
image
网页效果如下:
屏幕截图 2025-12-04 162516

2.2 Web前端JavaScript
在原HTML上加入JavaScript对用户输入进行验证
屏幕截图 2025-12-04 163641
最后网页效果如下:
屏幕截图 2025-12-04 170531
屏幕截图 2025-12-04 170642
屏幕截图 2025-12-04 170721
实现了用户输入验证和登录成功回显显示用户名的功能。

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

屏幕截图 2025-12-10 111040
可以看到注入成功;
使用HTML代码注入,注入代码为

HTML injection succeed.

,效果如下:
屏幕截图 2025-12-10 111121
可以看到注入成功。

2.3 Web后端MySQL基础
使用systemctl start mysql打开MySQL服务,systemctl status mysql确认服务状态
屏幕截图 2025-12-10 111251

输入下面的命令完成建库,修改密码,建表等操作:
mysql
-- 创建数据库
CREATE DATABASE 20232317db;
-- 使用数据库
USE 20232317db;
-- 创建用户
CREATE USER 'user20232317' IDENTIFIED BY 'Alex1234';
-- 授予用户权限
GRANT ALL PRIVILEGES ON 20232317db.* TO 'user20232317';
FLUSH PRIVILEGES;
-- 修改用户密码
ALTER USER 'user20232317' IDENTIFIED BY 'cmc1234';
-- 创建表
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 ('chenmuchuan', 'cmc1234');
-- 查看表中所有内容
SELECT * FROM testtable;
屏幕截图 2025-12-10 113811

2.4 Web后端编写PHP网页
PHP是Kali Linux里面本来就有的,不需要额外下载
屏幕截图 2025-12-13 165738

PHP代码来实现数据库连接和用户认证:
屏幕截图 2025-12-22 093528
屏幕截图 2025-12-13 174225
在之前的前端代码中将登录按钮的action改为执行该php文件
屏幕截图 2025-12-22 093459
之后我们尝试在前端登录,如图所示:
image
image
image
可以看到输入正确用户名密码可以成功登录,如果输入错误用户名密码会给出适当提示
2.5 SQL注入与XSS注入
实现SQL注入,只需要随机输入用户名,密码输入' OR '1'='1即可成功登录
image
在用户名中输入<img src=x onerror=alert("XSSInjectedSucceed")>,密码输入' OR '1'='1,即可实现XSS攻击
image

2.6 安装DVWA平台,并完成SQL注入、XSS、CSRF攻击
打开浏览器访问:http://localhost/DVWA ,用户名输入admin,密码输入password
image

登录后进入Database Setup界面,点击最下方的Create / Reset Database,再次在登陆界面输入用户名和密码进入DVWA主界面
image
SQL注入
提交payload为1
image
输入1 and 1=1#和1 and 1=2#返回结果没有变化,说明不是数字型注入
image
输入1' and 1=2#,没有结果返回,说明是字符型注入且单引号闭合。
image

输入1' order by 2#
image
没有问题,再递增,输入1' order by 3#
image
出现异常,说明猜测正确,字段为2。
输入' UNION SELECT 1,database() from information_schema.schemata#获取数据库名
image
image

XSS注入
观察网址,可以在URL里看到default参数的值,说明是get型,将网址处的English替换为<script>alert('20232317')</script>
image
替换(1)

CSRF
首先找到对应页面,输入和重复密码123456:
image
此时可以在网址处看到我的密码:http://127.0.0.1:42001/vulnerabilities/csrf/?password_new=123456&password_conf=123456&Change=Change#
若是我两次输入的密码不同,便会显示失败:
image
此时将我的网址更改为http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=20232317&password_conf=20232317&Change=Change#就可以成功了:
image

  1. 问题及解决方案
    问题1:虽然test.php能正常被 Apache 解析(说明 PHP 模块整体生效),但20232317cmc.php仍提示下载
    屏幕截图 2025-12-15 164608
    解决1:清除 Firefox 缓存:按Ctrl+Shift+Delete,勾选 “缓存”,点击 “清除数据”;或用隐私模式打开(Ctrl+Shift+P),访问http://localhost/20232317cmc.php测试是否直接显示执行结果(而非下载)。

  2. 学习感悟与思考
    本次 Web 安全实验让我实现了从理论到实践的重要跨越,对 Web 安全有了更为真切的认知。
    课堂上抽象的 SQL 注入、XSS 攻击等概念,在实战中变得具体可感。当我亲手搭建 LAMP 环境、编写前后端代码后,用' OR '1'='1注入语句成功绕过登录验证,关闭浏览器过滤器后 XSS payload 弹出警告框时,我深刻体会到这些漏洞的实际危害。
    实验也让我明白,Web 安全是环环相扣的整体。前端 JavaScript 验证无法替代后端防护,数据库配置失误、数据输出未转义等细节,都可能成为安全漏洞。同时,我也感受到理论与实践的差距,环境配置时的 PHP 解析问题、数据库权限错误等,都需要逐一排查解决。
    此次实验不仅提升了我的实战能力,更树立了细节致胜的安全理念。未来我会继续深耕,让理论与实践结合得更紧密。

posted @ 2025-12-23 01:27  20232317陈沐川  阅读(7)  评论(0)    收藏  举报