2018-2019 2 20165203 《网络对抗技术》Exp8 Web基础

2018-2019 2 20165203 《网络对抗技术》Exp8 Web基础

实验要求

1.本实践的具体要求有:javascript

(1) Web前端HTML(0.5分)php

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

(2) Web前端javascipt(0.5分)html

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

(3) Web后端:MySQL基础:正常安装、启动MySQL,建库、建立用户、修改密码、建表(0.5分)java

(4) Web后端:编写PHP网页,链接数据库,进行用户认证(1分)mysql

(5) 最简单的SQL注入,XSS攻击测试(1分)web

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

课题负责人须要完成:登录后能够发贴;会话管理。数据库

基础知识问答

(1)什么是表单

  • 表单就是一种采集数据、传递、提交数据的媒介,一般做为后台得到用户数据的重要交互方式。
  • 一般写在前端,后台经过表单来获取用户输入的信息,以便进行配对。
  • 一般由标签、输入域、填写提示、操做按钮等几部分组成。

(2)浏览器能够解析运行什么语言。

浏览器属于Web前端,一般能够识别HTML、CSS和JS语言等。

  • HTML语言咱们就很熟悉了,它是一种超文本标记语言,是网页制做所必需的一种语言。
  • CSS语言,之前的理解就是一种给html中每种内容的属性加颜色和样式的语言,能够在html中定义,也能够单独写成一个.css文件,在html文本中添加一段引用语句便可。我刚才说的有点儿大白话了,百度上给咱们的标准语句就是可以对网页中元素位置的排版进行像素级精确控制,支持几乎全部的字体字号样式,拥有对网页对象和模型样式编辑的能力。
  • JS语言,乍一说JS,可能一脸懵,其实它就是javascript,它是给咱们的网页增长动态功能的,好比加一个动态效果(一朵云飘过等等),或是好比我输入的数据出了什么问题,在页面上给我显示个什么东西等等。

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

查了一下资料得知,常见的有3种语言ASP、JSP和PHP。

  • ASP语言,全称Active Server Pages,动态服务器页面,可用来建立动态交互式网页并创建强大的web应用程序。当服务器收到对ASP文件的请求时,它会处理包含在用于构建发送给浏览器的HTML网页文件中的服务器端脚本代码。
  • JSP语言一种特殊的java语言,加入了一个特殊的引擎,这个引擎将HTTPServlet这个类的一些对象自动进行初始化好让用户使用,而用户不用再去操心前面的工做。
  • PHP语言,Hypertext Preprocessor,超文本预处理器,主要适用于Web开发领域,可以更快地执行动态网页,并且效率更高。

知识储备

模块分类:

  • Web前端
    • 编程言语:html/css/javascript(js)
    • 运行环境:浏览器
    • 编程用途:在浏览器内部的动态,美观展现形式
  • Web后端
    • 编程语言:PHP/JSP/.NET...
    • 运行环境:应用服务器/中间件
    • 编程用途:对前端提交的数据进行处理并返回相应的HTML网页内容
  • 数据库编程
    • 编程语言:PHP/JSP/.NET相应的库,SQL语言
    • 运行环境:数据库服务器
    • 编程用途:基本的数据增、删、改、查

实践过程

1.Web前端:HML

  • 首先要判断Linux中是否已安装Apache服务器,咱们能够输入apachectl -v来查看版本,出现版本号,则证实Linux已安装Apache。

  • 开启Apache服务器:输入service apache2 start打开Apache服务器,若是没有任何错误提示,代表已成功开启。

  • 输入命令开启以后,咱们在浏览器中输入127.0.0.1,若是能够成功打开Apache的默认网址则证实Apache已经开启。

  • 进入到/var/www/html也就是Apache目录下,新建一个简单的含有表单的html文件simple_form.html的文件。内容以下:
<html>
<head>
<title>CryptoTeam</title>
<!-- Meta tag Keywords -->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!-- Meta tag Keywords -->
</head>

<body>
<style type="text/css">
    body{
             background-image:url("manwei.jpg");
             background-position:center;
    background-repeat:no-repeat;
            }
</style>
<div style="text-align:center;margin-top:120px">
<!--main-->
<!--//header-->
 <h2 align="center"><font size=6>Login</font></h2>
        <center>
        <form action="login" method="post">
    <input placeholder="E-mail or your name" name="Name" class="user" type="email">
    <br>
    </br>
    <input  placeholder="Password" name="Password" class="pass" type="password">
    <br>
    </br>
    <input  type="submit" value="Enter">
          </form>
         </center>
<!--//main-->
</div>
</body>
</html>

在浏览器尝试打开

2.Web前端:javascipt

  • 在原有simple_form.html的基础上,能够添加一段javascript代码,以完成对用户是否填写邮箱和密码的判断。修改后的login_test.html以下图所示:
<!-- Meta tag Keywords -->
</head>

<body>
<style type="text/css">
    body{
             background-image:url("manwei.jpg");
             background-position:center;
    background-repeat:no-repeat;
            }
</style>
<div style="text-align:center;margin-top:120px">
<!--main-->
<!--//header-->
 <h2 align="center"><font size=6>Login</font></h2>
        <form action="login" method="post" name="form_login">
    <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="Login" onClick="return validateLogin()"/>
          </form>
<!--//main-->
</div>

<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>
  • 在浏览器访问file:///var/www/html/login_test.html,也能够直接打开login_test.html,,若是用户邮箱或密码未填写就提交,网页会报提示:

3.Web后端:MySOL基础

  • 开启MySQL服务器:输入/etc/init.d/mysql start

  • 输入mysql -u root -p 使用root权限进入,默认密码是password:

  • 输入
update user set password=PASSWORD("新密码") where user = 'root';

来修改密码;输入flush privileges;更新权限

  • 输入exit退出数据库,能够尝试使用新的密码登陆。

  • 使用create database 数据库名称;创建数据库。我输入的是create database xyx;创建了一个名为xyx的数据库。

  • 输入show database;能够查看存在的数据库:

  • 输入use 数据库名称;,使用咱们建立的数据库,即对数据库作一些编辑操做。

  • 使用create table 表名称 (列名称1 数据类型,列名称2 数据类型,···)建立数据库中的表,并设置相应字段,如图所示,我输入的是create table login_table(username VARCHAR(20),password VARCHAR(20));建立了一个名为login_table的列表,且表中设置了两列,分别为usernamepassword,均存储VARCHAR数据类型,最大长度为20

  • 使用show tables;查看表的基本信息;如图所示,能够看到咱们的数据库xyx中有一个表为login_table

  • 使用insert into 代表 values('值1','值2','值3',···);,注意值的顺序是按照咱们设置的表中列的顺序来的。

  • 使用select * from 表名;查询表中的数据,能够看到咱们 表已经出现。

  • 在MySQL中增长新用户,使用grant select,insert,update,delete on 数据库.* to 用户名@登陆主机(能够是localhost,也能够是远程登陆方式的IP) identified by "密码";,意为对某数据库中全部表的select,insert,update,delete权限授予某ip登陆的某用户。

  • 增长新用户后尝试使用新用户名和密码进行登陆:

登陆成功,说明新用户增长成功

4. Web后端

  • /var/www/html目录下新建立一个PHP测试文件phptest.php
<?php
echo ($_GET["a"]);
include($_GET["a"]);
echo "This is my php test page!<br>";
?>
  • 在浏览器中输入localhost:80/phptest.php?a=/etc/passwd,可看到etc/passwd文件的内容:

  • 利用PHP和MySQL,结合前面编写的登陆网页进行登陆身份认证,在这里须要注意了:前面login_test.html的文件中的action部分要与PHP文件的文件名对应,而且在mysqli对象创建的时候,要对应参数(主机号,用户名,密码,数据库名),修改后的login.php代码以下:
<?php
$uname=$_POST["Email"];
$pwd=$_POST["Password"];
echo $uname;
$query_str="SELECT * FROM login_table where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "xiayunxiao", "123456", "xyx");
$query_str1="use xyx;";

/* 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 login!! <br> ";
  } 
  else {
      echo "<br> login failed!!!! <br> " ; }
  /* free result set */
  $result->close();
}
$mysqli->close();
?>
  • 在浏览器中输入127.0.0.1/login_test.html访问本身的登陆界面。

  • 输入用户名和密码进行认证,成功登陆以下图所示:

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

1)SQL注入

SQL注入,就是经过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器质性恶意的SQL命令。具体来讲,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎质性的能力,它能够经过在Web表单中输入(恶意)SQL语句获得一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
  • 在用户名输入' or 1=1#,密码任意输入,就能够登陆成功了。

这是由于,咱们输入的用户名在数据库中都会转换成SQL语句中的select语句,而输入' or 1=1#时,语句变成了

select * from users where username='' or 1=1#' and password=''

这就有意思了,#至关于注释符,会把后面的内容注释表,而1=1是永真式,因此这个条件永远成立,无论密码是否输入正确,都可以登录成功。

2)XSS攻击

跨站脚本攻击(Cross Site Scripting),为不和层叠式样式表(Cascading Style Sheets,CSS)的缩写混淆。故将跨站脚本攻击缩写为XSS。XSS是一种常常出如今web应用中的计算机安全漏洞,它容许恶意web用户将代码植入到提供给其它用户使用的页面中。好比这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路的访问控制--例如同源策略(same origin policy)。这种类型的漏洞因为被黑客用来编写危害性更大的phishing攻击而变得广为人知。
  • 将我喜欢的spiderman的图片放在/var/www/html目录下,在用户名输入框输入<img src="spiderman.jpg" />,密码任意,就能够读取图片了。

实验中遇到的问题及解决方法

本次实验由于本身对于数据库方面的知识只是java课上接触点儿皮毛,因此仍是遇到一些问题,但愿对你们有所帮助。

Q1:在我输入127.0.0.1/login.html时,没法显示页面。

A1:遇到这种问题,首先要在网址栏中输入127.0.0.1看看本身的Apache服务器是否已经打开。第二,看看咱们的网页名字是否正确,也就是本身的var/www/html目录下是否存在着这样一个网页。我属于第二种,本身的网页名字为login_test.html,哈哈哈哈。

Q2:本身的用户名和密码均输入正确,但老是显示没法链接数据库。

A2:这就须要查看本身的login_test.htmllogin.php的对应关系。如图所示,个人login_test.html的Name中的namelogin.php中的变量unamepwd要对应起来。

Q3:在作SQL注入攻击时,输入攻击语句时,提示只能输入email

A3:查看本身的login_test.html,在用户名输入栏中的type栏中输入为email,因此只能识别email,咱们能够将其改成text,这样就能识别文本类型了。

实验感想

本次实验的过程容易理解,本身编写一个网页,而后进行攻击,并且综合性比较强,既有刘念老师的网络安全编程课的知识,也有数据库的知识,因此,打好基础很重要,在数据库方面本身还须要多加练习,另外,感谢同窗们在实验过程当中对我提供了帮助。但愿本身能在从此的实验中能更加努力。

相关文章
相关标签/搜索