20222303 2021-2022-1 《网络与系统攻防技术》实验八实验报告

1.实验内容及要求

1.1实验内容

本周,通过学习HTML,我对Web安全有了更深入的理解。我掌握了如何创建和使用表单,并学习了GET和POST方法的区别与应用。此外,我了解了MySQL的基本操作,如创建数据库、管理用户和操作表格。在此过程中,我学会了如何利用恶意SQL语句绕过认证并获取敏感信息,同时也了解了通过使用预处理语句来防止SQL注入攻击的方法。同时,我还学习了XSS攻击原理,了解了如何通过用户输入注入恶意脚本,并学习了如何通过输出编码和输入过滤来有效防止XSS攻击。

1.2实验要求

  • (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

正常安装、启停Apache

因为kali默认已经安装Apache服务,所以我们只需要输入命令 /etc/init.d/apache2 start开启服务
然后还可以输入命令 /etc/init.d/apache2 status 查看当前Apache的服务状态
image
然后open http://127.0.0.1/就能够在浏览器中打开Apache的默认页面,如果出现就说明Apache没问题。
image

关闭apache,并查看状态,显示关闭
image

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

HTML中的表单是一个用来收集用户输入数据并将其发送到服务器的元素。表单由一对和标签包围,可以包含各种输入元素,如文本框、复选框、单选按钮、下拉框等。
GET和POST是HTTP协议中用于向服务器提交表单数据的两种方法。它们的主要区别在于数据传输方式和用途:
GET方法:
使用GET方法提交表单时,表单数据会附加在URL的末尾,以查询字符串的形式发送到服务器。
GET方法适用于向服务器请求数据,常用于搜索表单等不涉及敏感信息的场景。
使用GET方法提交的表单数据可以在浏览器的地址栏中看到,因此不适合传输敏感信息,如密码等。
POST方法:
使用POST方法提交表单时,表单数据会作为请求的一部分发送到服务器,而不会显示在URL中。
POST方法适用于向服务器提交敏感信息,如用户注册、登录等操作。
使用POST方法提交的表单数据不会显示在浏览器的地址栏中,相对更安全。

进入 /var/www/html路径,新建一个表单的html文件。
但是这个路径只有root权限下才能够进行修改,这里有两种操作方式,一种是在 /var/www/html下,选择使用root权限打开文件夹即可新建文档,另一种是先新建,然后再移动。
image
以下为20222303login.html代码:
image

然后在浏览器中启动打开网页,就是编写的html
image

2.3 Web前端javascipt

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

JavaScript是一种用于网页开发的脚本语言,它赋予网页动态和交互功能。通过JavaScript,您可以控制网页上的元素,响应用户的操作,并改变网页的外观和行为。
DOM(文档对象模型)是JavaScript操作网页的接口。它将网页中的每个元素都表示为对象,使您能够使用JavaScript来访问、修改和控制这些对象。DOM以树形结构组织网页内容,每个元素都是一个节点,您可以通过DOM操作节点来改变网页的结构和外观。

在原html的基础上添加一段JavaScript代码,判断用户是否填写邮箱和密码。
image

此外,再编写一个用于接收用户登陆数据的20222303login.php文件,使得在用户点击登陆按钮后回显“欢迎+输入的用户名”
image
注意:这两个文件编好后,一定要放在/var/www/html目录下!(而且在该目录下进行操作需要root权限)
因为php文件无法直接打开,必须先启动apache
然后打开浏览器,输入localhost/20222303login.html
image
没有输入用户名时:
image
没有输入密码时:
image
两个都输入后会跳转20222303login.php
image

2.3.2 尝试注入攻击2.3.2 尝试注入攻击

因为跳转后的php页面会回显用户名,利用这一点可以注入HTML及JavaScript。
例:登录时将用户名改为

跳转后网页就会出现弹窗
image

2.4 Web后端—MySQL基础

2.4.1 Web后端—MySQL基础

kali虚拟机自带mysql,输入systemctl start mysql开启MySQL服务
输入systemctl status mysql查看MySQL服务状态
没有也可使用图中代码安装
image
image

输入mysql -u root -p使用root权限进入,需要输入密码(就是你登录的密码)
建立数据库:CREATE DATABASE 20222303xpxhtml;
image
在数据库中创建登录表table user login (useremail VARCHAR(20),password VARCHAR(20));
在表中插入登录信息;
创建用户,设定密码;
image
将数据库20222303xpxhtml的所有权限授予当前用户
image
尝试使用新创建的用户登录数据库
image

2.4.2Web后端—连接数据库进行登录认证

在/var/www/html目录下新建一个PHP文件phptest.php
image

编写login.php
image

”xpx” “20222303” “20222303xpxhtml”分别是数据库用户名、密码、数据库名
把之前20222303login.html中的表单进行修改
删去onsubmit部分,把action内容改为login.php
image
在浏览器里输入localhost/20222303login.html
不输入账号密码
image
image

输入错误的账号密码
image

输入正确的账号密码
image

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

(1)SQL注入
SQL 注入是一种常见的 Web 攻击方式,攻击者通过在应用程序的输入字段中插入恶意的SQL代码,可以欺骗数据库服务器执行非授权的任意查询,从而获取、修改、删除或添加数据库中的数据。

在用户名输入框输入' or 1=1#,密码随意输入。
image

可以看到,虽然输入的账号密码明显错误,登录却成功了

原因在于,login.php中判断账号密码的核心语句是:
$sql="select * from user_login where username='$user'and password='$pwd'";
$res=mysqli_query($con,$sql);
$row=$res->num_rows;
第一句是设置了筛选的条件(账号密码一致)
第二句是根据筛选条件($sql),对数据库进行筛选
第三句是获取筛选结果($res)的行数($row),如果行数不为0,说明数据表中存在对应的元组,能成功登录。

但是,当我们输入账号为' or 1=1#时,它对应着第一句的$user,替换后筛选条件就变为了

$sql="select * from user_info where username='' or 1=1#'and password='$pwd'";

会将后面部分注释掉,而前面的'' or 1=1是永真式,用这个条件进行筛选,肯定能筛选出结果,也就会被判定为登录成功了。

(2)XXS攻击
XSS是一种代码注入攻击。攻击者在目标网站上注入恶意代码,当用户(被攻击者)登录网站时就会执行这些恶意代码。

首先尝试简单的恶意代码注入

image

失败了
其实失败的原因也很明显,XSS攻击需要运行我们注入的恶意代码,也就是说要让我们注入的” $user”生效,但是在编写login.php时,我设定在输入账号密码没通过验证时,页面并不显示” $user”,这样恶意代码就无法运行了。

到这里其实有两种解决思路:一是修改login.php,让它在账号密码没通过验证时也echo $user;二是绕过账号密码验证,结合上一步的SQL注入进行攻击。

如果用方法一,那简单修改login.php就行
image

如果用方法二,就将注入内容改为:
' or 1=1#
image
image

两种方法最终都能实现xss注入攻击

2.6 Webgoat平台的SQL注入、XSS、CSRF攻击

2.6.1 下载webgoat

Webgoat是用于进行WEB漏洞实验的应用平台,需要自行下载
参考下载教程:手把手教你在kali-Linux 2020.3安装webgoat_kali安装webgoat-CSDN博客
下载链接:https://github.com/WebGoat/WebGoat/releases
下载得到jar文件
将文件复制到虚拟机上(当然在主机上也可以使用)
用指令java -jar 文件名来启动webgoat
image

启动完成后,通过链接进入webgoat页面
一开始会进入login页面,需要我们注册账号
image

登录后进入webgoat页面
image

2.6.2 SQL注入攻击

SQL内容是A3部分的前三个

这里的9 10 11都是SQL注入练习
image
image
image

2.6.3 XSS攻击

A3的Cross Site Scripting部分就是XSS的内容
里面的第七题就是一个很简单的xss注入题
只需要在card number处输入script alert语句就行

image
image

2.6.4 CSRF攻击

CSRF (Cross-site request forgery,跨站请求伪造)是一种对网站的恶意利用。它与XSS不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户请求受信任的网站。
CSRF训练在A10处
对用户登录的请求源地址进行更换。
首先我们按F12打开网页的开发者工具
image

在元素(查看器)中找到提交查询(submit query)按钮的form
(鼠标指着的元素会在网页中被标出,可以利用这点来找form)
image

然后编写html文件
image

接着打开这个网页,点击按钮,就能获得flag值了
image
image

回到题目3,输入flag值即可过关
image

4.学习感悟

实验八的主要内容,一是web网页的编写,用html、js、php实现网页的登录认证功能;二是数据库的使用,通过mysql创建数据库数据表,将网页连接数据库以实现网页的登录认证功能;三是利用web的漏洞进行攻击,包括SQL注入攻击、XSS攻击、CSRF攻击等等。
在这次实验中,我见到了很多之前在web课上学到的知识,比如html、js、php文件的编写,apache服务器、mysql数据库的使用等等。
此外,我还学到了新的知识,比如Web网页存在的漏洞,以及利用web网页的漏洞进行攻击的各种方式。在实验中,我还认识了webgoat这个用于进行WEB漏洞实验的应用平台,通过它进行了不少web漏洞攻击的实验,受益匪浅。
在实验中,最令我印象深刻的,就是各种web攻击的方式。SQL注入攻击可以绕过登录认证、XSS可以让网页执行注入的恶意代码,CSRF能够跨网页实现请求的欺骗伪造……当然,这些漏洞也并非无法防范,在学习这些web漏洞的同时,我也了解到了防范攻击的各种方式。这也进一步提醒了我,注意网络安全的重要性。

posted @ 2024-12-03 18:09  便便狗  Views(3)  Comments(0Edit  收藏  举报