zoukankan      html  css  js  c++  java
  • # 2019-2020-2 网络对抗技术 20175333 曹雅坤 Exp9 Web安全基础

    2019-2020-2 网络对抗技术 20175333 曹雅坤 Exp9 Web安全基础

    实验内容

    • Webgoat实践下相关实验
    • 理解常用网络攻击技术的基本原理
    • 实践要求包括(SQL,XSS,CSRF)不少于7个题目

    实验任务

    WebGoat

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

    • 下载合适的JDK安装包

    • 安装配置java环境参照kaliJDK安装

    • 下载webgoat-container-7.0.1-war-exec.jar文件
      因WebGoat默认使用8080端口,所以开启前先用netstat -tupln | grep 8080查看端口是否被占用,如果被占用,用kill 进程号终止占用8080端口的进程

    • 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登录界面

    • 用默认用户名密码登录

    一.SQL注入攻击(Injection Flaws)

    1、命令注入(Command Injection)

    • 命令注入的原理是在正常的参数提交过程中添加恶意代码以执行某条指令。命令注入攻击对任何一个以参数驱动的站点来说都是一个严重威胁。这种攻击技术背后的技术方法,简单易学,能造成大范围的损害,危及系统安全。
    • 右键点击页面复选框,选择inspect Element 审查网页元素对源代码进行修改
    • 对应位置的代码,双击进行修改,添加"& netstat -an & ipconfig"

    点击view 可以看到执行指令后的网络端口使用情况和IP地址。

    2.数字型注入(Numeric SQL Injection)

    • 注入数字型数据(如:永真式)达到注入的效果。

    • 在station字段中注入特征字符,组合成新的SQL语句。

    • 右键点击页面城市名称复选框,选择inspect Element审查网页元素对源代码进行修改

    • 在选中的城市编号Value值后添加or 1=1

    • 点击view 可以看到所有城市的天气情况

    3.日志欺骗(Log Spoofing)

    • 通过在日志文件中插入脚本实现欺骗。攻击者可以利用这种方式清除他们在日志中的痕迹

    • 灰色区域代表在 Web服务器的日志中的记录的内容,我们的目的是使用户名为“admin”的用户在日志中显示“成功登录”

    • 利用回车(0D%)和换行符(%0A),在 username 中填入cyk5333%0d%0aLogin Succeeded for username: admin

    • 点击Login可以看到login succeed for admin

    4.SQL 注入(LAB: SQL Injection)Stage 3: 数字型 SQL 注入(Stage 3: Numeric SQL Injection)

    • 通过注入数字型数据,绕过认证,可以通过普通员工的账户,查看到BOSS的用户信息。

    • 使用用户名 Larry,密码 larry 点击login登录,点击ViewProfile查看用户信息

    • 选择ListStaff返回员工界面,右键点击ViewProfile复选框,选择inspect Element审查网页元素源代码,看到数据库索引的依据是员工ID,推测返回的是每次查询到的第一条数据。

    • 将员工ID的value改成101 or 1=1 order by salary desc,这条SQL语句意思是按照员工工资将员工降序排序,使得老板的信息作为查询到的第一条数据。

    • ,点击ViewProfile查看用户信息,可以看到查询出的员工信息已经变成了老板的信息

    5.字符串注入(String SQL Injection)

    • 通过注入字符串绕过认证

    • 基于查询语句构造自己的 SQL 注入字符串。

    • 这个页面的表格,允许用户查看他们的信用卡号码。尝试通过 SQL 注入将所有信用卡信息 显示出来。尝试的用户名是“Smith”。

    • 正常情况下只能查询到用户名对应的信用卡号码

    • 输入构造的查询用户名Smith' or 1=1--(Smith 和1=1都成了查询的条件,而1=1是永真式,因此能查询到表里所有的数据)

    • 得到所有用户的信用卡号码,攻击成功!

    二.XSS攻击(Cross‐Site Scripting)
    跨站脚本攻击是通过HTML注入劫持用户的浏览器,任意构造用户当前浏览的HTML内容,可以模拟用户当前的操作。这里实验的是一种获取用户名和密码的攻击。
    1.存储型XSS攻击(Stored XSS Attacks)

    • 这种攻击常见于论坛等可留言可评论平台,用户留言的时候输入一段JavaScript脚本,这段脚本就会被保存在数据库中。因为是留言,所以任何用户在打开网页的时候,这个脚本就会被从数据库中取出来运行。

    • 写入非法的消息内容,可以导致其他用户访问时载入非预期的页面或内容

    • 在title中输入任意字符,留言板中输入<script>alert("You've been attacked by cyk5333!!!");</script>

    • 点击submit,网页下会生成留言的标题列表,点选后攻击成功

    2.反射型XSS攻击(Reflected XSS Attacks)

    • 在反射的XSS攻击中,攻击者可以使用攻击脚本创建一个URL,并将其发布到另一个网站、通过电子邮件或其他方式让受害者点击它。
    • 使用攻击脚本创建URL,并将其写入网站中,当读取到该URL的时候就会被攻击
    • 在assess code栏输入代码<script>alert("You've been attacked by cyk5333!!!");</script>,点击Update Cart的同时页面给出攻击反馈

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

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

    • 跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。如:<img src="https://www.mybank.com/me?transferFunds=5000&to=123456"/>,当受害者的浏览器试图显示此页面时,它将使用指定的参数向www.mybank.com的“me”端点发出请求。浏览器将请求链接以获得图像,即使它实际上是一个资金转移功能。提交请求时,浏览器将添加与站点相关的所有cookie。因此,如果用户对站点进行了身份验证,并且拥有永久或当前会话cookie,那么站点将无法将其与合法的用户请求区分开来。通过这种方式,攻击者可以让受害者执行他们不打算执行的操作,比如“购买物品”,或者该站点提供的任何其他功能。

    • 项目要求:向新闻组发送一封email。这个email包含一个image,其URL指向一个恶意请求。URL应该指向“攻击”servlet,其中包含“屏幕”和“菜单”参数,以及一个额外的参数“transferFunds”,其数值为5000。可以通过在右侧插入的参数中找到“Screen”和“menu”值来构造链接。当经过身份验证的CSRF电子邮件的收件人将被转移他们的资金

    • 查看页面右侧Parameters中的src和menu值,分别为314和900
      在title中输入任意参数,message框中输入<img src="http://localhost:8080/WebGoat/attack?Screen=314&menu=900&transferFunds=5000" width="1" height="1" />,以图片的的形式将URL放进Message框,这时的URL对其他用户是不可见的(宽高设置成1像素的目的是隐藏该图片),用户一旦点击图片,就会触发一个CSRF事件,点击Submit提交

    • 网页在Message List中生成消息标题。点选后,当前页面就会下载这个消息并显示出来,转走用户的5000元,从而达到CSRF攻击的目的。可以从左侧的任务栏看到任务已完成。

    问题回答

    • SQL注入攻击原理,如何防御
      • 原理:SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
      • 防御:
        • 关闭或删除不必要的交互式提交表单页面
        • 对用户输入点相关代码进行关键字的过滤,以规范代码安全性
        • 将数据库里的内容进行加密处理
    • XSS攻击的原理,如何防御
      • 原理:XSS:跨站脚本。攻击者利用网站漏洞,输入可以显示在页面上的、对其他用户造成影响的HTML代码;由于受害者浏览器对目标服务器的信任,当其访问目标服务器上被注入恶意脚本的页面后,这段恶意脚本可以顺利执行,实现获取用户cookie并可以利用用户身份进行非法操作的目的。
      • 防御:
        • 用户角度:提高防范意识,不要轻易输入个人信息,如用户名密码;
        • 网页制作者角度:对输入和URL参数进行过滤,限制用户的输入格式。
    • CSRF攻击原理,如何防御
      • 原理:
        • CSRF :跨站请求伪造。CSRF就是冒名登录。跨站请求伪造就是欺骗用户浏览器,使用被攻击者的认证身份在认证过的网站中进行任何操作。
      • 防御:
        • 用户要提高防范意识,不轻易输入个人信息与密码等;
        • 验证请求是否为合法请求
        • 对于请求添加随机验证

    实验心得

    本次实验操作不难,在现有的环境下做实验,实际操作的部分理解了原理之后也比较容易。Webgoat帮助手册对每个项目的原理都有介绍,实在不行也可以找学长的博客。这次试验让我理解了许多真实网站中要求验证码和规定账号密码字符限制的原因,也让我明白了一些钓鱼链接,危险邮件是怎么工作的,知其然知其所以然,理解了原理,在以后的生活中就可以更好的防范这些危险。

  • 相关阅读:
    LeetCode 252. Meeting Rooms
    LeetCode 161. One Edit Distance
    LeetCode 156. Binary Tree Upside Down
    LeetCode 173. Binary Search Tree Iterator
    LeetCode 285. Inorder Successor in BST
    LeetCode 305. Number of Islands II
    LeetCode 272. Closest Binary Search Tree Value II
    LeetCode 270. Closest Binary Search Tree Value
    LeetCode 329. Longest Increasing Path in a Matrix
    LintCode Subtree
  • 原文地址:https://www.cnblogs.com/Hf-Hf/p/12972291.html
Copyright © 2011-2022 走看看