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

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

实验内容

本实践的具体要求有:javascript

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

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

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

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

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

  • 登录后发帖及其会话管理(选作)mysql

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

实验步骤

Web前端:htlm基础

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

  • 使用命令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="width: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前端的知识,可是也忘得差很少了,此次不少的问题都存在于代码的编写上,感受了攻克了代码问题实验也就好解决许多了,借助了老师给的代码的注释和代码不少问题仔细研究就会解决出来。

相关文章
相关标签/搜索