2019-2020-2 20175218陈敬勇 《网络对抗技术》 Exp8 Web基础

2019-2020-2 20175218陈敬勇 《网络对抗技术》 Exp8 Web基础

一、实践要求

  1. Web前端HTML

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

    • 理解JavaScript的基本功能,理解DOM。编写JavaScript验证用户名、密码的规则。
  3. Web后端:MySQL基础:正常安装、启动MySQL,建库、创建用户、修改密码、建表

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

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

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

二、实践原理

  • Web前端

    • 编程语言:html/css/javascript(js)
    • 运行环境:浏览器
  • Web后端

    • 编程语言:PHP/JSP/.NET...
    • 运行环境:应用服务器/中间件
  • 数据库编程

    • 编程语言:PHP/JSP/.NET相应的库,SQL语言
    • 运行环境:数据库服务器
  • SQL注入

    • 一种注入攻击,,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。
  • XSS攻击

    • 通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

三、实验步骤

任务一:Web前端HTML

  • 首先,kali中,在管理员权限下,通过命令 service apache2 start 开启Apache服务

  • 然后,桌面上右击,打开浏览器,在浏览器网址栏输入 127.0.0.1 ,如果可以打开Apache的默认网页,则开启成功

  • 在终端中,通过命令 cd /var/www/html 进入Apache目录下。然后输入命令 vi 20175218_form.html 新建一个简单且含有表单的html文件,然后写入一下内容:
<html> 
<head> 
<title>Login</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> 
<body> 
    <h2 align="center">Login</h2> 
            <center> 
        <form action="login" method="post"> 
            <input placeholder="E-mail" name="Name" class="user" type="email"> 
            <br> 
            </br> 
            <input placeholder="Password" name="Password" class="pass" type="password"> 
            <br> 
            </br> 
            <input type="submit" value="Login"> 
    </form> 
            </center> 
</body> 
</html>

  • 通过 wq 保存退出后,打开浏览器,在浏览器网址栏中输入 /var/www/html/20175218_form.html 回车打开网页如下图所示:

任务二:Web前端:javascipt

  • 通过 vi 20175218_login_test.html 新建一个html文件,在原有的 20175218_form.html 基础上,可以添加一段JavaScript代码,用来完成对用户是否填写用户名和密码的判断。写入 20175218_login_test.html 的内容如下:
<html> 
<head> 
<title>Login</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
</head> 

<body> 
<h2 align="center">Login</h2> 
    <center> 
    <form action="login" method="post" name="form_login"> 
        <input placeholder="E-mail" name="Name" 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> 
    </center> 
<script language="javascript"> 
    function validateLogin(){ 
        var sUserName = document.form_login.Name.value ; 
        var sPassword = document.form_login.Password.value ; 
        if ((sUserName =="") || (sUserName=="Your email")){ 
            alert("Please fill in User Email!"); 
            return false ; 
        } 
        if ((sPassword =="") || (sPassword=="Your password")){ 
            alert("Please fill in Password!"); 
            return false ; 
        } 
    } 
</script> 

</body> 
</html>

  • 通过 wq 保存退出后,打开浏览器,在浏览器网址栏中输入 /var/www/html/20175218_login_test.html 回车打开网页如下图所示,如果没有输入邮箱和密码就提交的,网页会提示“Please fill in User Email!”;

  • 或者只填写邮箱,没有输入密码的则会提示“Please fill in Password!”

任务三:Web后端:MySQL基础

  • 首先,kali中,在管理员权限下,通过命令 /etc/init.d/mysql start 开启MySQL服务

  • 然后,继续在管理员权限下输入命令 mysql -u root -p ,再输入默认的密码 password,登录 mysql

  • 通过命令 show databases; (注意:这里的命令后面需要添加一个;)查看数据库基本信息

  • 通过命令 use mysql; ,选择使用名为 mysql 的这个数据库

  • 通过命令 select user, password, host from user; 查看当前用户信息

  • 通过命令 update user set password=PASSWORD("20175218") where user='root'; 更改用户root的密码为20175218

  • 再次通过命令 select user, password, host from user; 查看当前用户信息,可以发现root的password处已有信息

  • 通过命令 flush privileges; 进行权限更新

  • 通过命令 exit 退出,然后在管理员权限下输入命令 mysql -u root -p 使用新密码进行登录

  • 通过命令 create database cjy; 建立一个名为 cjy 的数据库

  • 通过命令 show databases; 可以查看存在的数据库,发现刚刚创建的数据库也在

  • 通过命令 use cjy; 使用刚刚创建的数据库cjy

  • 通过命令 create table login (username VARCHAR(20),password VARCHAR(20)); 建立数据库表,并设置字段基本信息。其中,表名为 login ,类型为 VARCHAR(20) 的两个字段 username 和 password

  • 通过命令 show tables; 查看表的信息

  • 通过命令 insert into login values('20175218cjy@163.com','20175218'); 插入数据。其中,登录的email为 20175218cjy@163.com ,登录密码为 20175218

  • 通过命令 select * from login; 查询表中的数据

  • 通过命令 grant select,insert,update,delete on cjy.* to chenjingyong@localhost identified by "20175218"; 在MySQL中增加新用户,将对数据库cjy的所有表的 select,insert,update,delete 权限授予当前主机 localhost 登录的用户chenjingyong,登录密码是20175218

  • 增加新用户后,通过命令 exit 退出,然后在管理员权限下,使用新的用户名和密码进行登录,登录成功即说明成功增加新用户

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

  • 继续在/var/www/html 目录下,通过命令 vi phptest.php 新建一个PHP测试文件,写入内容如下:
<?php 
echo ($_GET["a"]); 
include($_GET["a"]); 
echo "Hello word! This is my php test page!<br>"; 
?>

  • 通过 wq 保存退出后,打开浏览器,在浏览器网址栏中输入 localhost:80/phptest.php ,可看到文件的内容

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

  • 先通过命令 vi login.php 创建一个php文件,获取来自 20175218_login_test.html 的表单数据(下面还需要修改 20175218_login_test.html ),然后进行登录身份认证,写入内容如下:
<?php
$uname=$_POST["Name"];
$pwd=$_POST["Password"];
echo $uname;
$query_str="SELECT * FROM login where username='$uname' and password='$pwd';";
$mysqli = new mysqli("127.0.0.1", "chenjingyong", "20175218", "cjy");
$query_str1="use cjy;";

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

  • 然后将 20175218_login_test.html 中的 action 改为 login.php ,即表单中数据将被送入 login.php 进行处理

  • 通过 wq 保存退出后,打开浏览器,在浏览器网址栏中输入 127.0.0.1/login.php 直接跳转到 login.php 界面,可以发现连接成功,但是由于没有输入登录信息,所以 login 失败,如下所示:

  • 在浏览器网址栏中输入 127.0.0.1/login_test.html 进入登录界面,输入正确的用户名和密码登陆,就可以成功登陆了

  • 如果随便输入一个没有的邮箱以及密码,则会显示登陆失败

任务五:最简单的SQL注入,XSS攻击测试

SQL注入

  • 在用户名输入框输入 ' or 1=1# ,然后密码任意输入,就可登陆成功(这里遇到了一个问题,在后面进行阐述)

  • 为啥能够这样登录呢?

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

XSS攻击

  • 将一张想要插入的图片放在/var/www/html目录下(我这里的是qyc.jpg)。然后在用户名输入框输入 ,随便输入密码,发现在网页中成功读取到图片

四、实验中遇到的问题

问题一

在进行SQL注入时,输入 ' or 1=1# 进行登录,报错需要email格式

解决方法: 出错后,检查 20175218_login_test.html ,发现写的type是email,所以填写时会检查格式是否是email格式。将其改为普通的文本格式text即可

五、实践思考

问题一

(1)什么是表单

答:对于表单,我首先想到的就是表格,但是不同于表格的简单含义。表单具有数据采集功能,在我们学习过网络安全编程基础后,我也知道大多数网页设计都需要用到表单,也就是form元素,主要包括表单标签、表单域、表单按钮三大组成部分

问题二

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

答:对于浏览器,首先肯定是html语言,毕竟上学期可是写过很多的,然后还有XML、Python、PHP、JavaScript、ASP等。

问题三

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

答:支持的动态语言主要就是PHP、ASP、JSP。其中,PHP是一种跨平台的服务器端的嵌入式脚本语言;ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或Web应用程序;JSP是Sun公司推出的新一代网站开发语言,在Serverlet和JavaBean的支持下,可以完成功能强大的站点程序。

六、实验收获与感想

这次实验,总的来说不是很困难,但是做得还算比较顺利,稍微卡住的一处就是在SQL注入的时候,我开始想的是这个填入不就形成永真式了吗,为啥不行呢,这个之前课程老师都说过好多的啊,非常纳闷。直到后来提示需要email地址的格式,于是我就想起要去看看type,结果还真是这里,于是将其改为text成功解决问题。通过这一次实验,也让我对Web前端HTML和javascipt,以及Web后端的知识和SQL注入再一次熟悉了一遍(之前学过相关知识),还有就是对最简单的XSS攻击也了解了一些,收获颇丰。最后,希望在以后的实验中能够做得更好。

posted @ 2020-05-21 22:14  20175218陈敬勇  阅读(161)  评论(0编辑  收藏  举报