网络对抗实验八 Web安全

发布时间 2023-05-24 16:23:32作者: 少管我

Exp8 Web安全

实验目标

(1)Web前端HTML

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

(2)Web前端javascipt

  • 理解JavaScript的基本功能,理解DOM。

  • 在(1)的基础上,编写JavaScript验证用户名、密码的规则。在用户点击登陆按钮后回显“欢迎+输入的用户名”

  • 尝试注入攻击:利用回显用户名注入HTML及JavaScript。

(3)Web后端

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

(4)Web后端

  • 编写PHP网页,连接数据库,进行用户认证

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

(6)选做Webgoat或类似平台的SQL注入、XSS、CSRF攻击各一例。

实验内容

0 基础问题回答

0.1 什么是表单?

0.2 浏览器可以解析运行什么语言。

0.3 WebServer支持哪些动态语言

0.4 防范注入攻击的方法有哪些?

1 实验原理

WebGoat

  • WebGoat是OWASP组织研制出的用于进行web漏洞实验的应用平台,用来说明web应用中存在的安全漏洞。WebGoat运行在带有java虚拟机的平台之上,目前提供的训练课程有很多,包含了XSS、线程安全、SQL注入、访问控制、隐藏字段、Cookie等。

SQL注入攻击原理

  • SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
  • Web应用对后台数据库查询语句处理存在的安全漏洞。即为:在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符串的检查,例如:',--,# 这些特殊字符
  • 后台数据库将其认作正常SQL指令后正常执行,可能实现对后台数据库进行各种操作,甚至造成破坏后台数据库等严重后果。

XSS攻击

  • XSS跨站脚本。攻击者利用网站漏洞(通常这些漏洞是指网站后台处理程序没有很好的对用户输入进行过滤),输入可以显示在页面上的、对其他用户造成影响的HTML代码;从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
  • 攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。

CSRF攻击

  • CSRF :跨站请求伪造。即冒名登录。跨站请求伪造的核心本质是窃取用户的Session,或者说Cookie,因为目前主流情况Session都是存在Cookie中.攻击者并不关心被害者具体帐号和密码,因为一旦用户进行了登录,Session就是用户的唯一凭证,只要攻击者能够得到Session,就可以伪装成被害者进入服务器;
  • 主要是当访问网站A时输入用户名和密码,在通过验证后,网站A产生Cookie信息并返回,此时登录网站A成功,可正常发送请求到网站A。在未退出网站A前,若访问另一个网站B,网站B可返回一些攻击性代码并请求访问网站A;因此在网站B的请求下,向网站A发出请求。但网站A不知道该请求恶意的,因此还是会执行该恶意代码防御。

2 实验过程

2.1 web前端HTML

  • 输入sudo su进入管理员模式
  • kali默认已安装Apache,直接使用 service apache2 start命令打开Apache服务即可。
  • 使用service apache2 status 查看服务情况

此时在kali浏览器输入 127.0.0.1,如果可以打开Apache的默认网页,则表示开启成功!

开启成功

使用 cd /var/www/html进入Apache目录下,新建一个简单的含有表单的html文件 form.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>

在浏览器中输入 192.168.162.130/form.html 打开网页如图:

2.2 Web前端JavaScript

  • 编写JavaScript验证用户名、密码的规则。在原有 form.html 基础上,可以添加一段JavaScript代码,以完成对用户是否填写邮箱和密码的判断。修改后的 login.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="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-->
  <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>

在浏览器中输入 192.168.162.130/login.html 打开网页如图:

输入不正确的邮箱会提示:

未输入密码会提示:

2.3 Web后端:MySQL基础

  • 输入 service mysql start开启MySQL服务
  • 输入 mysql -u root -p使用root权限进入

  • 输入show databases;命令查看数据库基本信息

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

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

  • ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword'; 修改密码

  • flush privileges; 更新权限

  • exit 或者\q退出数据库,使用新的密码登录

  • create database whh;创建一个名为whh的数据库

  • show databases;查看存在的数据库

  • use xxx 数据库名称; 使用我们创建的数据库
  • create table login (username VARCHAR(20),password VARCHAR(20)); 建立数据库表,并设置字段基本信息。这里使用varchar类型而不是char类型,原因为char类型指定大小后会预分配固定大小,不管是否使用空间都被占用;varchar类型则根据实际应用的大小占据空间。

  • show tables; 查看表信息

  • insert into login values('20201329wh','20201329'); 插入数据
  • select * from 表名; 查询表中的数据

GRANT select,insert,update,delete
ON whh.* 
TO whh@localhost    //可以是localhost,也可以是远程登录方式的IP
identified by "20201329";

GRANT select,insert,update,delete ON whh.* TO whh@localhost identified by "20201329";

登录成功,说明成功增加新用户

2.4 Web后端

编写PHP网页,连接数据库,进行用户认证

问题与解决

实验体会与感想