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

本文详细描述了一个涵盖Web前端和后端的基础安全实验,包括HTML表单创建、JavaScript验证、MySQL数据库操作、PHP用户认证以及SQL注入和XSS攻击的测试。实验通过WebGoat平台进一步实践了SQL注入和CSRF攻击。作者强调了网络安全学习的重要性,特别是持续学习以应对不断演变的威胁。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

开启Apache服务
在这里插入图片描述
接下来在var/www/html路径下写一个包含表单的html,并将其命名为fanbingtian.html

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>library</title>
<link rel="stylesheet" type="text/css"  href="style.css">
</head>
<body>
	<img style="margin-top: -9px" src="20202422.jpg">
	<div class="tpt-login">
		<h1>FanBingtian Library</h1>
		<form name="form1" method="post" action="" >
			请输入用户名:<input type="text" name="usrname" placeholder="请输入用户名"/> <br>
			密码:<br> <input type="password" name="pwd" placeholder="密码"/> <br>
			<input type="submit" name="sub1" value="确定" /> 
			<input type="reset" name="sub1" value="重置" />
			<tr>
			</tr>
		</form>
	</div>
</body>
</html>

在这里插入图片描述

接下来在kali的浏览器中输入

http://127.0.0.1/fanbingtian.html

打开html网页
在这里插入图片描述

2.2 Web前端javascipt

为了实现web前端的功能,需要对原有的html文件进行修改,并在原有文件基础上添加一段JavaScript代码,用以完成对用户是否填写用户名和密码的判断。没有输入密码或用户名,前段会弹出提示框。

<script type = "text/javascript">
    function validateForm() {
      var username = form1.usrname.value;
      var password = form1.pwd.value;
      if (username == "" ) {
        alert("请输入用户名");
        return false;
      }
      if (password == "" ) {
        alert("请输入密码");
        return false;
      }
      alert("欢迎你,"+username);

    }
</script>

加入这段代码后,还需要在表单中加入οnsubmit="return validateForm()"的部分,才能使表单提交后执行javascript代码。
在这里插入图片描述
如图,没有输入密码会弹出提示框
在这里插入图片描述
如图没有输入用户名也会弹出提示框

在这里插入图片描述

2.3 Web后端:MySQL基础

因为kali自带mysql,所以不需要另外安装,直接开启mysql即可,

systemctl start mysql #开启mysql
systemctl status mysql #查看mysql运行状态

如果是第一次使用mysql,可以直接进入mysql数据库,进入之后再修改root用户密码,用于之后php文件通过数据库用户名和密码成功连接到数据库。

sudo mysql -u root #以root用户进入数据库
set password for root@'localhost'= password('20202422');#修改root用户密码

在这里插入图片描述
然后,需要在数据库中建表,并尝试插入数据

create database 2422web; //创建数据库
use 2422web;  //使用数据库
create table user (username VARCHAR(20),password VARCHAR(20));  //创建表
insert into user values('fanbingtian','20202422');   //插入登录用户数据

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

接下来编写一个php文件用于连接刚才建立的数据库,并对用户输入和数据库中数据进行比对,也就是查询语句,如果数据存在该记录,则向前端返回登录成功,否则登录失败。

<?php
 header("Content-type:text/html;charset=utf-8");
  echo"<br> it's using php! <br>";
 $uname=$_POST["usrname"];
 $pwd=$_POST["pwd"];
 echo"<br> Successfully accept POST!<br>";
 $query_struser="SELECT * FROM user where username='$uname' and password='$pwd';";

 $mysqli = new mysqli("localhost", "root", "20202422", "2422web");
 $query_strdatabase="use 2422web;";

 if ($mysqli->connect_errno) {
 	printf("Connect failed: %s\n", $mysqli->connect_error);
 	exit();
 }

 
 if ($result = $mysqli->query($query_strdatabase)) {
 	echo"<br> Connected to 2422web Successfully! <br>";
 }

echo "<br> xss {$uname} welcome ! <br> "; //用于XSS攻击

 if ($result = $mysqli->query($query_struser)) {
 	if ($result->num_rows > 0 ){
 		echo "<br> Welcome {$uname}! <br> ";
 	} 
 	else {
 		echo "<br> Login Fail! <br> " ; 
 	}
 /* free result set */
 $result->close();
 }
 $mysqli->close();
 ?>

当然html文件的表单中的action必须指定为刚才编写的php文件,否则无法成功交给后端。
在这里插入图片描述
接下来,再次打开刚才的网址http://127.0.0.1/fanbingtian.html,进行验证

首先,随便输入一个错误的用户名和密码
在这里插入图片描述

显示登录失败
在这里插入图片描述
然后再正确输入,刚才创建的数据库中的用户名和密码
在这里插入图片描述
显示登录成功
在这里插入图片描述

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

2.5.1 SQL注入攻击

首先尝试在用户名框输入

'or 1=1#

这样以来,无论密码怎样输入,都可以登录成功
在这里插入图片描述

在这里插入图片描述

2.5.2 XSS攻击

首先需要在用户框输入

<script> alert ('20202422XSS attack'); </script>

然后随便输入一个密码,浏览器页面在弹出欢迎你的对话框后会紧接着弹出xss攻击 alert (‘20202422XSS attack’)所弹出的内容,原因是调用了一个 alert ()方法。
在这里插入图片描述
xss漏洞可以成功实现的原因是因为php文件中存在下面一行代码

echo "<br> xss {$uname} welcome ! <br> "; 

这行代码会将 xss {$uname} welcome 输出到界面,而$uname正好是输入的用户名,如果用户输入一个可以执行的脚本,那么就可以成功利用这个漏洞,得以执行

在这里插入图片描述

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

2.6.1 SQL注入攻击

首先在网上下载jar包,下载完成后,在jar包所在的目录下,打开终端
输入命令,运行webgoat

java -jar webgoat-2023.4.jar

在这里插入图片描述
接下来在浏览器中输入http://127.0.0.1:8080/WebGoat/
随后注册一个新用户

在这里插入图片描述
登录进来以后在左侧的页框中选择injection->SQL injection(info),随后在下拉框中选择合适的选项用以构成一个能够成功进行sql注入攻击的sql查询语句。
在这里插入图片描述

选择好下拉框中的选项后,点击右侧的“Get Account info”,可以显示在下面显示出成功查询出的各条纪录。
为什么可以成功查询出数据库的所有信息呢,是因为构造后的sql语句为:SELECT * FROM user_data WHERE first_name = 'John' and last_name = 'Smith' or '1' = '1’,在sql语句中用or连接符相连的是’1’=‘1’,是永真的,所以该查询语句会查询出表中的所有数据。

2.6.2 XSS注入攻击

这个xss攻击其实非常简单,只要在用户输入框输入<script>alert("20202422fbt")</script>即可完成。
因为xss攻击是基于网站后端存在的漏洞,如果后端会将用户输入输出到网页上,就可以尝试构造含有恶意脚本的输入比如,我用的就是alert("20202422fbt"),是一个alert方法。
如图,页面成功弹出了提示框,xss攻击成功。
在这里插入图片描述

2.6.3 CRSF攻击

首先按“F12”进入开发者模式,随后可以看到在浏览器下方出现了一大堆网页源代码
接下来先点击最左侧的小方框图标,随后我们把鼠标移动到页面上方的“Submit Query”时,页面下方的代码框就会显示出与之对应的form表单的代码。
在这里插入图片描述
我把这段代码copy下来,复制到新创建的html文件中,并在开头结尾加上html标签和body标签。
在这里插入图片描述
然后再用浏览器打开fbt.html,可以看到页面中只有一个提交框"Submit Query"
在这里插入图片描述
点击"Submit Query",就可以成功获取flag值
然后回到WebGoat提交flag,即可验证该部分实践成功完成。
在这里插入图片描述
在这里插入图片描述
但是做完以后我对csrf攻击的原理还不是很清楚,所以我特意上网学习了一下有关知识
CSRF是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。可以简单的理解为:攻击者可以盗用你的登陆信息,以你的身份模拟发送各种请求对服务器来说这个请求是完全合法的,但是却完成了攻击者所期望的一个操作,比如以你的名义发送邮件、发消息,盗取你的账号,添加系统管理员,甚至于购买商品、虚拟货币转账等。攻击者只要借助少许的社会工程学的诡计,例如通过 QQ 等聊天软件发送的链接(有些还伪装成短域名,用户无法分辨),攻击者就能迫使 Web 应用的用户去执行攻击者预设的操作。

3.学习感悟、思考等

至此,本学期《网络与系统攻防技术》课程的实验部分就结束了。还记得第一次做实验是最折磨的,因为经验不足、知识储备太少,硬是研究不明白怎么做。后来经过王老师一学期的辛勤栽培,加之自己的努力,已经具备了一定的网络与系统攻防的意识和能力,能够完成系统和web攻击,能够对恶意代码进行分析和溯源,能够独立完成大作业和课设的项目。
网络与系统的攻击防御技能永远都是魔高一尺道高一丈,随着科技的更新和发展永远有学不完的知识和技能,需要不断保持学习的劲头,才能成为主导者。这门课的知识广度和深度都比较大,学着一点都不轻松,但是学完我受益匪浅。
感谢王老师一学期以来的辛勤付出!师父领进门、修行在个人,今后我仍旧会继续学习这个领域相关前沿内容。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值