20202407 2022-2023-2 《网络与系统安全技术》实验八报告

20202407 2022-2023-2 《网络与系统安全技术》实验八报告

1.实验内容

  • Web前端HTML
    能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。
  • Web前端javascipt
    理解JavaScript的基本功能,理解DOM。
    在HTML的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”
  • Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表
  • Web后端:编写PHP网页,连接数据库,进行用户认证
    最简单的SQL注入,XSS攻击测试
  • 安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击。

2.实验过程

2.1Web前端HTML

使用/etc/init.d/apache2 start命令,开启Apache服务
在这里插入图片描述使用/etc/init.d/apache2 status命令,查看Apache服务状态
在这里插入图片描述
进入浏览器访问本地IP查看apache网页
在这里插入图片描述
接下来在/var/www/html/目录下,创建一个html文件,编写一个简单的带表单的登录页面,内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<style>
        form{
            width: 600px;
        }
        h2{
            text-align: center;
        }
        input{
            width: 220px;
            height: 25px;
        }
        select{
            width: 60px;
            height: 25px;
        }

    </style>
<meta charset="UTF-8">
<title>library</title>
<link rel="stylesheet" type="text/css"  href="css/style.css">
</head>
<body>
	<img style="margin-top: -9px" src="img/01.jpg">
	<div class="tpt-login">
		<h1>login in</h1>
		<form name="form1" method="post" action="" >
			请输入用户名:<input type="text" name="username" placeholder="请输入用户名"/> <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>

在浏览器中访问文件
在这里插入图片描述

2.2Web前端javascipt

在2.1的基础上,加入一段javascript语句,用于判断输入用户名密码是否为空,并给出提示。
修改后的代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<style>
        form{
            width: 600px;
        }
        h2{
            text-align: center;
        }
        input{
            width: 220px;
            height: 25px;
        }
        select{
            width: 60px;
            height: 25px;
        }

    </style>
<meta charset="UTF-8">
<title>library</title>
<link rel="stylesheet" type="text/css"  href="css/style.css">
</head>
<body>
	<img style="margin-top: -9px" src="img/01.jpg">
	<div class="tpt-login">
		<h1>login in</h1>
		<form name="form1" method="post" action="" onsubmit="return validateForm()">
			请输入用户名:<input type="text" name="username" placeholder="请输入用户名"/> <br>
			请输入密码:<input type="password" name="pwd" placeholder="请输入密码"/> <br>
			<input type="submit" name="sub1" value="确定" /> 
			<input type="reset" name="sub1" value="重置" />
			<tr>
			</tr>
		</form>
	</div>
<script type = "text/javascript">
    function validateForm() {
      var username = form1.username.value;
      var password = form1.pwd.value;
      if (username == "" ) {
        alert("请输入用户名");
        return false;
      }
      if (password == "" ) {
        alert("请输入密码");
        return false;
      }
      alert("欢迎你,"+username);

    }
</script>	
</body>
</html>

除了在body中加入script脚本,在表单中也需要做出相应修改,使提交表单时能够执行script脚本,即在form语句行中加入οnsubmit=“return validateForm()”。
接下测试一下效果
在这里插入图片描述
在这里插入图片描述
可以看到在输入用户名和密码的时候,就可以出现欢迎你的弹窗,而如果有空缺,则会弹出请输入用户名/密码的弹窗。

2.3Web后端:Mysql

kali中自带mysql,因此可以直接使用systemctl start mysql来启动mysql,并使用systemctl status mysql查看mysql服务状态
在这里插入图片描述
命令行输入mysql进入
使用以下命令为root用户设置登录密码。

set password for 'root'@'localhost' = password('20202407');	#修改root用户的密码
flush privileges;	#更新权限

在这里插入图片描述
重新使用root登陆后,开始设置数据库中的数据

create database 2407sy8; #创建一个新数据库
use 2407sy8; #使用该数据库
create table user (username VARCHAR(20),password VARCHAR(30)); #在数据库中创建登陆用户表
insert into loginuser values('20202407','123456'); #在登陆用户表中添加一条记录
select * from user; #查看登陆用户表记录
grant select,insert,update,delete on 2407sy8.* to kali@localhost identified by "kali";	#添加名为mwm的用户可以通过本机使用20202413作为密码进行登录

在这里插入图片描述
现在已经创建了数据库并添加了一些数据

2.4Web后端:PHP

将使用PHP文件用于前端和数据库的信息交互
先编写一个php文件,内容如下:

<?php
 header("Content-type:text/html;charset=utf-8");
 $uname=$_POST["username"];
 $pwd=$_POST["pwd"];
 $query_struser="SELECT * FROM user where username='$uname' and password='$pwd';";

 $mysqli = new mysqli("127.0.0.1", "kali", "kali", "2407sy8");
 $query_strdatabase="use 2407sy8;";

 if ($mysqli->connect_errno) {
 	printf("Connect failed: %s\n", $mysqli->connect_error);
 	exit();
 }
 echo "<br> Connected Successfully! <br>";
 
 /* Select queries return a resultset */
 if ($result = $mysqli->query($query_strdatabase)) {
 	echo"<br> Success into database! <br>";
 }

echo "<br> identify {$uname}........ <br> ";
#echo "<br> identify {$pwd}........ <br> ";

 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做部分修改,就是在form表单部分中加入action=“2407.php”,使表单数据传到php文件中,并与数据库进行通信。
输入正确的账号密码尝试一下
在这里插入图片描述
登录成功
如果使用错误的密码:
在这里插入图片描述

2.5简单的SQL注入、XSS攻击

SQL注入:用户名最后输入 ’ or 1=1# ,密码任意,即可登录成功:
输入的用户名和我们的代码中select语句组合起来变成了

select * from user  in where username='' or 1=1#' and password=''

#是注释符,会把后面的内容都注释掉,而 1=1 是永真式,所以这个条件永远成立,所以不管密码是否输入正确,都能够成功登陆
在这里插入图片描述
在这里插入图片描述

XSS攻击测试:在用户名输入框输入语句<script> alert("20202407XSS“) </script>,即可实现XSS攻击:
在这里插入图片描述
在这里插入图片描述

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

下载webgoat-2023.4.jar,后进入文件所在文件夹,使用java -jar webgoat-2023.4.jar,启动wegoat服务
在这里插入图片描述
随后在浏览器中输入127.0.0.1:8080/webgoat就可以进入webgoat界面
在这里插入图片描述
注册登录后即可使用

2.6.1SQL注入

原理与2.5中一致,只要使判断条件永真即可。
在这里插入图片描述

2.6.2 XSS攻击

与2.5中方法和原理一致。
在这里插入图片描述

2.6.3CSRF攻击

这部分有一点难度,首先需要进入开发者模式,找到一个隐藏表单
在这里插入图片描述
将这部分内容copy出来到一个html中
在这里插入图片描述
接着在浏览器打开这个文件
在这里插入图片描述
看到了其中的flag,将这个数字输入答题框。
在这里插入图片描述
成功了!

3.问题及解决方案

本次实验较为顺利,并未碰到什么问题。

4.学习感悟、思考等

本次实验我们完成了前端html以及后端php以及mysql,并实施一些简单的攻击。之前我没有学习过html的相关知识,所以在搭建网站的过程中还是有一些困难,不过在同学的帮助下解决了。实验内容使我更加清晰地了解SQL攻击和XSS攻击的方式。还使用了webgoat对CSRF攻击做了简单的实践,对CSRF攻击也有了基本的了解,也算是体验了一把网络攻防,收获颇丰。

参考资料

JavaScript是什么?JavaScript功能有哪些?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值