20232424 2025-2026-1 《网络与系统攻防技术》实验八实验报告
20232424 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
2.1.1 Apache Web服务器的安装与配置
此处需要使用Apache服务
Apache支持静态资源托管、动态内容解析(搭配 PHP/Python 等)、虚拟主机、负载均衡、URL 重写等核心 Web 服务需求
输入命令启动Kali虚拟机Apache服务
systemctl start apache2
systemctl start apache2.service
systemctl status apache2.service #查看Apache状态

打开浏览器,输入localhost验证:Apache成功启动

2.1.2 HTML表单功能实现
终端输入cd var/www/html,进入该目录,分别创建使用GET方法和使用POST方法提交表单的html文件
GET与POST是HTTP协议中两种核心表单提交方法,核心区别在于:GET将数据拼接在URL末尾传输,受长度限制、易暴露、可缓存,适用于查询/获取非敏感数据(如搜索、分页)且具有幂等性;POST将数据封装在请求体中,无明确长度限制、相对安全(需配合HTTPS保障敏感数据安全)、不缓存,适用于提交/修改数据(如登录、注册、文件上传)且非幂等
如图,使用GET方法可以看到用户明文输入的用户名与邮箱:

如图,使用POST方法无法看到明文数据:

2.2 Web前端 JavaScript
2.2.1 JavaScript表单功能实现
编写一个HTML文件,添加验证用户名、密码的规则

规则验证(用户名不为空且密码长度不少于6位):

2.2.2 注入攻击
利用回显用户名注入HTML

<h1 style="color:red;">你的页面被我篡改了!</h1>

注入图片
<img src="https://picsum.photos/200/100" alt="注入的图片" style="border:2px solid red;">

注入恶意网站
<a href="https://恶意网站.com" style="color:blue; font-size:18px;">点击领取100元红包</a>

跳转(网站并不存在)

2.3 Web后端MySQL
输入命令systemctl start mysql启动MySQL

输入mysql进入数据库,进行创建步骤
CREATE DATABASE db20232424; #创建数据库
USE db20232424; 进入数据库
CREATE USER 'user1' IDENTIFIED BY 'user@111'; #创建用户
GRANT ALL PRIVILEGES ON db20232409.* 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查看表内容:

2.4 使用PHP连接数据库
编写一个login.php用于连接数据库


再编写一个HTML文件作为后端验证通过后的跳转页面,命名为success.html
尝试登录:

成功跳转:

用户名与密码验证


2.5 基础攻击测试
2.5.1 SQL注入
万能密码注入,输入test01' OR '1'='1' #

成功登录:

2.5.2 XSS攻击
此处进行存储型XSS攻击,将tablefirst表第一条记录的username字段设置为<script>alert("存储型XSS成功!")</script>,此时使用其他用户登录成功后,由于没有使用htmlspecialchars()等转义函数,页面直接将数据库中的内容输出到了HTML中,浏览器会把<script>标签识别为合法的脚本代码,并自动执行其中的alert()语句

存储型XSS的本质是:恶意脚本被持久化存储到数据库中,当页面后续读取该数据并直接输出到 HTML(未做转义处理)时,脚本会被浏览器执行。

2.6 使用WebGoat平台,并完成SQL注入、XSS、CSRF攻击
环境准备:需要安装webgoat靶场,安装教程参考:https://blog.csdn.net/2302_82189125/article/details/135894689
2.6.1 SQL注入攻击
进入靶场后找到左侧导航栏(A3 Injection)-> SQL Injection(intro),完成题目9-13
①题目9
题目语句拼接后得到SELECT * FROM user_data WHERE first_name = 'John' and last_name = 'Smith' or 1=1
此时1=1是恒成立的条件,使得整个WHERE子句逻辑变为 “真”,因此查询会返回user_data表中的所有数据,而非仅匹配John且lastName为Smith的记录。

②题目10
题目说明“仅一个字段可注入”,需构造输入使WHERE子句恒成立:原查询逻辑为:WHERE login_count = Login_Count AND userid = User_ID需通过注入使条件变为“永真”,同时注释掉后续条件。
在Login_Count栏填1,在userid填1 OR 1=1 --,拼接后的查询语句为SELECT * FROM user_data WHERE login_count = 1 and userid = 1 OR 1=1 -- ,此时WHERE子句条件恒为真,因此返回表中所有数据。

③题目11
该题目场景:员工 John Smith 通过系统注入获取所有同事的薪资数据,系统原查询为字符串拼接形式:SELECT * FROM employees WHERE last_name = '' + name + '' AND auth_tan = '' + auth_tan + '';,特征:last_name(员工姓名)、auth_tan(认证码)均为字符串参数,查询通过单引号包裹用户输入后直接拼接,无输入过滤,存在字符串 SQL 注入漏洞
注入输入:Employee Name填入1;Authentication TAN填入' or '1'='1,拼接后的恶意查询为SELECT * FROM employees WHERE last_name = '1' AND auth_tan = '' or '1'='1';,'闭合了原查询中auth_tan的单引号;
or '1'='1引入恒真条件('1'='1是永真表达式),使整个WHERE子句结果为真;最终查询会返回employees表的所有数据,无需匹配特定姓名或认证码

④题目12
原查询"SELECT * FROM employees WHERE last_name = '" + name + "' AND auth_tan = '" + auth_tan + "'";
注入输入Employee Name:Smith;Authentication TAN :1'; UPDATE employees SET SALARY = 999999 WHERE LAST_NAME = 'Smith'; --
最终输入为SELECT * FROM employees WHERE last_name = 'Smith' AND auth_tan = '1'; UPDATE employees SET SALARY = 999999 WHERE LAST_NAME = 'Smith'; --',执行后,John Smith 的薪资被修改为 999999(成为最高薪资),数据完整性被非法破坏

⑤题目13
该题目要求删除日志表,避免留痕
输入1'; drop table access_log; --,开头的';'使得查询语句结束,之后写入删除表语句,并通过'--'注释后续内容,执行删表语句

2.6.2 完成XSS攻击
完成(A3)Injection→Cross Site Scripting的7、10、11题
①题目7
该题目为反射型XSS攻击,分别尝试在两个框中输入,发现只有在第一个框内输入时才能攻击成功

②题目10
这个题是基于DOM的XSS攻击,要找到在生产过程中留在应用程序中的测试代码的路径。
题目说明"The ‘base route’ in this case is: start.mvc#lesson",js文件中有“‘test/:param’: ‘testRoute’”,因此答案为“start.mvc#test/”。

③题目11
该题是基于DOM的XSS攻击,需要从route中反射参数webgoat.customjs.phoneHome(),给出控制台显示一个响应的随机数。构造URL并访问:http://127.0.0.1:8080/WebGoat/start.mvc#test/param1=foobar¶m2=DOMXSS<script>webgoat.customjs.phoneHome()<%2Fscript>,可以看到控制台给出了随机数“1443434745”,返回题目页面提交,成功


3.问题及解决方案
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX - ...
4.学习感悟、思考等
xxx xxx

浙公网安备 33010602011771号