• 2019-2020-2 20175218陈敬勇 《网络对抗技术》 Exp8 Web基础


    2019-2020-2 20175218陈敬勇 《网络对抗技术》 Exp8 Web基础

    一、实践要求

    1. Web前端HTML

      • 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML。
    2. Web前端javascipt

      • 理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。
    3. Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表

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

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

      • 功能描述:用户能登陆,登陆用户名密码保存在数据库中,登陆成功显示欢迎页面。

    二、实践原理

    • Web前端

      • 编程语言:html/css/javascript(js)
      • 运行环境:浏览器
    • Web后端

      • 编程语言:PHP/JSP/.NET...
      • 运行环境:应用服务器/中间件
    • 数据库编程

      • 编程语言:PHP/JSP/.NET相应的库,SQL语言
      • 运行环境:数据库服务器
    • SQL注入

      • 一种注入攻击,,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。
    • XSS攻击

      • 通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

    三、实验步骤

    任务一:Web前端HTML

    • 首先,kali中,在管理员权限下,通过命令 service apache2 start 开启Apache服务

    • 然后,桌面上右击,打开浏览器,在浏览器网址栏输入 127.0.0.1 ,如果可以打开Apache的默认网页,则开启成功

    • 在终端中,通过命令 cd /var/www/html 进入Apache目录下。然后输入命令 vi 20175218_form.html 新建一个简单且含有表单的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>
    

    • 通过 wq 保存退出后,打开浏览器,在浏览器网址栏中输入 /var/www/html/20175218_form.html 回车打开网页如下图所示:

    任务二:Web前端:javascipt

    • 通过 vi 20175218_login_test.html 新建一个html文件,在原有的 20175218_form.html 基础上,可以添加一段JavaScript代码,用来完成对用户是否填写用户名和密码的判断。写入 20175218_login_test.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" name="form_login"> 
            <input placeholder="E-mail" name="Name" 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="Login" onClick="return validateLogin()"/> 
        </form> 
        </center> 
    <script language="javascript"> 
        function validateLogin(){ 
            var sUserName = document.form_login.Name.value ; 
            var sPassword = document.form_login.Password.value ; 
            if ((sUserName =="") || (sUserName=="Your email")){ 
                alert("Please fill in User Email!"); 
                return false ; 
            } 
            if ((sPassword =="") || (sPassword=="Your password")){ 
                alert("Please fill in Password!"); 
                return false ; 
            } 
        } 
    </script> 
    
    </body> 
    </html>
    

    • 通过 wq 保存退出后,打开浏览器,在浏览器网址栏中输入 /var/www/html/20175218_login_test.html 回车打开网页如下图所示,如果没有输入邮箱和密码就提交的,网页会提示“Please fill in User Email!”;

    • 或者只填写邮箱,没有输入密码的则会提示“Please fill in Password!”

    任务三:Web后端:MySQL基础

    • 首先,kali中,在管理员权限下,通过命令 /etc/init.d/mysql start 开启MySQL服务

    • 然后,继续在管理员权限下输入命令 mysql -u root -p ,再输入默认的密码 password,登录 mysql

    • 通过命令 show databases; (注意:这里的命令后面需要添加一个;)查看数据库基本信息

    • 通过命令 use mysql; ,选择使用名为 mysql 的这个数据库

    • 通过命令 select user, password, host from user; 查看当前用户信息

    • 通过命令 update user set password=PASSWORD("20175218") where user='root'; 更改用户root的密码为20175218

    • 再次通过命令 select user, password, host from user; 查看当前用户信息,可以发现root的password处已有信息

    • 通过命令 flush privileges; 进行权限更新

    • 通过命令 exit 退出,然后在管理员权限下输入命令 mysql -u root -p 使用新密码进行登录

    • 通过命令 create database cjy; 建立一个名为 cjy 的数据库

    • 通过命令 show databases; 可以查看存在的数据库,发现刚刚创建的数据库也在

    • 通过命令 use cjy; 使用刚刚创建的数据库cjy

    • 通过命令 create table login (username VARCHAR(20),password VARCHAR(20)); 建立数据库表,并设置字段基本信息。其中,表名为 login ,类型为 VARCHAR(20) 的两个字段 username 和 password

    • 通过命令 show tables; 查看表的信息

    • 通过命令 insert into login values('20175218cjy@163.com','20175218'); 插入数据。其中,登录的email为 20175218cjy@163.com ,登录密码为 20175218

    • 通过命令 select * from login; 查询表中的数据

    • 通过命令 grant select,insert,update,delete on cjy.* to chenjingyong@localhost identified by "20175218"; 在MySQL中增加新用户,将对数据库cjy的所有表的 select,insert,update,delete 权限授予当前主机 localhost 登录的用户chenjingyong,登录密码是20175218

    • 增加新用户后,通过命令 exit 退出,然后在管理员权限下,使用新的用户名和密码进行登录,登录成功即说明成功增加新用户

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

    • 继续在/var/www/html 目录下,通过命令 vi phptest.php 新建一个PHP测试文件,写入内容如下:
    <?php 
    echo ($_GET["a"]); 
    include($_GET["a"]); 
    echo "Hello word! This is my php test page!<br>"; 
    ?>
    

    • 通过 wq 保存退出后,打开浏览器,在浏览器网址栏中输入 localhost:80/phptest.php ,可看到文件的内容

    • 还可以在浏览器网址栏中输入 localhost:80/phptest.php?a=/etc/passwd ,可看到 /etc/passwd 文件的内容

    • 先通过命令 vi login.php 创建一个php文件,获取来自 20175218_login_test.html 的表单数据(下面还需要修改 20175218_login_test.html ),然后进行登录身份认证,写入内容如下:
    <?php
    $uname=$_POST["Name"];
    $pwd=$_POST["Password"];
    echo $uname;
    $query_str="SELECT * FROM login where username='$uname' and password='$pwd';";
    $mysqli = new mysqli("127.0.0.1", "chenjingyong", "20175218", "cjy");
    $query_str1="use cjy;";
    
    /* check connection */if ($mysqli->connect_errno) {
        printf("Connect failed: %s
    ", $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();
    ?>
    

    • 然后将 20175218_login_test.html 中的 action 改为 login.php ,即表单中数据将被送入 login.php 进行处理

    • 通过 wq 保存退出后,打开浏览器,在浏览器网址栏中输入 127.0.0.1/login.php 直接跳转到 login.php 界面,可以发现连接成功,但是由于没有输入登录信息,所以 login 失败,如下所示:

    • 在浏览器网址栏中输入 127.0.0.1/login_test.html 进入登录界面,输入正确的用户名和密码登陆,就可以成功登陆了

    • 如果随便输入一个没有的邮箱以及密码,则会显示登陆失败

    任务五:最简单的SQL注入,XSS攻击测试

    SQL注入

    • 在用户名输入框输入 ' or 1=1# ,然后密码任意输入,就可登陆成功(这里遇到了一个问题,在后面进行阐述)

    • 为啥能够这样登录呢?

    • 原因就是:输入的用户名和我们的代码中 select 语句组合起来变成了 select * from user_login where username='' or 1=1#' and password='',#相当于注释符,会把后面的内容都注释掉,而1=1是永真式,所以这个条件永远成立。不管密码是否输入正确,都能够成功登陆

    XSS攻击

    • 将一张想要插入的图片放在/var/www/html目录下(我这里的是qyc.jpg)。然后在用户名输入框输入 ,随便输入密码,发现在网页中成功读取到图片

    四、实验中遇到的问题

    问题一

    在进行SQL注入时,输入 ' or 1=1# 进行登录,报错需要email格式

    解决方法: 出错后,检查 20175218_login_test.html ,发现写的type是email,所以填写时会检查格式是否是email格式。将其改为普通的文本格式text即可

    五、实践思考

    问题一

    (1)什么是表单

    答:对于表单,我首先想到的就是表格,但是不同于表格的简单含义。表单具有数据采集功能,在我们学习过网络安全编程基础后,我也知道大多数网页设计都需要用到表单,也就是form元素,主要包括表单标签、表单域、表单按钮三大组成部分

    问题二

    (2)浏览器可以解析运行什么语言。

    答:对于浏览器,首先肯定是html语言,毕竟上学期可是写过很多的,然后还有XML、Python、PHP、JavaScript、ASP等。

    问题三

    (3)WebServer支持哪些动态语言

    答:支持的动态语言主要就是PHP、ASP、JSP。其中,PHP是一种跨平台的服务器端的嵌入式脚本语言;ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或Web应用程序;JSP是Sun公司推出的新一代网站开发语言,在Serverlet和JavaBean的支持下,可以完成功能强大的站点程序。

    六、实验收获与感想

    这次实验,总的来说不是很困难,但是做得还算比较顺利,稍微卡住的一处就是在SQL注入的时候,我开始想的是这个填入不就形成永真式了吗,为啥不行呢,这个之前课程老师都说过好多的啊,非常纳闷。直到后来提示需要email地址的格式,于是我就想起要去看看type,结果还真是这里,于是将其改为text成功解决问题。通过这一次实验,也让我对Web前端HTML和javascipt,以及Web后端的知识和SQL注入再一次熟悉了一遍(之前学过相关知识),还有就是对最简单的XSS攻击也了解了一些,收获颇丰。最后,希望在以后的实验中能够做得更好。

  • 相关阅读:
    ORACLE(系统表emp) 基本与深入学习
    jQuery框架 的四个入口函数
    函数
    sql1999语法
    左连接,右连接
    Oracle单行函数用法
    Kettle
    order by 排序
    sql*plus
    sql基本语句
  • 原文地址:https://www.cnblogs.com/cjy-123/p/12933908.html
Copyright © 2020-2023  润新知