20202418 2022-2023-2 《网络与系统攻防技术》实验八实验报告

20202418 2022-2023-2 《网络与系统攻防技术》实验八实验报告

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、安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击。

2.实验过程

2.1 Web前端HTML

2.1.1 安装、启停Apache

systemctl start apache2 # 开启Apache服务
systemctl stop apache2 # 关闭Apache服务
其中,指令的第二个参数表示为:

start: 启动 Apache 服务
stop: 停止 Apache 服务
restart: 重新启动 Apache 服务
reload: 优雅的重启 Apache 服务。重载过程中,Apache 主进程首先关闭子进程,然后加载新配置,并且启动一个新的子进程。
status: 查看服务状态

2.1.2 HTML、表单、GET与POST

HTML是一种标记语言,用于创建网页和其他互联网应用程序的结构和内容。HTML使用标记来描述文档的结构和内容,这些标记被称为HTML标签。

表单是HTML中的一种元素,用于收集用户输入的数据。表单通常包含输入字段、单选按钮、复选框、下拉列表等元素,用户可以在这些元素中输入或选择数据。

GET和POST是HTTP协议中的两种请求方法。GET方法用于从服务器获取数据,而POST方法用于向服务器提交数据。GET方法将数据附加到URL的末尾,而POST方法将数据包含在请求的正文中。GET方法通常用于获取数据,而POST方法通常用于提交表单数据或其他敏感数据。

2.1.3 编写一个含有表单的HTML
<!DOCTYPE html> 
<html> 
<head> 
<title>20202418yzyLogin System</title> 
</head> 
<body> 
<h2>20202418yzyLogin System</h2> 
<form action="login.php" method="post"> 
<label for="username">Username:</label>
<input type="text" id="username" name="username" required>
<br><br> 
<label for="password">Password:</label>
<input type="password" id="password" name="password" required>
<br><br> 
<input type="submit" value="Login"> 
</form>
</body>
</html>

效果如下:
在火狐浏览器中,输入http://192.168.1.103/yzytest8.HTML
有点简陋
在这里插入图片描述

2.2 Web前端javascipt

2.2.1 编写javascipt

这里我们尝试编写如下规则:用户名、密码均不能为空、密码必须为8-16位。

function validateForm(){
	var username = document.getElementById("username").value;
	var password = document.getElementById("password").value;
	if(username == ""){
		alert("用户名不能为空!");}
	else if(password  == ""){
		alert("密码不能为空!");}
	else {
		document.write("欢迎"+username);}
 }
2.2.2 修改HTML

1、添加,声明我们要使用哪个javascipt语句。
2、表单修改为,实现表单和javascipt语句的连接。

<!DOCTYPE html>
<html>
<head>
    <title>20202418YZY</title>
    <meta charset="utf-8">
    <script src="login.js"></script>
</head>
<body>
    <h1>Login System</h1>
    <form name="login_form" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>
          <input type="button" name="login_btu" value="登录" onclick="validateForm()">
    </form>
</body>
</html>

2.2.3 实际效果

1、异常情况
在这里插入图片描述

在这里插入图片描述

2、正常登录的情况

在这里插入图片描述

2.2.4 注入攻击:利用回显用户名注入HTML及JavaScript

注入代码如下:

 <b>HTML注入攻击20202418</b> #HTML注入
 <script type="text/javascript"> alert("JavaScript注入攻击20202418") </script> #JavaScript注入

发现被加粗了(/b的效果)
在这里插入图片描述
JavaScript代码也成功执行!
在这里插入图片描述

2.3 Web后端:MySQL基础

2.3.1 打开mysql服务

systemctl start mysql # 打开mysql服务
systemctl status mysql # 查看服务当前状态

在这里插入图片描述

2.3.2 MySql的使用
2.3.2.1 Mysql的基本使用语句

mysql; # 进入mysql数据库
show databases; # 查看现有的数据库
use mysql; # 进入mysql数据库
在这里插入图片描述

select host, user, password from user; # 查看用户表数据
在这里插入图片描述

set password for ‘root’@‘localhost’ = password(‘20202418yzy’); # 修改root用户的密码
flush privileges; # 更新权限
在这里插入图片描述
如图所示,在root下的password已经更改成20202418yzy的哈希值了。
在这里插入图片描述
mysql -u root -p # 使用新密码进行登录测试
use mysql; # 进入mysql数据库
select host, user, password from user; # 查看用户表数据
在这里插入图片描述

2.3.2.2 建库加表

创建 20202418 数据库并进入使用。

create database yzy20202418; # 创建一个新数据库
show databases; # 查看现有的数据库
use yzy20202418; # 使用该数据库
在这里插入图片描述
在 yzy20202418 数据库中创建 成绩单表,并添加一条记录
create table test (uname VARCHAR(20),password VARCHAR(30)); # 在数据库中创建登陆用户表
insert into test values(‘网络与系统攻防技术’,‘99’); # 在登陆用户表中添加一条记录
select * from test; # 查看登陆用户表记录
在这里插入图片描述
好奇怪,是因为我没设置主键的原因嘛?怎么有两条一模一样的记录呢?

2.4 Web后端

2.4.1 PHP是啥

PHP是一种服务器端脚本语言,它被广泛用于Web开发。PHP可以嵌入HTML中,也可以作为独立的脚本运行。PHP的语法类似于C语言,它支持多种数据库,并且可以与HTML、CSS、JavaScript等前端技术结合使用,实现动态网页的开发。PHP还有许多开源框架和库,可以帮助开发者更快速、更高效地开发Web应用程序。

2.4.2 编写PHP网页,连接数据库,进行用户认证

在完成这一部分任务之前,我重新创建了数据库,将root的密码修改为了yzy20202418,创建了一个库叫yzy20202418,其中的记录为。
在这里插入图片描述

PHP网页如下:

 <?php
 $uname=$_POST["username"];
 $pwd=$_POST["password"];
 $query_struser="SELECT * FROM login where uname='$uname' and password='$pwd';";
 $mysqli = new mysqli("localhost", "root", "yzy20202418", "yzy20202418");
 $query_strdatabase="use yzy20202418;";
 	
  /* 先看看SQL语句对不对 */	
 echo $query_struser;


 if ($mysqli->connect_errno) {
 	printf("Connect failed: %s\n", $mysqli->connect_error);
 	exit();
 }
 echo "NICE!!!!!!";
   /* 出现一个NICE!!!!代表连接到数据库了 */	

 if ($result = $mysqli->query($query_strdatabase)) {
 	echo"<br>NICE!";
 }
   /* 出现一个NICE!有结果了 */	
if ($result->num_rows > 0 ){
 	echo "<br> Welcome {$uname}! <br> ";
 	} 
else {
 	echo "<br> Login Fail! <br> " ; 
 	}

 $result->close();
 $mysqli->close();
 ?>

HTML如下:

<!DOCTYPE html>
<html>
<head>
    <title>20202418</title>
    <meta charset="utf-8">
</head>
<body>
    <h1>20202418</h1>
    <form action="login.php" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username" required><br><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password" required><br><br>
        <input type="submit" value="Login">
    </form>
</body

2.4.3 效果如下

登陆成功:
在这里插入图片描述
登陆失败:
在这里插入图片描述

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

SQL注入是一种常见的Web应用程序攻击技术,攻击者通过在Web应用程序的输入框中注入恶意的SQL代码,从而获取或篡改数据库中的数据。SQL注入攻击通常利用Web应用程序没有对用户输入进行充分验证和过滤的漏洞,攻击者可以通过输入特定的字符或语句,绕过应用程序的身份验证和授权机制,直接访问数据库中的数据。
SQL注入攻击可以导致严重的安全问题,例如窃取用户的敏感信息、篡改或删除数据库中的数据、执行恶意代码等。为了防止SQL注入攻击,开发者应该对用户输入进行充分的验证和过滤,使用参数化查询或存储过程等安全的数据库访问方式,以及定期更新和维护应用程序和数据库的安全性。

2.5.1 SQL注入,注入永真式

以‘ or 1=1;–为用户名,查看结果。
在这里插入图片描述

如图所示,当uname = ‘’时,由于后面跟的是一个or 1=1的永真式,故用户名即便为’'也能登陆成功。
以yuzongyuan‘ or 1=1;–为用户名,查看结果。
在这里插入图片描述

2.5.2 XSS攻击测试

XSS(Cross-Site Scripting)攻击是一种常见的Web应用程序安全漏洞,攻击者通过在Web页面中注入恶意的脚本代码,从而在用户的浏览器中执行该代码,达到窃取用户信息、篡改页面内容、劫持用户会话等目的。XSS攻击通常利用Web应用程序没有对用户输入进行充分验证和过滤的漏洞,攻击者可以通过在输入框中输入特定的字符或语句,绕过应用程序的安全机制,注入恶意脚本代码。

XSS攻击可以分为反射型、存储型和DOM型三种类型。反射型XSS攻击是将恶意脚本代码作为URL参数发送给Web应用程序,然后将恶意代码反射回用户的浏览器中执行;存储型XSS攻击是将恶意脚本代码存储在Web应用程序的数据库中,然后在用户访问页面时从数据库中读取并执行;DOM型XSS攻击是通过修改页面的DOM结构来执行恶意脚本代码。

为了防止XSS攻击,开发者应该对用户输入进行充分的验证和过滤,使用安全的编码方式,例如将特殊字符转义为HTML实体,以及使用HTTP-only Cookie等安全措施。

输入

<script> alert("yzyXSS攻击") </script> # 弹出警告

在这里插入图片描述
输入:
在这里插入图片描述

 <img src="Image/123.jpg"/> # 显示图片

就有可能展示出隐私图片,由于这里我没有设置图片,因此逃过一劫。
在这里插入图片描述

2.6 安装Webgoat或类似平台,完成SQL注入、XSS、CSRF攻击

2.6.1 Webgoat环境的配置

进入下载地址https://github.com/WebGoat/WebGoat/releases。
下载红框框住的jar包。
在这里插入图片描述
在kali虚拟机中,输入

java -jar webgoat-2023.4.jar

即可完成安装

在这里插入图片描述

安装之后,在kali中打开网址:http://127.0.0.1:8080/WebGoat
按照提示注册即可。

2.6.2 SQL注入

在山羊中,SQL注入有好多模块,有入门的介绍和高级一些的题目,在这里我们就只做入门的题目。

2.6.2.1 What is SQL?

>
select department from Employees where first_name = ‘Bob’;

2.6.2.2 Data Manipulation Language (DML)

update employees set department =‘Sales’ where userid= 89762;

在这里插入图片描述

2.6.2.3 Data Definition Language (DDL)

由于截图太多了,这里就不显示了,仅展示正确答案。
alter table employees add “phone” char(20);

2.6.2.4 Data Control Language (DCL)

GRANT all ON grant_rights TO unauthorized_user

2.6.2.5 String SQL injection

这里的解题关键点在于前后有两个很难让人发现的单引号。
在这里插入图片描述

2.6.2.6 Numeric SQL injection

第一个空填任意数字
第二个空填 任意数字 or 1 = 1
在这里插入图片描述

2.6.2.7 Compromising confidentiality with String SQL injection

第一个空填:任意
第二个空填:任意’ or ‘1’ = '1
注意这个单引号的匹配问题即可
在这里插入图片描述

2.6.2.8 Compromising Integrity with Query chaining

第一个空为:任意
第二个空为:'; UPDATE employees SET salary=99999 WHERE first_name='John
成功调整自己的薪资。
在这里插入图片描述

2.6.2.9 Compromising Availability

yzy’; drop table access_log; –
通过;将sql语句隔开,–将后面的全部注释,实现删库跑路!
在这里插入图片描述

2.6.3 XSS攻击
2.6.3.1 Reflected XSS

依据题意,使用警告命令,仿照之前我们尝试过的XSS攻击实验,可知答案为:

<script> alert("20202418_Reflected XSS") </script>

在这里插入图片描述

2.6.3.2 DOM-BASED XSS

如下所示,输入start.mvc#test/即可
在这里插入图片描述

2.6.3.3 DOM-Based XSS

首先进入这个网页(修改host和port为对应的ip和端口)
http://host/:port/WebGoat/start.mvc#test/%3Cscript%3Ewebgoat.customjs.phoneHome()%3C%2Fscript%3E
进入之后,摁下F12,能看见下图所示的随机数,输入即可!
在这里插入图片描述

2.6.3.4 最后五道选择题

在这里插入图片描述
答案为43124

2.6.4 CSRF
2.6.4.1Post a review on someone else’s behalf

依据下述连接下载Burp Suite。
https://blog.csdn.net/qq_41453285/article/details/100897747
在这里插入图片描述

在这里插入图片描述

修改网页获取的方法,将GET方法换成POST方法即可。
在这里插入图片描述

3.问题及解决方案

  • 问题1:在www文件夹下无法创建文件
  • 问题1解决方案:权限问题,使用命令chmod 文件名 777,重新打开即可
  • 问题2:SQL注入时咋也成功不了,十分着急
  • 问题2解决方案:分号和引号匹配问题

4.学习感悟、思考等

作为一名网络空间安全专业的学生,在进行网络与系统攻防技术课程上的实验时,我深刻地认识到了网络安全的重要性。在当今信息化社会,互联网已经成为人们生活中必不可少的一部分,也成为了企业和机构进行业务促进和信息传播的关键手段。然而,网络安全问题也随之壮大,各种类型的网络攻击在每天都在发生。因此,网络安全需要得到越来越多的重视和保护。
最后,通过这次实验,我深切地认识到了网络安全的重要性,也认识到了自己还有很多需要学习和提升的地方。感谢王志强老师这一学期的耐心指导,也感谢王志强老师包容我在课堂上胡作非为!祝王老师身体健康、事业有成!

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值