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的服务状态
然后open http://127.0.0.1/就能够在浏览器中打开Apache的默认页面,如果出现就说明Apache没问题。
关闭apache,并查看状态,显示关闭
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权限打开文件夹即可新建文档,另一种是先新建,然后再移动。
以下为20222303login.html代码:
然后在浏览器中启动打开网页,就是编写的html
2.3 Web前端javascipt
2.3.1 理解JavaScript的基本功能,理解DOM
JavaScript是一种用于网页开发的脚本语言,它赋予网页动态和交互功能。通过JavaScript,您可以控制网页上的元素,响应用户的操作,并改变网页的外观和行为。
DOM(文档对象模型)是JavaScript操作网页的接口。它将网页中的每个元素都表示为对象,使您能够使用JavaScript来访问、修改和控制这些对象。DOM以树形结构组织网页内容,每个元素都是一个节点,您可以通过DOM操作节点来改变网页的结构和外观。
在原html的基础上添加一段JavaScript代码,判断用户是否填写邮箱和密码。
此外,再编写一个用于接收用户登陆数据的20222303login.php文件,使得在用户点击登陆按钮后回显“欢迎+输入的用户名”
注意:这两个文件编好后,一定要放在/var/www/html目录下!(而且在该目录下进行操作需要root权限)
因为php文件无法直接打开,必须先启动apache
然后打开浏览器,输入localhost/20222303login.html
没有输入用户名时:
没有输入密码时:
两个都输入后会跳转20222303login.php
2.3.2 尝试注入攻击2.3.2 尝试注入攻击
因为跳转后的php页面会回显用户名,利用这一点可以注入HTML及JavaScript。
例:登录时将用户名改为
跳转后网页就会出现弹窗
2.4 Web后端—MySQL基础
2.4.1 Web后端—MySQL基础
kali虚拟机自带mysql,输入systemctl start mysql开启MySQL服务
输入systemctl status mysql查看MySQL服务状态
没有也可使用图中代码安装
输入mysql -u root -p使用root权限进入,需要输入密码(就是你登录的密码)
建立数据库:CREATE DATABASE 20222303xpxhtml;
在数据库中创建登录表table user login (useremail VARCHAR(20),password VARCHAR(20));
在表中插入登录信息;
创建用户,设定密码;
将数据库20222303xpxhtml的所有权限授予当前用户
尝试使用新创建的用户登录数据库
2.4.2Web后端—连接数据库进行登录认证
在/var/www/html目录下新建一个PHP文件phptest.php
编写login.php
”xpx” “20222303” “20222303xpxhtml”分别是数据库用户名、密码、数据库名
把之前20222303login.html中的表单进行修改
删去onsubmit部分,把action内容改为login.php
在浏览器里输入localhost/20222303login.html
不输入账号密码
输入错误的账号密码
输入正确的账号密码
2.5 简单的SQL注入,XSS攻击测试
(1)SQL注入
SQL 注入是一种常见的 Web 攻击方式,攻击者通过在应用程序的输入字段中插入恶意的SQL代码,可以欺骗数据库服务器执行非授权的任意查询,从而获取、修改、删除或添加数据库中的数据。
在用户名输入框输入' or 1=1#,密码随意输入。
可以看到,虽然输入的账号密码明显错误,登录却成功了
原因在于,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是一种代码注入攻击。攻击者在目标网站上注入恶意代码,当用户(被攻击者)登录网站时就会执行这些恶意代码。
首先尝试简单的恶意代码注入
失败了
其实失败的原因也很明显,XSS攻击需要运行我们注入的恶意代码,也就是说要让我们注入的” $user”生效,但是在编写login.php时,我设定在输入账号密码没通过验证时,页面并不显示” $user”,这样恶意代码就无法运行了。
到这里其实有两种解决思路:一是修改login.php,让它在账号密码没通过验证时也echo $user;二是绕过账号密码验证,结合上一步的SQL注入进行攻击。
如果用方法一,那简单修改login.php就行
如果用方法二,就将注入内容改为:
' or 1=1#
两种方法最终都能实现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
启动完成后,通过链接进入webgoat页面
一开始会进入login页面,需要我们注册账号
登录后进入webgoat页面
2.6.2 SQL注入攻击
SQL内容是A3部分的前三个
这里的9 10 11都是SQL注入练习
2.6.3 XSS攻击
A3的Cross Site Scripting部分就是XSS的内容
里面的第七题就是一个很简单的xss注入题
只需要在card number处输入script alert语句就行
2.6.4 CSRF攻击
CSRF (Cross-site request forgery,跨站请求伪造)是一种对网站的恶意利用。它与XSS不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户请求受信任的网站。
CSRF训练在A10处
对用户登录的请求源地址进行更换。
首先我们按F12打开网页的开发者工具
在元素(查看器)中找到提交查询(submit query)按钮的form
(鼠标指着的元素会在网页中被标出,可以利用这点来找form)
然后编写html文件
接着打开这个网页,点击按钮,就能获得flag值了
回到题目3,输入flag值即可过关
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漏洞的同时,我也了解到了防范攻击的各种方式。这也进一步提醒了我,注意网络安全的重要性。