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状态
    如图所示

屏幕截图 2025-12-01 092103

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

屏幕截图 2025-12-01 092358

2.1.2HTML表单功能实现

屏幕截图 2025-12-01 191719

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

屏幕截图 2025-12-08 154241

登录之后:

屏幕截图 2025-12-08 154533

URL中可以看到我输入的用户名20232429和密码123456

再编写以POST方式提交表单的代码

屏幕截图 2025-12-08 155745

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

屏幕截图 2025-12-08 160753

登录之后:

屏幕截图 2025-12-08 160824

再URL中看不到我输入的用户名20232429和密码123456。

2.2Web前端javascipt

2.2.1 JavaScript表单

编写如图所示的javascript前端代码

屏幕截图 2025-12-08 164605

屏幕截图 2025-12-08 164605

使用javascript编写的前端登录页面如图所示

  • 1.输入用户名20232429,6位密码123456,登录结果如图

屏幕截图 2025-12-08 165013

可见返回了密码不足8位

  • 2.输入用户名20232429,不输入密码,登录结果如图

屏幕截图 2025-12-08 165301

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

屏幕截图 2025-12-08 165349

2.2.2注入攻击

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

屏幕截图 2025-12-08 170910

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

屏幕截图 2025-12-08 171715

2.3Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表

2.3.1MySQL基础

  • 1.启动kali虚拟机中的MySQL服务,查看服务运行状态:
    输入命令systemctl start mysql启动服务,输入命令systemctl status mysql查看运行状态。如图所示:

屏幕截图 2025-12-08 173307

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

屏幕截图 2025-12-08 205254

2.4Web后端:编写PHP网页,连接数据库,进行用户认证

2.4.1编写PHP网页

编写如图所示的php代码

屏幕截图 2025-12-09 111849

登录网站,输入用户名和密码,查看结果

  • 1.输入正确的用户和密码

屏幕截图 2025-12-09 111935

登录成功。

  • 2.输入正确的用户名,错误的密码

屏幕截图 2025-12-09 112433

2.5最简单的SQL注入,XSS攻击测试

2.5.1 SQL注入

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

屏幕截图 2025-12-09 112530

2.5.2 XSS攻击测试

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

屏幕截图 2025-12-09 112631

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

2.6.1 按照csdn上的教程安装好webGoat平台

安装好、搭建好的网站如图所示:

屏幕截图 2025-12-09 172820

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。

结果:

屏幕截图 2025-12-09 175708

  • 2.第10题

屏幕截图 2025-12-09 175750

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

Login_Count:1

User_ID:1 or 1=1

屏幕截图 2025-12-09 180331

  • 3.第11题

屏幕截图 2025-12-09 180731

填空题,需要填写name和auth_tan。
填写数据:

Employee Name:1

TAN:' or '1'='1

结果:

屏幕截图 2025-12-09 181643

  • 4.第12题

屏幕截图 2025-12-09 181946

填空题,需要填写name和auth_tan。
填写数据:

Employee Name:Smith

TAN:3SL99A'; UPDATE employees SET SALARY = 100000 WHERE LAST_NAME = 'Smith

屏幕截图 2025-12-09 182311

  • 5.第13题:

屏幕截图 2025-12-09 183554

该部分需要通过SQL注入实现对表的删除。
填写的数据是

1'; drop table access_log; --

结果:

屏幕截图 2025-12-09 184055

2.6.3完成XSS

完成(A3)Injection→Cross Site Scripting部分的7、10、11题。

  • 1.第7题反射型XSS

屏幕截图 2025-12-09 184252

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

屏幕截图 2025-12-09 184531

第一个框中输入时可以成功。
在第2个输入框中输入JavaScript注入信息。
屏幕截图 2025-12-09 184614

失败。

  • 2.第10题基于DOM的XSS攻击

屏幕截图 2025-12-09 184953

右键点击检查,查找源代码。遍历查找所有以.js结尾的文件,全局搜索route,发现在GoatRouter.js文件中出现了路由信息。其中有记录:

Lesson/:name':'lessonRoute',

'test/:param':'testRoute',

与题干中给出的例子高度一致,合理推断其答案为:start.mvc#test/

屏幕截图 2025-12-09 191413

结果正确:

屏幕截图 2025-12-09 191453

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

屏幕截图 2025-12-09 191549

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

屏幕截图 2025-12-09 191907

成功解决

屏幕截图 2025-12-09 191953

2.6.4CSRF

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

屏幕截图 2025-12-09 192856

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

屏幕截图 2025-12-09 193337

成功解决

屏幕截图 2025-12-09 193428

3.问题及解决方案

问题一描述

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

屏幕截图 2025-12-09 104754

问题一解决:

询问豆包,得到豆包的解答之后发现了这一点,重新打开浏览器之后访问http://localhost/java.html ,成功解决了这个问题,成功跳转到了login.php

问题二描述

一开始的login.php编写有些问题,没有成功连接到数据库,导致在用user1登陆时,出现了报错

屏幕截图 2025-12-09 110053

问题二解决

修改了login.php中出现的连接数据库有关代码的问题,刷新了数据库状态之后就库成功显示是否登录成功了。

4.学习感悟、思考等

这次实验中的web有关部分搭建网站让我之前在javaweb课上学到的知识和网络攻防课程的知识联动了起来,搭建了一个有被SQL注入风险的登陆页面来学习SQL注入。之前总是听说SQL从入门到入狱,在实操之后确实是有道理的,这些攻击可以绕过一些在安全级别高的检测,更别说自己单间的没有安全保护的普通网站了,对网络安全有很大的威胁,要注意网络的安全,防范这些潜在的攻击,保护好个人隐私。

参考文献

如何搭建 DVWA 靶场保姆级教程(附链接)

如何搭建 WebGoat 靶场保姆级教程(附链接)

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

posted @ 2025-12-01 09:47  20232429马成栋  阅读(12)  评论(0)    收藏  举报