• 20192404 202120222 《网络与系统攻防技术》实验八实验报告


    实验八 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项目的时候,我一定会注意这方面的安全问题,同时我也会继续学习更多的专业知识,提升自己的能力,最后,非常感谢老师为我们准备的教学内容,让我们受益匪浅!

  • 相关阅读:
    ASP.NET WebApi 文档Swagger中度优化
    ASP.NET五步打包下载Zip文件
    JavaScript——HashMap实现
    JS实现集合和ECMA6集合
    JavaScript——双向链表实现
    用JavaScript来实现链表LinkedList
    JavaScript结构三层——思想快速介绍
    浏览器自动刷新——基于Nodejs的Gulp LiveReload与VisualStudio完美结合。
    JavaScript原型OOP——你上车了吗?
    再谈JavaScript闭包及应用
  • 原文地址:https://www.cnblogs.com/jzbysl0910/p/16358719.html
Copyright © 2020-2023  润新知