zoukankan      html  css  js  c++  java
  • 20145335郝昊《网络对抗》Exp 8 Web基础

    20145335郝昊《网络对抗》Exp 8 Web基础

    实验内容

    本实践的具体要求有:

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

    • Web前端javascipt:理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。

    • Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表

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

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

    • 登陆后发帖及其会话管理(选做)

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

    实验步骤

    Web前端:htlm基础

    • 因为web卡发是基于apache服务器进行的,对于apache的基本操作是要掌握的,在上次的dns欺骗的实验中已经用过。对于apache曾经使用的过的端口可以在目录/etc/apapche2/下的ports.conf下进行修改。

    • 使用命令apachel start打卡apache,并使用命令netstat -atpn查看使用端口

    • 如果打不开apache,提示端口被占用,可以先使用netstat -tupln |grep80 ,在使用kill+进程ID来杀死进程,Apache服务开启后,我们在浏览器中输入localhost:8080因为受上次实验的影响打开的是上次的伪装页面,上次最后做的是伪装google邮箱。

    • 之后 进入目录var/www/html ,进入到apache的工作目录下,在这个目录下要经常使用到。此时我们先简单的含有表单的html文件,文件名为20145335.html(因为这个是用来测试,所以就使用了ltc同学的代码)


    代码如上,在火狐浏览器下访问`localhost:8080/20145335.html`打开,因为没有编写之后的提交代码,点击提交会显示404网页错误。
    
    • 注意:选用method是Post,method的属性有两种分为GetPost

      • Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据;

      • Get传输的数据量小,这主要是因为受URL长度限制,而Post可以传输大量的数据,所以在上传文件只能使用Post;

      • Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL;

    Web前端:javascipt基础

    • JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,现代所有的web都是使用javascipt来编写完成的。

    • 通常Javascipt脚本是通过嵌入在HTML中来实现自身功能的。

    • 代码如下

        <html>
        <head>
        <meta charset="utf-8">
        <title>login</title>
        </head>
        <body>
           <div id="container" style="500px">
           <div id="header" style="background-color:#FFA500;">
           <h1 style="margin-bottom:0;">Weclome</h1>        
        
         <div id="login"style="backgroung-color:#EEEEEE:height:200px;width400px;float:left;" >
                       <form name='form' class="form" method='get' action='login.php'>
          <input type="text" required="required" placeholder="username" name='username'>  <br>
          <input type="password" required="required" placeholder="password" name='password'>
          <br>
          <button class="but" type='submit'>login</button>
        
                 </form>
        
               </div>
        
          <div id="footer" style="background-color:#FFA500;clear:both;text-align:center;">from 20145335.com</div>
        
        </div>
        
        </body>
        </html>
      
    • 通过老师介绍的菜鸟网站菜鸟网站:javascipt教程可以很好的理解javascipt知识。

    Web后端:Mysql基础

    • 关于Mysql在以前遇到的计算机实习中,为了完成实验结果,恶补过该方面的知识=_=,对于windows下的命令行模式的mysq数据库的使用较为熟练,估计kali下也大同小异。

    • 首先开启sql服务,使用命令/etc/init.d/mysql start打开

    • 使用命令mysql -u root -p,并根据提示输入密码,默认密码为p@ssw0rd(第二个是符号@,第六个是数字0

    • 进入mysql后可以使用命令:show database;查看信息 ,注意:mysql的语句默认是以;分号结尾,输入回车并不代表命令结束,一个分号算一个命令。

    • 可以对mysql进行修改密码,使用以下命令:(1)输入use mysql;,选择mysql数据库。(2)输入select user, password, host from user;,mysql库中的user表中存储着用户名、密码与权限。(3)输入UPDATE user SET password=PASSWORD("新密码") WHERE user='root';。(4)输入flush privileges;,更新权限(5)输入quit退出。

    • 之后退出mysql再次使命令mysql -u root -p进入mysql,使用新修改的密码。

    • 在mysql中新建表,建立表之后在web中可以使用相关信息。输入命令如下:

        CREATE SCHEMA `库表的名称`;
        CREATE TABLE `库表的名称`.`users` (
         `userid` INT NOT NULL COMMENT '',
         `username` VARCHAR(45) NULL COMMENT '',
         `password` VARCHAR(256) NULL COMMENT '',
         `enabled` VARCHAR(5) NULL COMMENT '',
         PRIMARY KEY (`userid`) COMMENT '');
      

    • 向新建的表中添加用户,使用命令为:use 新建立的库表的表名insert into users(userid,username,password,enabled) values(1,'用户id',password("用户密码"),"TRUE");

    Web后端:php测试

    • 在目录/var/www/html下新建一个20145335.php测试文件,看是否可以打开。

    • 用浏览器再地址栏输入localhost:8080/20145335.php打开本地文件。成功打开,可以进行之后的步骤。

    php+mysql+html网页的功能

    • 注意:所涉及到的文件名称需要放在同一个目录下即/var/www/html

    • 首先编写登陆界面login.html,写登陆界面的代码的时候加了一个框架<div>...</div>使整个界面显的干净一些,但颜色并没有分开,偷懒使用了一个颜色=_=。

    • 之后编写login.php代码实现与数据库的链接,按照老师的代码进行参考。有几点需要注意:命令$mysqli = new mysqli ("ip地址","mysql用户","mysql用户的密码","使用的表名")ip地址填本机ip地址,就是127.0.0.1,填写网络地址会影响到实验结果。

    • 之后在浏览器中输入localhost:8080/login.html打开本地文件,就可以访问之前写好的网址,可以尝试很结果能成功登陆的,也有登陆失败的,无法连接的。


    SQL注入

    • SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。即sql注入是将用户输入的恶意字符串当成“sql”语句执行

    • 在用户名输入框中输入' or 1=1#密码随便输入,这时候的合成后的SQL查询语句为select * from users where username='' or 1=1#' and password=md5('')因为1=1是为真,那么一定可以登上。

    • 我们还可以通过sql注入将用户名和密码保存在数据库中,但是需要修改之前的代码,因为我们之前编的代码中if ($result = $mysqli->query($query_str))这条判断语句不允许多条sql语句执行,所以将它改成if ($result = $mysqli->multi_query($query_str))便能实现执行多个sql语句。

    • 在欢迎界面用户用一栏内输入';insert into users(userid,username,password,enabled) values(777,'121212',password("121212"),"TRUE");#进行尝试,在数据库中查询到。

    之后使用命令`';insert into users(userid,username,password,enabled) values(555,'353535',password("353535"),"TRUE");#`也可以查询到。成功的用sql注入将信息保存在数据库中。
    

    XSS攻击

    • XSS表示Cross Site Scripting(跨站脚本攻击),通过插入恶意脚本,实现对用户游览器的控制。攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy)。这种类型的漏洞由于被骇客用来编写危害性更大的phishing攻击而变得广为人知。对于跨站脚本攻击,黑客界共识是:跨站脚本攻击是新型的“缓冲区溢出攻击“,而JavaScript是新型的“ShellCode”。

    • 但是这个实验不论怎么做图片就是出不来,很心累=_=

    • 将图片保存到之前的目录下/var/www/html,之后在用户名一栏输入命名<img src="20145335.jpg"/>5335</a>尝试了很多次就是没有做出来。

    附加:发帖和会话管理实现

    • 可以利用PHP实现会话管理,详细代码可以参考ltc同学的代码,所有代码依旧放在/var/www/html下,在浏览器中输入http://localhost:80/logIn.php,进行登录:

    • 登陆成功后如下图

    • 点击start a new post!发帖,进入如下界面:

    • 提交之后跳转到如下界面,可以选择查看发过的帖子、继续发帖、返回或者退出登录等功能:

    • 这个时候点击CHECK查看发过的帖子,但是却什么内容都没有,由于这个操作是通过从data.txt文件中读取之前发帖时保存的记录来查看发帖内容,但是在/var/www/html目录下根本没有找到这个文件,这就说明之前创建也没有成功,后面发现/var/www/html底下文件默认的都是属于root的,其他用户没有权限进行操作,所以我们可以先使用touch data.txt建一个data.txt文件,再对该文件进行加权:

    实验问答:

    • 什么是表单?

      答:表单是一个包含表单元素的区域,表单元素是允许用户在表单中(比如:文本域、下拉列表、单选框、复选框等等)输入信息的元素,表单在网页中主要负责数据采集功能,一个表单有三个基本组成部分:表单标签、表单域、表单按钮;

    • 浏览器可以用什么语言?

      答:常见的可以使用html语言、xml语言、以及php语言、javascript语言,本次实验都有所涉及,还有python语言。

    • WebServer支持哪些动态语言?

      答:javascript、ASP、PHP、Ruby等语言。

    心得体会

    本次实验难度个人感觉应该在网页的联通和测试上,代码是一项很大的问题,之前虽然有学过这个web前端的知识,但是也忘得差不多了,这次很多的问题都存在于代码的编写上,感觉了攻克了代码问题实验也就好解决许多了,借助了老师给的代码的注释和代码很多问题仔细研究就会解决出来。

  • 相关阅读:
    Kubernetes 集成研发笔记
    Rust 1.44.0 发布
    Rust 1.43.0 发布
    PAT 甲级 1108 Finding Average (20分)
    PAT 甲级 1107 Social Clusters (30分)(并查集)
    PAT 甲级 1106 Lowest Price in Supply Chain (25分) (bfs)
    PAT 甲级 1105 Spiral Matrix (25分)(螺旋矩阵,简单模拟)
    PAT 甲级 1104 Sum of Number Segments (20分)(有坑,int *int 可能会溢出)
    java 多线程 26 : 线程池
    OpenCV_Python —— (4)形态学操作
  • 原文地址:https://www.cnblogs.com/20145335hh/p/6822557.html
Copyright © 2011-2022 走看看