20232429 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.1Web前端HTML
2.1.1 Apache Web服务器的安装与配置
- 1.使用命令
systemctl start apache2可启动Kali虚拟机中自带的Apache服务,命令systemctl status apache2.service来确认Apache状态
如图所示

- 2.打开浏览器,输入localhost,可以看到Apache的欢迎页面,说明Apache Web服务器安装成功。
如图所示

2.1.2HTML表单功能实现

使用GET方式提交表单的前端

登录之后:

URL中可以看到我输入的用户名20232429和密码123456
再编写以POST方式提交表单的代码

使用POST方式提交表单的前端

登录之后:

再URL中看不到我输入的用户名20232429和密码123456。
2.2Web前端javascipt
2.2.1 JavaScript表单
编写如图所示的javascript前端代码


使用javascript编写的前端登录页面如图所示
- 1.输入用户名20232429,6位密码123456,登录结果如图

可见返回了密码不足8位
- 2.输入用户名20232429,不输入密码,登录结果如图

- 3.正确输入用户名20232429和8位密码12345678,登录结果如图

2.2.2注入攻击
利用回显用户名注入HTML
在用户名中输入<u>HTML injection succeed.</u>来进行注入,效果如图所示:

发现注入成功
进行javascript注入
在用户名框中输入<img src='M' onerror='document.body.innerHTML = "JavaScript injection succeed."'>
通过这段代码区加载一个叫“M”的图片,但是图片“M”不存在,触发加载错误,然后执行java代码注入,显示java注入成功,效果如图所示:

2.3Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
2.3.1MySQL基础
- 1.启动kali虚拟机中的MySQL服务,查看服务运行状态:
输入命令systemctl start mysql启动服务,输入命令systemctl status mysql查看运行状态。如图所示:

输入mysql,启动mysql之后进行随后进行数据库创建,用户创建、授权,建表、插入查看数据等操作。
创建数据库db20232429,创建用户user1和用户user2、修改用户密码、建用户表、将用户数据插入用户表,结果如图:

2.4Web后端:编写PHP网页,连接数据库,进行用户认证
2.4.1编写PHP网页
编写如图所示的php代码

登录网站,输入用户名和密码,查看结果
- 1.输入正确的用户和密码

登录成功。
- 2.输入正确的用户名,错误的密码

2.5最简单的SQL注入,XSS攻击测试
2.5.1 SQL注入
当已知用户名时,可在密码框注入' OR '1'='1。这使得后端拼接的SQL查询条件由验证特定密码,转变为AND pwd='' OR '1'='1'。由于'1'='1'恒成立,整个WHERE子句返回值恒为真,导致无需密码即可登录。

2.5.2 XSS攻击测试
不知合法账号,攻击者任然可以在用户名与密码栏中均输入' OR '1'='1这类永真条件,从而绕过整个身份验证逻辑,实现非法登录。

2.6 安装DVWA或WebGoat平台,并完成SQL注入、XSS、CSRF攻击。
2.6.1 按照csdn上的教程安装好webGoat平台
安装好、搭建好的网站如图所示:

2.6.2完成SQL注入攻击
在webgoat中完成A3的9-13题
- 1.第9题
![屏幕截图 2025-12-09 175213]()
题目该处的问题是SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '____ + ____+ ____';
选择的三个数据是Smith';or;'1'='1。
结果:

- 2.第10题

该部分为填空题,需要填写Login_Count和User_ID
填写数据:
Login_Count:1
User_ID:1 or 1=1

- 3.第11题

填空题,需要填写name和auth_tan。
填写数据:
Employee Name:1
TAN:' or '1'='1
结果:

- 4.第12题

填空题,需要填写name和auth_tan。
填写数据:
Employee Name:Smith
TAN:3SL99A'; UPDATE employees SET SALARY = 100000 WHERE LAST_NAME = 'Smith

- 5.第13题:

该部分需要通过SQL注入实现对表的删除。
填写的数据是
1'; drop table access_log; --
结果:

2.6.3完成XSS
完成(A3)Injection→Cross Site Scripting部分的7、10、11题。
- 1.第7题反射型XSS

在第一个输入框中输入JavaScript注入信息。

第一个框中输入时可以成功。
在第2个输入框中输入JavaScript注入信息。

失败。
- 2.第10题基于DOM的XSS攻击

右键点击检查,查找源代码。遍历查找所有以.js结尾的文件,全局搜索route,发现在GoatRouter.js文件中出现了路由信息。其中有记录:
Lesson/:name':'lessonRoute',
'test/:param':'testRoute',
与题干中给出的例子高度一致,合理推断其答案为:start.mvc#test/

结果正确:

- 3.第11题基于DOM的XSS攻击

在URL中输入http://127.0.0.1:8080/WebGoat/start.mvc#test/param1=foobar¶m2=DOMXSS%3Cscript%3Ewebgoat.customjs.phoneHome()%3C%2Fscript%3E ,最终在控制台中得到了响应的随机数-1919359546。

成功解决

2.6.4CSRF
完成(A10)Server-side Request Forgeries部分的第8题

这道题模拟了登录CSRF攻击。由用户扮演攻击者,需创建一个恶意账号(csrf-用户名),在保持原账号登录的情况下登录新的恶意账号,最后回到原账号点击按钮。

成功解决

3.问题及解决方案
问题一描述
一开始编写好java.html和login.php之后直接从var/www/html的目录里面打开了,误以为是正常的浏览器中的网站,实际地址并不是http://localhost/java.html ,而是file://var/www/html/java.html,这就导致了我在填写好用户名和密码之后点击登录直接以只读的形式打开了我的login.php文件,而不是按照预期的连接数据库回显是否登录成功

问题一解决:
询问豆包,得到豆包的解答之后发现了这一点,重新打开浏览器之后访问http://localhost/java.html ,成功解决了这个问题,成功跳转到了login.php
问题二描述
一开始的login.php编写有些问题,没有成功连接到数据库,导致在用user1登陆时,出现了报错

问题二解决
修改了login.php中出现的连接数据库有关代码的问题,刷新了数据库状态之后就库成功显示是否登录成功了。
4.学习感悟、思考等
这次实验中的web有关部分搭建网站让我之前在javaweb课上学到的知识和网络攻防课程的知识联动了起来,搭建了一个有被SQL注入风险的登陆页面来学习SQL注入。之前总是听说SQL从入门到入狱,在实操之后确实是有道理的,这些攻击可以绕过一些在安全级别高的检测,更别说自己单间的没有安全保护的普通网站了,对网络安全有很大的威胁,要注意网络的安全,防范这些潜在的攻击,保护好个人隐私。

浙公网安备 33010602011771号