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攻击也有了基本的了解,也算是体验了一把网络攻防,收获颇丰。