20155338《网络对抗》Exp8 Web基础

20155338《网络对抗》Exp8 Web基础

实验内容

Web前端:HTML

  • 使用netstat -aptn查看80端口是否被占用,如果被占用了就kill 原进程号,我的没有被占用。

  • 空闲就用apachectl start开启Apache,然后再次用netstat -aptn查看端口占用情况。

  • 在kali的火狐浏览器上输入localhost:80测试apache是否正常工作

  • 进入Apache工作目录/var/www/html,新建一个csj5338.html文件,编写一个含有表单能实现输入用户名、密码实现登录的html。

  • 打开浏览器访问localhost/csj5338.html,出现刚才编写的HTML页面。

javascipt

  • 使用javascipt修改之前csj5338的代码,完善Form表单,并在浏览器上测试,如下图所示

Web后端:MySQL基础

  • /etc/init.d/mysql start开启sql服务。

  • 输入 mysql -u root -p 用账号root登录,并根据提示输入对应密码,我的MySQL默认密码就是直接回车,进入Mysql。

修改MySQL的root用户密码

  • use mysql;,选择mysql数据库。
  • select user, password, host from user;,查看mysql库中的user表中存储着用户名、密码与权限。

  • 输入UPDATE user SET password=PASSWORD("新密码") WHERE user='root';更改密码。
  • flush privileges;进行更新。

  • 重新登录验证密码更改成功

MySQL建表建库

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(ID号,'用户id',password("用户密码"),"TRUE"); 添加新用户

  • 使用 select * from 表名; 查询表中的数据,*表示查询所有的参数信息,也可以指定某一参数比如username来进行查询。

  • 键入 mysql -u pc -p 使用新用户进行登录,验证新用户是否建立成功,登录成功,说明新建用户成功。

PHP测试

  • 新建一个PHP测试文件 vi /var/www/html/test.php ,输入如下

  • 用浏览器打开 localhost/test.php ,可以看见如下界面,测试成功

  • 简单测试之后,我们可以利用PHP和MySQL结合之前编的前端的代码,完善这个登录系统,做到简单的用户身份认证,进行改进编写了 Login.php
<?php

$uname=($_POST["username"]);
$pwd=($_POST["password"]);

/* echo $uname; */

$query_str="SELECT * FROM pc where username='{$uname}' and password='{$pwd}';";

/* echo "<br> {$query_str} <br>";*/

$mysqli = new mysqli("127.0.0.1", "root", "20155338", "pc");

/* 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_str)) {
    if ($result->num_rows > 0 ){
        echo "<br> Wellcome login Mr/Mrs:{$uname} <br> ";
    } else {
        echo "<br> login failed!!!! <br> " ;
    }

    /* free result set */
    $result->close();
}


$mysqli->close();

?>

  • 浏览器中输入127.0.0.1/csj5338.html来访问自己的页面,输入正确的用户名和密码(即自己所新建数据库表中存在的新加入的用户和密码),显示登陆成功。

  • 在其中输入错误的用户名和密码(即新建数据库表中不存在的),显示登录失败。

SQL注入

  • 在用户名输入框中输入' or 1=1#,密码随便输入,这时候的合成后的SQL查询语句为select * from lxmtable where username='' or 1=1#' and password='',#相当于注释符,会把后面的内容都注释掉,所以相当于select * from lxmtable where username='' or 1=1而1=1是永真式,所以这个条件肯定恒成立,所以可以成功登录。

  • 还可以通过SQL注入在数据库中插入一条伪造的用户名和密码。
  • 首先修改后端的PHP代码,将if ($result = $mysqli->query($query_str))这条判断语句改成if ($result = $mysqli->multi_query($query_str))使得允许多条sql语句执行,接着在用户名输入框中输入';insert into pc values('100','5338','5338',"true");#,随便输入一个密码,接着登录,出现如下所示。

  • 检查一下数据库看是否插入成功,成功出现了我们新插入的用户。

  • 将PHP改回去,再次用新插入的用户进行登录,登录成功。

XSS攻击

  • XSS表示Cross Site Scripting(跨站脚本攻击),通过插入恶意脚本,实现对用户浏览器的控制。

  • /var/www/html目录下事先保存一个图片文件1.jpg,然后在登录网页的用户名窗口中输入<img src="1.jpg" />1111</a>,但是显示失败.原因就是在之前的php文件里有句echo $user,将匹配出错的那句echo "<br> login failed!!!! <br> ;改成了echo $uname之后攻击成功。

基础问题回答

(1)什么是表单

  • 表单在网页中主要负责数据采集功能。

    一个表单有三个基本组成部分:

  • 表单标签,这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法。

  • 表单域,包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。

  • 表单按钮,包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入

(2)浏览器可以解析运行什么语言。

  • 超文本标记语言:HTML

  • 可扩展标记语言:XML

  • 脚本语言:ASP、PHP、Script、JavaScript、VBScript、Perl、Python、ColdFusion、Java、JSP等

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

  • ASP语言,PHP语言和JSP语言
posted @ 2018-05-22 00:49  Csj-rup  阅读(154)  评论(0编辑  收藏  举报