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

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

cover

1.实验内容

本次的实验内容非常的丰富,涉及到的方面也非常的多。首先通过Debian自带的Apache开启Web前端的实验,能够制作简单的网站页面,通过表单进行信息的提交。结合JavaScript,进行提交信息的判别并进行跳转。在后端使用MySQL数据库,进行一些基本的数据库操作,将前后端相结合,进行登录演示。通过这些步骤,我们相当于搭建了一个目标靶机,然后我们通过这歌靶机进行SQL注入和XSS攻击测试。除此之外,使用WebGoat平台进行SQL注入,XSS攻击和CSRF攻击模拟。

2.实验内容

2.1-Web前端HTML

因为Kali是基于Debian进行添加了一些特殊的东西的,所以Kali还是继承了一些Debian的东西,就比如Apache,而且这是默认开启的,可以在Shell中输入

service apache2 start

1

进行Apache的开启,然后输入

open http://127.0.0.1/

就能够在浏览器中打开Apache的默认页面,如果出现就说明Apache没问题。
2

接着理解一下HTML,表单和GET,POST方法。这次就让Bing AI来回答一下好了。反正可以用ChatGPT。
4

HTML是一种标记语言,用于创建网页。表单是HTML中的一种元素,用于收集用户输入的数据。POST和GET方法是HTTP协议中的两种请求方法,用于向服务器发送数据。POST方法将表单数据包含在请求体中发送到服务器,而GET方法将表单数据附加在URL中发送到服务器。POST方法通常用于提交敏感数据,如用户名和密码等,而GET方法通常用于不敏感的信息,如分页等。

再用ChatGPT写一个简单的登录页面,其中包括判定用户名和密码是否为空的JS代码,还有返回的登录成功登录失败的PHP页面。
3
5

2.2-Web前端javascipt

先给上完整的代码。

login.html

<!DOCTYPE html>
<html>
<head>
	<title>20202411</title>
	<style>
		body {
			background: linear-gradient(to bottom right, #00aaff, #ff00aa);
			font-size: 2em;
			color: white;
			display: flex;
			flex-direction: column;
			align-items: center;
			justify-content: center;
			height: 100vh;
		}
		h1 {
			animation: jump 1s infinite;
		}
		@keyframes jump {
			0% {
				transform: translateY(0);
			}
			50% {
				transform: translateY(-10px);
			}
			100% {
				transform: translateY(0);
			}
		}
		p {
			margin-top: 2em;
		}
	</style>
	<script>
		function validateForm() {
			var username = document.forms["loginForm"]["username"].value;
			var password = document.forms["loginForm"]["password"].value;
			if (username == "" || password == "") {
				alert("Please enter both username and password.");
				return false;
			}
		}
	</script>
</head>
<body>
	<h1>20202411</h1>
	<h2>Login Form</h2>
	<form name="loginForm" action="login.php" method="POST" onsubmit="return validateForm()">
		<label for="username">Username:</label>
		<input type="text" id="username" name="username"><br><br>
		<label for="password">Password:</label>
		<input type="password" id="password" name="password"><br><br>
		<input type="submit" value="Submit">
	</form>
	<p>powered by ChatGPT</p>
</body>
</html>

login.php

<!DOCTYPE html>
<html>
<head>
	<title>20202411</title>
	<style>
		body {
			background: linear-gradient(to bottom right, #00aaff, #ff00aa);
			font-size: 2em;
			color: white;
			display: flex;
			flex-direction: column;
			align-items: center;
			justify-content: center;
			height: 100vh;
		}
		h1 {
			animation: jump 1s infinite;
		}
		@keyframes jump {
			0% {
				transform: translateY(0);
			}
			50% {
				transform: translateY(-10px);
			}
			100% {
				transform: translateY(0);
			}
		}
		p {
			margin-top: 2em;
		}
	</style>
</head>
<body>
	<h1>20202411</h1>
	<?php
		$username = $_POST["username"];
		echo "<p>Welcome, $username!</p>";
	?>
	<p>powered by ChatGPT</p>
</body>
</html>

7
8

理解一下JavaScript和DOM,看看BIng AI的回答。
6

Javascript是一种脚本语言,用于在网页中添加交互性。DOM(文档对象模型)是一种API,用于访问和操作HTML文档的元素。它允许JavaScript通过添加、删除和修改HTML元素来动态地更新网页。DOM将HTML文档表示为一个树形结构,其中每个元素都是一个节点。节点可以具有属性、方法和事件处理程序,这些属性、方法和事件处理程序可以通过JavaScript进行访问和操作。希望这能帮到你!

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

Kali应该也是默认安装MySQL的,在Shell中输入

service mysql start

开启MySQL服务,然后因为不知道密码是什么,所以用root权限进行登录,就不需要密码。输入

sudo mysql -u root
show databases;

查看已有数据库信息。
9

use mysql;
select user, password, host from user;
set password for root@'localhost'= password('20202411');
select user, password, host from user;
flush privileges;

更新密码为20202411,然后就可以通过这个密码登录root用户。
10

在MySQL中输入

create database csh;
show databases;
use csh;
create table login (username VARCHAR(20),password VARCHAR(20));
show table;
insert into login values('20202411@csh.com','20202411');
select * from login;
grant select,insert,update,delete on csh.* to chenshuhuan@localhost identified by "20202411";

新建名为csh的数据库,并在这个数据库中创建名为login的表格,表头有usernamepassword。再在这个表中插入用户名为20202411@csh.com和密码为20202411的条目。最后再添加名为chenshuhuan的用户可以通过本机使用20202411作为密码进行登录。这个是给前端去连接数据库提供条件。
11
12
13

mysql -u chenshuhuan -p

输入密码后可以连接上数据库说明创建用户成功。
14

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

将之前的php文件更改一下,一边连接上数据库。

<!DOCTYPE html>
<html>
<head>
	<title>20202411</title>
	<style>
		body {
			background: linear-gradient(to bottom right, #00aaff, #ff00aa);
			font-size: 2em;
			color: white;
			display: flex;
			flex-direction: column;
			align-items: center;
			justify-content: center;
			height: 100vh;
		}
		h1 {
			animation: jump 1s infinite;
		}
		@keyframes jump {
			0% {
				transform: translateY(0);
			}
			50% {
				transform: translateY(-10px);
			}
			100% {
				transform: translateY(0);
			}
		}
		p {
			margin-top: 2em;
		}
	</style>
</head>
<body>
	<h1>20202411</h1>
	<?php
		$uname=$_POST["username"];
		$pwd=$_POST["password"];
		$query_str="SELECT * FROM login where username='$username' and password='$pwd';";
		$mysqli = new mysqli("127.0.0.1", "chenshuhuan", "20202411", "csh");
		$query_str1="use csh;";

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

		if ($result = $mysqli->query($query_str1))
			echo"<br>Success into database!";

		if ($result = $mysqli->query($query_str)) {
    			if ($result->num_rows > 0 ){
            			echo "<br> {$uname}:Welcome! <br> ";
    			} else {
        			echo "<br> Login Fail! <br> " ; 
        		}
    			$result->close();
		}
		$mysqli->close();
	?>
	<p>powered by ChatGPT</p>
</body>
</html>

然后在页面中输入正确的用户名和密码就会跳转到成功的php网页,输入错误的用户名或密码就会跳转的失败的php网页。
15
16

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

要进行SQL注入攻击,这个栗子还比较简单,因为我们的SQL查询语句是

SELECT * FROM login where username='$username' and password='$pwd';

如果我们在用户名里面输入’ or 1=1#,密码随便填,比如123,那么生成的SQL查询语句就是

SELECT * FROM login where username='' or 1=1# and password='$pwd';

后面密码那部分被注释掉了,1=1恒成立,所以直接登录成功。

17
18

再来一个简单的XSS攻击,首先让Bing AI生成一件XSS攻击的模板

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

19

理论上应该会出现XSS attack的告警弹窗,但是这里直接登录成功了,有点懵,不太清楚是什么原因。可能是FireFox屏蔽了弹窗。
20
21

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

首先安装java环境,并下载WebGoat的jar包。在Shell中输入
25
26

java -jar webgoat-2023.4.jar
open http://localhost:8080/WebGoat/

22

开启WebGoat,并在浏览器打开网页,看到这个网页就是成功的。注册用户并登录。鬼知道开个Web羊结果出来个web狼。
23
24

首先进行SQL注入攻击的模拟。这里选择一个字符型的SQl注入。给你"SELECT * FROM user_data WHERE first_name = ‘John’ AND last_name = ‘" + lastName + "’";这个一句话,要求能够显示所有的用户信息,在对应位置分别填入Smith’or‘1’=‘1’,生成的SQL语句就是SELECT * FROM user_data WHERE first_name = ‘John’ AND last_name = ‘Smith’ or 1=1;这样的情况1=1恒成立,所以就能够查到所有人的信息。
33

27

然后是XSS攻击,跟上一部分的实验中一样,也输入那串代码,就可以显示告警窗口,其中显示XSS attack
34

28

最后一个部分是CSRF攻击,也就是跨站请求伪造攻击,将原始网页克隆一份,并新开一个FireFox实例打开,在开发者模式中,编辑目标网站,然后就可以进行CSRF攻击了。获取到的goal是8051。
35

30
31
32

3.问题及解决方案

  • 问题1:不知道MySQL的密码。
  • 问题1解决方案:默认情况下以普通用户的身份登录应该会产生一个随机密码,但是更方便的是直接通过root权限进行登录,可以免去密码的问题。
  • 问题2:BurpSuite和WebGoat都使用8080端口导致冲突。
  • 问题2解决方案:因为BurpSuite使用的端口为8080,而WebGoat使用的也是8080,所以会产生冲突,更改BurpSuite的端口为其他端口并更改FireFox的代理之后,bs并不能抓到Firefox发送的数据包,所以就不通过抓包重发的方式解决了。采用新建Firefox实例的方式进行攻击。
    29

4.学习感悟、思考等

总算总算,这八次实验结束了。这次的实验确实非常多,但是涉及到的问题也非常多,这次实验学习使用了Apache进行建站,通过html和php进行表单的提交并进行一些基本的攻击实现。然后回想之前学习Django搭建网站时,经常会把CSRF防护给关闭,因为图一个方便,现在看来还是不太好的,容易受到一些攻击。

最后,感谢王老师这一个学期来的指导,这门网络攻防的课程确实不能仅仅停留在理论上,必须要在实践中才能够体会,而且能够发现许多有意思的东西和事情。

参考资料

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值