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

实验八 Web安全

一.实验内容及要求

(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.1Web前端HTML

首先我们要启动apache服务
service apache2 start

输入127.0.0.1打开apache默认网页,打开成功则证明开启成功

然后我们进入apache目录,创建20192404.html

cd /var/www/html 
vi 20192404.html

内容如下:

点击查看代码
<html>
<head>
<title>Login</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
    <h2 align="center">Login</h2>
        <center>
        <form action="login" method="post">
            <input placeholder="E-mail" name="Name" class="user" type="email">
            <br>
            </br>
            <input  placeholder="Password" name="Password" class="pass" type="password">
            <br>
            </br>
            <input type="submit" value="Login">
        </form>
        </center>
</body>
</html>
在浏览器输入/var/www/html/20192404.html打开网页


至此我们就完成了一个简单的前端html。

2.2Web前端javascipt

在刚刚完成的20192404.html网页上添加一段JavaScript代码,以完成对用户是否填写邮箱和密码的判断
修改完成后的代码为

点击查看代码
<html>
<head>
<title>CryptoTeam</title>
<!-- Meta tag Keywords -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- Meta tag Keywords -->
</head>
<body>
<!-- main -->
<!--//header-->
    <h2>登录</h2>
        <form name="form1" onsubmit="return checkForm();" method="post" action="index.php">
            <input placeholder="E-mail" name="Email" class="user" type="email" onfocus="if (this.value=='Your email') this.value='';" />
            <br>
            </br>
            <input  placeholder="Password" name="Password" class="pass" type="password" onfocus="if (this.value=='Your password') this.value='';"/>
            <br>
            </br>
            <input type="submit" value="登录" onClick="return validateLogin()"/>
        </form>
<!--//main-->
<script language="javascript">  
    function validateLogin(){  
        var sUserName = document.form_login.Email.value ;  
        var sPassword = document.form_login.Password.value ;    
        if ((sUserName =="") || (sUserName=="Your email")){  
        alert("user email!");  
        return false ;  
        }
        if ((sPassword =="") || (sPassword=="Your password")){  
        alert("password!");  
        return false ;  
        }  
    }   
</script>  
</body>
</html>

同时创建index.php回显登录成功

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Welcome!</title>
</head>
<body>
<h1 align="center">欢迎!<?php echo $_POST['Email'];?></h1>  
</body>
</html>

在浏览器输入localhost/20192404plus.html打开网页
测试一下我们的javascipt代码

提示输入正确的邮箱格式,成功!

正确格式输入后:

至此我们完成了一个简单的javascript.

下面我们尝试对刚才搭建的网站进行sql注入攻击
首先,我们尝试利用<br><p>20192404HTML注入</p>尝试
结果:

发现没有什么作用

接下来,我们尝试利用<script type="text/javascript"> alert("20192404JavaScript注入") </script>来进行注入尝试

发现还是不成功
综上,我们使用的这个js代码已经防止了这种简单的注入攻击

2.3Web后端 MySQL基础

首先我们来启动sql服务

systemctl start mysql
mysql -u root -p

接下来我们进入mysql,修改密码及权限

use mysql        
update user set password=PASSWORD("user@123") where user='root';        
flush privileges;       
exit   


这里要注意修改的密码必须符合长度,且必须含有数字,⼩写或⼤写字母,特殊字符

然后我们来创建一个需要的数据库

create database 20192404jzb;       
show databases;        
use 20192404jzb;  

创建表并插入数据

create table login (username VARCHAR(20),password VARCHAR(30));   
insert into login values('20192404@qq.com','20192404');        
select * from login; 

下面我们创建一个新用户并使用新用户登录

grant select,insert,update,delete on 20192404jzb.* to jzb@localhost identified by "user@123";        
exit       
mysql -u jzb -p 

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

首先我们进入/var/www/html目录并新建一个login.php文件

点击查看代码
<?php
$uname=$_POST["Email"];
$pwd=$_POST["Password"];
echo $uname;
$query_str="SELECT * FROM login where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "zyj", "user@123", "zyj20181334");
$query_str1="use login;";

/* check connection */
if ($mysqli->connect_errno) {
    printf("Connect failed: %s\n", $mysqli->connect_error);
    exit();
}
echo "connection ok!";
/* Select queries return a resultset */
if ($result = $mysqli->query($query_str1))
echo"<br>Success into database!";
echo$uname;
if ($result = $mysqli->query($query_str)) {
    if ($result->num_rows > 0 ){
            echo "<br> {$uname}:Welcome!!! <br> ";
    } 
    else {
        echo "<br> login failed!!!! <br> " ; }
    /* free result set */
    $result->close();
}
$mysqli->close();
?>

之后我们修改20192404plus.html的action回连login.php文件
用账号20192404@qq.com 密码20192404进行登录

登录成功!

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

2.5.1SQL注入
首先因为之做的是email注册,所以会有是否为email格式的判定,为了实现最简单的SQL注入,这里先改成text。
在用户名栏输入' or 1=1#即可实现最简单的SQL注入

注入成功!

2.5.2XSS攻击

将一张照片放到/var/www/html目录下(我的是2404.jpg)
在用户名输入框输入<img src="2404.jpg" />

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

首先下载并运行WebGoat 8.1,这里使用了Github镜像源加速,使用命令如下:

wget https://hub.連接.台灣/WebGoat/WebGoat/releases/download/v8.1.0/webgoat-server-8.1.0.jar

java -jar webgoat-server-8.1.0.jar

执行完后不要关闭终端,进入浏览器,输入http://localhost:8080/WebGoat/login访问WebGoat

然后注册一个账号
登录后找到Injection板块进行SQL注入(A1)的学习

从第9课开始便为SQL注入的练习题

第十课:

第11课:

之后选择XSS(A7)进行学习
第7课

最后选择CSRF(A8:2013)
想要解决第3课,首先将提交查询处的HTML代码拷贝出来

然后新建一个HTML文件,在里面填入拷贝的内容并加上HTML的必要标签,HTML代码如下所示:

<html>
    <body>
            <form accept-charset="UNKNOWN" id="basic-csrf-get" method="POST" name="form1" target="_blank" successcallback="" action="http://localhost:8080/WebGoat/csrf/basic-get-flag">
            <input name="csrf" type="hidden" value="true">
			<input type="submit" name="submit">
		</form>
	</body>
</html>

使用浏览器打开该文件,点击按钮即可获得flag

三.问题及解决

1.问题一

实验中虚拟机浏览器无法打开php文件
解决方法:重装kali2021

2.问题二

实验中mysql数据库修改密码时报错
解决方式:根据mysql要求设置符合长度,且必须含有数字,⼩写或⼤写字母,特殊字符的密码

四.学习感悟、思考等

本次实验不但让我学习了web安全的相关知识,而且也是对以前其他课程学到的前、后端知识的一种复习,经过本次实验也更加深了我对sql注入攻击的认识,强化了自己的安全意识,在以后如果需要搭建web项目的时候,我一定会注意这方面的安全问题,同时我也会继续学习更多的专业知识,提升自己的能力,最后,非常感谢老师为我们准备的教学内容,让我们受益匪浅!

posted @ 2022-06-09 11:36  20192404—贾智博  阅读(19)  评论(0编辑  收藏  举报