20174316 黄靖淇 Exp 8 Web基础

Posted hadleyburg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20174316 黄靖淇 Exp 8 Web基础相关的知识,希望对你有一定的参考价值。

一、实践目标

1.1实践内容

  • Web前端: html
  • Web前端: Javascipt
  • Web后端: mysql基础
  • Web后端: 编写php网页
  • SQL注入: XSS攻击测试

1.2实践要求

  • Web前端: HTML能正常安装、启停Apache
    • 理解HTML,理解表单,理解GET与POST方法
    • 编写一个含有表单的HTML
  • Web前端: Javascipt
    • 理解javascript的基本功能,理解DOM
    • 编写JavaScript验证用户名、密码的规则
  • Web后端: MySQL
    • 基础正常安装、启动MySQL,建库、创建用户、修改密码、建表
  • Web后端: 编写PHP网页
    • 连接数据库,进行用户认证
  • 最简单的SQL注入: XSS攻击测试
    • 用户能登陆,登陆用户名密码保存在数据库中,登陆成功显示欢迎页面

二、基础知识

2.1Web前端HTML

  • kali默认已安装Apache,直接使用 service apache2 start 命令打开 Apache 服务即可。如图所示,如果没有任何错误提示,即表明成功开启。
  • GET/POST
    • GET把参数包含在URL中,POST通过request body传递参数;
    • GET产生一个TCP数据包;POST产生两个TCP数据包;
    • GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  • SQL注入
    • 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串达到欺骗服务器执行恶意的SQL命令,即利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句;
    • 输入的用户名‘ or 1=1#中#相当于注释符,把后面的内容都注释掉,1=1是永真式,条件永远成立,和代码中select语句组合后变成select * from login5314_table where username=‘‘ or 1=1# ‘ and password=‘‘,不管密码是否输入正确,都能够成功登录。
  • XSS攻击
    • 跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中,比如这些代码包括HTML代码和客户端脚本,攻击者利用XSS漏洞旁路掉访问控制——例如同源策略(same origin policy),这种类型的漏洞由于被黑客用来编写危害性更大的phishing攻击而变得广为人知。

三、实验步骤


 

kali默认已安装Apache,直接使用 service apache2 start 命令打开 Apache 服务即可。如图所示,如果没有任何错误提示,即表明成功开启。

技术图片

 此时在浏览器输入192.168.232.129(kali的ip地址),如果可以打开Apache的默认网页,则开启成功

技术图片

 使用cd /var/www/html进入Apache目录下,新建一个简单的含有表单的html文件 4316.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>
<!-- main -->
<!--//header-->
<h2>Login Quick</h2>
<form action="login" method="post" name="form_login">
<input placeholder="E-mail" name="Email" class="user" type="txt" 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-->
<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>

技术图片

 在网页中输入【/var/www/html/4316.html】。得到如下页面。

技术图片

3.2Web前端javascipt

原理:JavaScript是一种广泛用于客户端Web开发的脚本语言,常用来给HTML网页添加动态功能,比如响应用户的各种操作。
使用JavaScript来编写一个验证用户名、密码的规则

由于之前的代码中已经有验证功能,这里进行测试。

技术图片

 技术图片

3.3MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表.

使用 【/etc/init.d/mysql start】启动mysql服务。

技术图片

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

技术图片

 用show databases;查看数据库基本信息

技术图片

 输入use mysql;选择使用mysql这个数据库

技术图片

 输入select user, password, host from user;查看当前用户信息

技术图片

 输入update user set password=PASSWORD("4316") where user=‘root‘;,修改密码;

技术图片

 输入flush privileges;,更新权限:

技术图片

 输入exit退出数据库,使用新的密码登录

技术图片

 使用create database hjq;建立数据库:

技术图片

 使用show databases;查看存在的数据库:

技术图片

 使用use hjq;使用我们创建的数据库:

技术图片

 输入 create table login_table (username VARCHAR(20),password VARCHAR(20)); 建立新表,设置字段信息,输入 show tables; 查看表的信息。

技术图片

 .输入insert into login_table values(‘hjq4316@qq.com‘,‘123456‘); 向表中插入数据,使用 select * from login_table; 查看表中的数据。技术图片

 

 在MySQL中增加新用户,使用grant select,insert,update,delete on 数据库.* to 用户名@登录主机(可以是localhost,也可以是远程登录方式的IP) identified by "密码";指令,这句话的意思是将对某数据库的所有表的select,insert,update,delete权限授予某ip登录的某用户:

技术图片

 

 增加新用户后,exit退出,然后使用新的用户名和密码进行登录:

技术图片

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

新建一个PHP测试文件,在【/var/www/html/】文件夹下,新建一个【vim 4316.php】,输入如下内容

技术图片

 

 在浏览器网址栏中输入localhost:80/4316.php,可看到文件的内容:

 技术图片

 

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

技术图片

 

结合php、MySQL和之前编写的登录页面,新建一个内容如下的login.php文件,并将之前的4316.html中的【form action】改为【login.php】。

<?php
$uname=$_POST["Email"];
$pwd=$_POST["Password"];
echo $uname;
$query_str="SELECT * FROM login where username=‘$uname‘ and password=‘$pwd‘;";
$mysqli = new mysqli("127.0.0.1", "hjq4316", "20174316", "hjq");

/* 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_str)) {
    if ($result->num_rows > 0 ){
            echo "<br>Welcome!!! <br> ";
    } 
    else {
        echo "<br> login failed!!! <br> " ; }
    /* free result set */
    $result->close();
}
$mysqli->close();
?>

浏览器输入127.0.0.1/4316.html访问自己的登录界面,输入账号和密码

技术图片

 

 如故意输错密码。

技术图片

3.5 SQL注入攻击

在浏览器输入【127.0.0.1/4308.html】访问自己的登录界面
在用户名输入框输入【‘ or 1=1#】,密码任意输入,可登陆成功

技术图片

 

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

XSS攻击

       将一张图片放在【/var/www/html】目录下,在用户名框输 <img src="1.jpg(图片名)" /> 密码随意输入,就看到图片。

技术图片

 

 

 

四、基础问题回答

4.1什么是表单?

  • 表单是负责采集数据的工具,由三个部分组成

    • 表单标签 这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法;
    • 表单域 包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等;
    • 表单按钮 包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。

4.2浏览器可以解析运行什么语言?

  • 超文本标记语言:HTML
  • 可扩展标记语言:XML
  • 脚本语言:ASP、PHP、Script、JavaScript、VBScript、Perl、Python、ColdFusion、Java、JSP等。

  ASP全名Active Server Pages,是一个WEB服务器端的开发环境,利用它可以产生和执行动态的、互动的、高性能的WEB服务应用程序。ASP采用脚本语言VBScript(Java script)作为自己的开发语言。
  PHP是一种跨平台的服务器端的嵌入式脚本语言。它大量地借用C,Java和Perl语言的语法,并融合PHP自己的特性,使WEB开发者能够快速地写出动态产生页面。它支持目前绝大多数数据库,PHP、MySQL数据库和Apache Web服务器是一个比较好的组合。还有一点,PHP是完全免费的,不用花钱,你可以从PHP官方站点。自由下载。而且你可以不受限制地获得源码,甚至可以从中加进你自己需要的特色。
  JSP是Sun公司推出的新一代网站开发语言,Sun公司借助自己在Java上的不凡造诣,将Java从Java应用程序和JavaApplet之外,又有新的硕果,就是JSP,Java ServerPage。JSP可以在Servlet和JavaBean的支持下,完成功能强大的站点程序。

4.3WebServer支持哪些动态语言?

  • 支持的动态网页语言有ASP,JSP,PHP。

五、实践总结

  本次实验主要是对web的应用,Web在上个学期我们有一些接触,但当时主要是学习网页设计这方面的知识,跟这次侧重点还是有所不同的,但有了一定基础,也让我比较快地能看懂这次实验的代码,所以进行得比较顺利。我认为困难比较大的部分是数据库部分,特别是有时候连接不上比较烦人,不过在查阅了网上有关资料和同学们的博客之后成功完成,我通过本次实验复习了以前的知识,也收获了新知,还是收获颇丰的。

以上是关于20174316 黄靖淇 Exp 8 Web基础的主要内容,如果未能解决你的问题,请参考以下文章

Exp 8 Web基础

Exp 8 Web基础

Exp 8 Web基础 ——20175201张驰

NetSec2019 20165327 Exp 8 Web基础

Exp 8 Web基础

20155220 《网络对抗》Exp 8 Web基础