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

posted @ 2017-05-07 22:01  20145335郝昊  阅读(222)  评论(0编辑  收藏  举报